Licenciatura em Engenharia Electrotécnica e de Computadores 2004/05 1 o semestre Projecto de Sistemas Digitais Trabalho Prático 1 Modelação, síntese e implementação de circuitos sequenciais síncronos Objectivos Familiarização com as principais ferramentas em ambientes de projecto de sistemas digitais. Modelação em Verilog de um circuito digital sequencial síncrono; construção de um testbench que permita verificar a funcionalidade do modelo; síntese lógica do modelo validado e implementação do sistema numa plataforma de prototipagem. http://www.fe.up.pt/~aja/psd2004_05 Pág. 1 de 8
Parte 1 Modelação e síntese lógica Para exemplificar a utilização das ferramentas de projecto correspondentes a esta etapa vaise considerar um contador binário de 3 bits que se pretende simular e sintetizar. A listagem que se segue corresponde ao código Verilog do contador. module counter3b(clock, enable, reset, out, ovf); input clock, enable, reset; output [2:0] out; output ovf; reg [2:0] out; initial out=0; assign ovf = &out; // = out[2] & out[1] & out[0] always @(posedge clock) begin if (reset) out<=0; else if(enable) begin if (out==3 b111) // =7? out<=0; else out<=out+1; end end endmodule 1. Edite o código do contador no ficheiro counter3b.v colocando-o na sua área de trabalho. Após ter analisado o código correspondente ao modelo do contador, construa um testbench que lhe permita verificar a correcta funcionalidade do modelo. Crie para o efeito um ficheiro com o nome tb_counter3b.v. 2. Use a ferramenta de simulação ModelSim para fazer a verificação funcional do contador. (a) Invoque o ModelSim e crie um novo projecto (File New Project) alojando-o na sua área de trabalho (C:\users\???\sims) com o nome count. http://www.fe.up.pt/~aja/psd2004_05 Pág. 2 de 8
(b) Para especificar o projecto execute Options Edit Project. A janela de diálogo que surge permite-lhe indicar quais os ficheiros com código fonte que farão parte do projecto. Assim, com Browse... localize os ficheiros counter3b.v e tb_counter3b.v e faça Import. Desta forma está a copiar estes ficheiros da origem para o directório do projecto (C:\users\???\sims\count). Após cada operação de Import, faça Compile para compilar o código fonte e Add to Library. Este comando acrescenta o ficheiro compilado à biblioteca de trabalho (C:\users\???\sims\count\work) e acrescenta informação no ficheiro build_work.do que permitirá depois compilar automaticamente todos os ficheiros fonte do projecto. Corrija eventuais erros detectados durante a compilação. (c) Seleccione o modelo que representa o topo da hierarquia do projecto (tb_counter3b.v) fazendo Design Load New Design. (d) Antes de efectuar a simulação abra a janela que lhe permitirá visualizar as formas de onda resultantes da simulação (execute View Wave). Abra também a janela referente aos sinais do modelo (View Signals) e arraste os sinais que deseja monitorar para o lado esquerdo da janela de formas de onda. Como alternativa, pode executar o comando add wave * na janela principal do ModelSim que permite visualizar na janela de formas de onda todos os sinais visíveis do top-level. A configuração da janela de formas de onda (cores, base numérica de representação, etc.) pode ser alterada e gravada (File Save Format), sendo criado o ficheiro wave.do. Este pode ser posteriormente invocado noutra sessão de trabalho, a partir da janela de comando, para recuperar o ambiente especificado. (e) Simule agora o modelo executando Run Run -All e analise o resultado. (f) Altere o contador (ficheiro counter3b.v) de modo a torná-lo um contador up-down e verifique o seu funcionamento alterando também o respectivo testbench. Sempre que faça alterações em algum dos ficheiros que compõem o projecto, residentes no directório de simulação, deve recompilar o projecto (Design Compile Project), reiniciar o simulador (Run Restart) e executar de novo a simulação (Run Run -All). 3. Terminada a validação funcional do contador, use a ferramenta de síntese FPGA Express para obter o circuito lógico que o implementa. (a) Crie um novo projecto com File New Project, indicando como raíz o directório C:\users\???\syn. Acrescente ao projecto os ficheiros com código fonte sintetizável em Verilog (apenas counter3b.v neste caso). Caso seja necessário corrija eventuais erros, fazendo de seguida Update. (b) Proceda à síntese do circuito com Synthesis Create Implementation para uma tecnologia alvo XC4000 seleccionando Don t insert I/O pads. Analise e comente os resultados da síntese e compare os esquemas dos circuitos lógicos obtidos para a versão optimizada e para a versão não optimizada. http://www.fe.up.pt/~aja/psd2004_05 Pág. 3 de 8
(c) Experimente criar outras versões usando como critério de optimização, na síntese do circuito, a área ocupada ou a respectiva rapidez com diferentes níveis de esforço. Verifique qual a área mínima obtida para a implementação em termos de FMAPs e flip-flops. (d) Considerando a versão optimizada do circuito sintetizado, crie a netlist referente ao circuito executando Export netlist, seleccionando Verilog para o formato de saída para simulação (Simulation Output Format). Edite e analise o ficheiro assim obtido tendo o cuidado de não o alterar. (e) Repita o processo de validação funcional deste modelo, em vez do modelo original counter3b.v, usando o mesmo testbench. Parte 2 Implementação numa plataforma de ensaio Esta segunda parte do trabalho tem como objectivo exemplificar a implementação física do circuito referente ao contador, entretanto simulado e sintetizado, na plataforma FEUPix. Esta plataforma dispõe de um circuito FPGA da família XC4000E da Xilinx, permitindo a realização de protótipos e a sua experimentação. Para este efeito existe uma biblioteca de compoenentes que podem ser instanciados, servindo por exemplo para estabelecer uma interface para o protótipo realizado. No presente caso será usado um conjunto de botões de entrada para accionar as entradas do circuito, sendo o estado das saídas do contador monitoradas através de um conjunto de LEDs. O resultado do processo de síntese que realizou com o FPGA Express é um ficheiro EDIF que contém um modelo estrutural ao nível lógico do circuito projectado, já mapeado para as células disponíveis nesse tipo de FPGA: tabelas de 4 entradas (FMAP), tabelas de 3 entradas (HMAP) e flip-flops do tipo D. Para implementar esse circuito é agora necessário acrescentar buffers de entrada e saída que liguem as entradas e saídas aos terminais apropriados do circuito FPGA que estão já ligados a botões de pressão e LEDs. 1. Execute o Project Manager do ambiente de projecto Xilinx Foundation. Crie um novo projecto com as características que se seguem, não escolhendo nomes para directórios ou ficheiros com mais de 8 caracteres: Nome: escolha, por exemplo, testc3b; Directório: crie um directório na sua área de trabalho, destinado aos projectos Xilinx (por exemplo, C:\users\???\fndtn). Ao criar o projecto é criado um subdirectório dentro deste, com o mesmo nome do projecto, constituindo o directório do projecto e onde serão mantidos todos os ficheiros que fazem parte do projecto. No nosso exemplo, o directório do projecto será C:\users\???\fndtn\testc3b, sendo criado um ficheiro chamado testc3b.pdf (project description file) que contém informação relativa ao projecto; http://www.fe.up.pt/~aja/psd2004_05 Pág. 4 de 8
Project Type: escolha schematic, uma vez que o top-level do circuito será especificado com o editor esquemático; Family: XC4000E, a família do circuito FPGA que equipa a plataforma FEUPix e a que se destina o circuito a ser implementado; Device: XC4010EPC84, o dispositivo FPGA a que se destina o circuito a ser projectado; Último campo (sem nome): este parâmetro caracteriza a FPGA em termos de rapidez (escolha 4 que corresponde às que existem montadas nas cartas FEUPix). 2. Associe a biblioteca FEUPix ao seu projecto para poder dispôr dos seus componentes. Para tal, no Project Manager execute File Project Libraries, escolha FEUPix e faça Add. 3. Copie todos os ficheiros EDIF (extensão.edf) que estão em C:\local\feupix_lib_1.4\netlist para o directório do seu projecto. Estes ficheiros contêm as netlists dos componentes da biblioteca FEUPix, que foram criados em Verilog e que têm de residir no directório de qualquer projecto que os utilize. No nosso exemplo, esses ficheiros deveriam ser copiados para dentro de C:\users\???\fndtn\testc3b. 4. Invoque o editor esquemático a partir do Project Manager. Por omissão é criado um esquemático vazio com o nome atribuído ao projecto seguido de um número de ordem (testc3b1.sch). (a) Construa um componente na biblioteca do projecto que represente o circuito já sintetizado com o FPGA Express. Para isso, copie para o directório do seu projecto apenas o ficheiro EDIF produzido aquando da síntese. No editor esquemático execute Hierarchy Create Macro Symbol from Netlist, indicando como fonte o nome do ficheiro EDIF que tem a netlist. (b) Construa um esquema com o símbolo do componente que criou e acrescente os interfaces necessários. Pode utilizar o componente LEDs para ligar as 4 saídas do contador e o componente KEYS para ligar às 3 entradas (clock, reset e enable). Note que o sinal de relógio deve ser distribuído através de um buffer especial, que se chama BUFGS, para garantir que o clock skew resultante não compromete o funcionamento do circuito. Atribua nomes a todos os fios usados no seu circuito fazendo duplo click sobre o respectivo fio. 5. Crie a netlist do circuito assim desenhado (Options Create Netlist) e implemente o projecto no Project Manager (Implementation) ignorando eventuais mensagens de aviso. O resultado final da implementação é o ficheiro com extensão.bit criado no directório do projecto, que deverá ser carregado para a FPGA com o programa lpx. 6. Após a implementação examine os relatórios produzidos pela execução dos vários programas e identifique no: http://www.fe.up.pt/~aja/psd2004_05 Pág. 5 de 8
Map report: a ocupação da FPGA em termos de LUTs (look-up tables) de 4 entradas, LUTs de 3 entradas, flip-flops e CLBs (configurable logic blocks), assim como a complexidade do circuito, medida em portas lógicas equivalentes (equivalente ao número de portas NAND de 2 entradas); Post-layout timing report: a frequência máxima estimada para o sinal de relógio e o máximo atraso das interligações. 7. Experimente o circuito na plataforma FEUPix e verifique que cumpre a funcionalidade pretendida. Parte 3 Utilização do ambiente ISE da Xilinx Nas duas primeiras partes deste trabalho exemplificou-se o fluxo de projecto típico no desenvolvimento de um sistema digital recorrendo a ferramentas autónomas, tais como, ModelSim, FPGA Express e Xilinx Foundation. Um dos inconvenientes, visível mesmo num projecto simples, é a necessidade de criar e gerir um project em cada uma daquelas ferramentas, criando redundância de informação e dificultando a sua correcta gestão no espaço de trabalho. Como alternativa, apresenta-se nesta terceira parte do trabalho um ambiente de desenvolvimento integrado a partir do qual são realizadas as várias tarefas relativas ao fluxo de projecto. Este ambiente, proprietário da Xilinx, designa-se por ISE (Integrated Software Environment) e suporta os circuitos FPGA pertencentes às várias famílias Spartan e Virtex. A seguir mostram-se as principais fases de desenvolvimento baseadas no Xilinx ISE considerando o exemplo que tem vindo a ser usado (ficheiros counter3b.v e tb_counter3b.v). 1. Invoque o ambiente ISE usando o Project Navigator. De seguida crie um novo projecto dando-lhe o nome counter, localizando-o em C:\users\???\ISE\counter, referindo-se a uma abordagem HDL e com as seguintes propriedades (manter as atribuições fixadas por omissão): Device Family: Virtex; Device: xcv50; Package: bg256; Speed Grade: -5; Top-Level Module Type: HDL; Synthesis Tool: XST; Simulator: Modelsim; Generated Simulation Language: Verilog http://www.fe.up.pt/~aja/psd2004_05 Pág. 6 de 8
Quando surgir a opção Create a New Source passar à frente e em Add Existing Sources fazer Add Source counter3b.v, indicando que se trata de código fonte (Verilog Design File). Repetir esta última operação para o ficheiro tb_counter3b.v especificando que se trata de um testbench (Verilog Test Fixture File). Em ambos os casos mantenha seleccionada a opção Copy to Project que permite manter uma cópia do código fonte no directório do projecto. 2. Elaborado o projecto, passa-se à simulação do comportamento do modelo nele contido usando os estímulos definidos no ficheiro tb_counter3b.v. Para tal, na janela Sources in Project seleccione tb_counter3b.v e de seguida, na janela Processes for Source, expandindo o botão referente a ModelSim Simulator, faça duplo click em Simulate Behavioral Model executando de seguida o ModelSim. A utilização deste simulador foi já ensaiada na primeira parte deste trabalho, pelo que se dispensam comentários ao seu uso. Com base na visualização das formas de onda correspondentes aos sinais, verifiquee o comportamento do modelo. Como alternativa à criação de um ficheiro com o testbench, o ISE dispõe de uma ferramenta (HDL Bencher) que permite ao utilizador criar visualmente os estímulos a incluir no testbench. Ensaie esta funcionalidade criando um testbench alternativo ao fornecido. 3. A ferramenta de síntese usada neste ambiente designa-se por XST (Xilinx Synthesis Technology). Para proceder à síntese do circuito a partir do modelo descrito em counter3b.v, seleccione este ficheiro na janela Sources in Project e de seguida, na janela Processes for Source, faça duplo click em Synthesize - XST. Para especificar as propriedades a considerar durante o processo de síntese pode seleccionar Process Properties na janela principal e aí definir, por exemplo, o critério e o esforço de optimização, entre outros aspectos. Terminada a síntese podem consultar-se os resultados expandindo o botão referente a Synthesize - XST. 4. Para proceder à implementação do circuito sintetizado no circuito FPGA escolhido, antes de executar Implement Design na janela Processes for Sources relativamente à source counter3b.v, é necessário efectuar a atribuição dos sinais do circuito aos pinos de I/O. Para tal, seleccionar User Constraints, também na janela Processes for Sources e executar Assign Package Pins. Explore outras restrições que podem ser definidas relativamente ao circuito em causa. 5. Finalmente deve verificar-se se o circuito implementado satisfaz os objectivos que se propunham alcançar através da especificação inicial em Verilog. Assim, procede-se à simulação temporal do circuito usando os mesmos estímulos já utilizados durante a simulação funcional (ficheiro tb_counter3b.v). Para tal, na janela Sources in Project seleccione tb_counter3b.v e de seguida, na janela Processes for Source, expandindo o botão refehttp://www.fe.up.pt/~aja/psd2004_05 Pág. 7 de 8
rente a ModelSim Simulator, faça duplo click em Simulate Post-Place & Route Verilog Model executando de seguida o ModelSim. Para uma familiarização mais profunda com o Xilinx ISE aconselha-se seguir o respectivo tutorial disponível a partir da página da disciplina (http://www.fe.up.pt/~aja/psd2004_05/). Fim. http://www.fe.up.pt/~aja/psd2004_05 Pág. 8 de 8