Universidade Federal do Piauí Centro de Tecnologia Curso de Engenharia Elétrica PROJETO DE CIRCUITOS INTEGRADOS VLSI Prototipagem Prof. Marcos Zurita zurita@ufpi.edu.br www.ufpi.br/zurita Teresina - 2013
Prototipagem de um Modelo HDL em FPGA Uma vez um sistema descrito em uma linguagem HDL foi simulado com êxito, o mesmo pode ser prototipado em FPGA. Para isto, o primeiro passo é associar cada terminal externo do modelo à um pino do FPGA escolhido. Geralmente, para a modelagem de um sistema VLSI, adota-se uma placa de desenvolvimento em FPGA cujas características se adequem ao sistema alvo. Conhecendo-se a placa de desenvolvimento adotada, a determinação dos pinos do FPGA a serem utilizados torna-se bastante simples, bastando para isso uma rápida análise do manual da placa. 2
Prototipagem Placa de Desenvolvimento Adotada Altera Nios II Development Kit - Stratix II Edition Ethernet USER I/O Stratix II FPGA EP2S60F672C5ES RS232 RS232 USER I/O Memória SRAM Memória FLASH FLASH Card MAX CPLD Memória DRAM USER LEDs USER Keys USER Displays 3
Associando Terminais do Modelo à Pinos do FPGA A associação dos terminais externos de um modelo HDL à pinos do FPGA no Quartus II pode ser feita basicamente de três formas: Utilizando o Pin Planner; Utilizando o Assignment Editor; Edição manual do arquivo.qsf. A fim de ilustrar as três formas possíveis de associação de pinos, considere o modelo a seguir: 4
Divisor de Clock O sistema abaixo consiste em um divisor do clock de entrada (50MHz) com sinalização visual: LEDs 0 à 3: correspondem ao clock de entrada dividido por 2 26 à 2 23, respectivamente; LEDs 4 à 7: correspondem ao estado das teclas user_pb[0] à user_pb[3], respectivamente. Vcc clock (50MHz) reset user_pb[0] user_pb[1] user_pb[2] user_pb[3] clk rst_n clock_divider ledg[0] ledg[1] ledg[2] ledg[3] ledg[4] ledg[5] ledg[6] ledg[7] 5
Código de Implementação Divisor de Clock module clock_div(input logic clk, rst_n, output logic [7:0] ledg, input [3:0] user_pb); logic [25:0] c; logic [1:0] scaler; always_ff @(posedge clk, negedge rst_n) c[0] <= (~rst_n)? 1'b0 : ~c[0]; Terminais externos do módulo clock_div genvar i; // variável de indexação para o 'generate-for' generate for (i=0; i < 25; i++) begin : clocks always_ff @(posedge c[i], negedge rst_n) c[i+1] <= (~rst_n)? 1'b0 : ~c[i+1]; end endgenerate always_comb begin for (int j=0; j<4; j++) begin ledg[j] = c[25-j]; ledg[j+4] = ~user_pb[j]; end end endmodule 6
Diagrama RTL para o divisor de clock Detalhe dos 6 últimos FFs da cadeia: 7
Quartus II Pin Planner Janelas de tarefas e relatório Mapa de pinos do FPGA adotado Listagem dos pinos do FPGA 8
Quartus II Pin Planner: Mapa de Pinos do FPGA Pinos atribuídos ao projeto 9
Quartus II Pin Planner Exibe a legenda dos pinos Nome do terminal no código HDL Pino associado no FPGA Padrão de I/O relacionado Direção do sinal Banco de I/O correspondente ao o pino Grupo de alimentação correspondente 10
Quartus II Assignment Editor 11
Arquivo.qsf Síntese: set_location_assignment addr[10] -to PIN_M20 -comment "Endereço da ROM" set_instance_assignment -name IO_STANDARD "2.5 V" -to addr[10] set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to addr[10] 12
Acrescentar ao final do arquivo.qsf: Pinagem do Clock, Reset, LEDs e Chaves set_global_assignment -name AUTO_RESTART_CONFIGURATION OFF set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED" # MAIN CLOCK ======================================== set_location_assignment PIN_AF15 -to clk # MAIN RESET BUTTON ================================= set_location_assignment PIN_AA15 -to rst_n # USER LEDS ========================================= set_location_assignment PIN_AD26 -to ledg[0] set_location_assignment PIN_AD25 -to ledg[1] set_location_assignment PIN_AC25 -to ledg[2] set_location_assignment PIN_AC24 -to ledg[3] set_location_assignment PIN_AB24 -to ledg[4] set_location_assignment PIN_AB23 -to ledg[5] set_location_assignment PIN_AB26 -to ledg[6] set_location_assignment PIN_AB25 -to ledg[7] # USER KEYS ========================================= set_location_assignment PIN_W24 -to user_pb[0] set_location_assignment PIN_W23 -to user_pb[1] set_location_assignment PIN_Y24 -to user_pb[2] set_location_assignment PIN_Y23 -to user_pb[3] 13
incompleto... 14
Bibliografia Quartus II Handbook Version 12.1 Volume 2: Design Implementation and Optimization, Altera Corp., 2012. Karim, M.A., Chen, X., Projeto Digital: Conceitos e Princípios Básicos, LTC, 2009. 15