ROTEIRO 1 INTRODUÇÃO AO QUARTUS II Prof. Dr. Amauri Amorin Assef *Departamento Acadêmico de Eletrotécnica/DAELT - UTFPR, Curitiba amauriassef@utfpr.edu.br 1. Introdução Cada circuito lógico projetado com o software Quartus é chamado de projeto (project). O software funciona com um projeto de cada vez e mantém todas as informações para esse projeto em um único diretório (pasta) no sistema de arquivos. Para começar um novo projeto, o primeiro passo é criar um diretório para manter seus arquivos. Para esta prática vamos criar o diretório aula1. O exemplo de execução desta aplicação é um simples circuito para controle de luz. Inicie o software Quartus II. Você deverá ver uma tela semelhante à da Figura 1. Figura 1 Tela principal do Quartus II. 2. Criando um novo projeto Para começar a trabalhar em um novo projeto, primeiro temos que definir um novo projeto. O software Quartus facilita a tarefa do designer fornecendo suporte na forma de um assistente. Crie um novo projeto da seguinte maneira: 1
1. Selecione File > New Project Wizard e clique em Next para acessar a janela da Figura 2, que pede o nome do diretório do projeto. 2. Definir o diretório de trabalho como aula1; naturalmente, você pode usar algum outro nome do diretório de sua escolha se você preferir. O projeto deve ter um nome, que normalmente é o mesmo que a entidade de design de nível superior que será incluída no projeto. Escolha aula1 como nome para o projeto e para a entidade de nível superior, conforme mostrado Na Figura 2 pressione Next. Caso ainda o diretório aula1 não tenha sido criado, o software Quartus exibe a caixa pop-up perguntando se deve criar o diretório desejado. Clique em Sim, e depois Next até chegar na tela da Figura 3. Figura 2 Criando um novo projeto. 3. Na tela da Figura 3 temos que especificar o tipo de dispositivo no qual o circuito projetado será implementado. Escolha a família de dispositivos da série Cyclone para a sua placa de série DE. Podemos permitir que o software Quartus Prime selecione um dispositivo específico na família, ou podemos escolher o dispositivo explicitamente. Tomaremos esta última abordagem. Na lista de dispositivos disponíveis, escolha o nome do dispositivo apropriado para a placa da série DE. Uma lista de nomes de dispositivos nas placas da série DE pode ser encontrada na Tabela 1. Pressione Next, que abre a janela na Figura 4. 2
Figura 3 Seleção da FPGA. Tabela 1 Dispositivos FPGA da série DE. Nome da placa DE Dispositivo FPGA DE0-CV DE0-Nano DE0-Nano-SoC DE1-SoC DE10-Lite DE5a-NET Cyclone V 5CEBA4F23C7 Cyclone IV E EP4CE22F17C6 Cyclone V SoC 5CSEMA4U23C6 Cyclone V SoC 5CSEMA5F31C6 Max 10 10M50DAF484C7G Arria 10 10AX115N3F45E2SG 4. Na tela da Figura 4, o usuário pode especificar as ferramentas de terceiros que devem ser usadas para validação do projeto. Um termo usado geralmente para o software do CAD para circuitos eletrônicos é ferramentas de EDA (Electronic Design Automation). Uma vez que dependeremos exclusivamente das ferramentas Quartus, não iremos escolher outras ferramentas. Pressione Next. 3
Figura 4 Seleção de ferramentas EDA. 5. Um resumo das configurações escolhidas aparece na tela mostrada na Figura 5. Pressione Finish, para retornar para a janela principal do Quartus, conforme indicado na Figura 6. Figura 5 Resumo das configurações do projeto. 4
Figura 6 Tela do Quartus após a criação do projeto. 3. Entrada de projeto utilizando código VHDL Como um exemplo de projeto, usaremos o circuito controlador registrado de luz de duas vias mostrado na Figura 7. O circuito pode ser usado para controlar uma única luz de qualquer um dos dois interruptores, x1 e x2, onde um interruptor fechado corresponde ao valor lógico 1. A tabela verdade para o circuito também é apresentada. Note que esta é apenas a função OR Exclusiva das entradas x1 e x2, mas vamos especificá-lo usando as portas lógicas mostradas. Figura 7 Controlador de luz de duas vias. O circuito necessário é descrito pelo código VHDL na Figura 7. Observe que a entidade VHDL é chamada de aula1 para corresponder ao nome que foi especificado quando o projeto foi criado. Esse código pode ser digitado em um arquivo usando qualquer editor de texto ou usando as facilidades de edição de texto no Quartus. Enquanto, pode ser dado qualquer nome para o arquivo, sendo uma prática comum usar o mesmo nome da entidade VHDL de nível superior (top level). O 5
nome do arquivo deve incluir a extensão vhd, que indica um arquivo VHDL. Então, vamos usar o nome aula1.vhd. LIBRARY ieee ; USE ieee.std_logic_1164.all ; ------------------------------------------ ENTITY aula1 IS PORT ( x1, x2 : IN STD_LOGIC ; f : OUT STD_LOGIC ) ; END aula1; ------------------------------------------ ARCHITECTURE behavior OF aula1 IS BEGIN f <= (x1 AND NOT x2) OR (NOT x1 AND x2); END behavior; Figura 8 Código VHDL para o controlador registrado de luz de duas vias. 3.1. Usando o editor do Quartus Esta seção mostra como usar o editor de texto do Quartus para criar o arquivo de códigofonte VHDL, que nomearemos aula1.vhd. Selecione File > New File, para obter a janela da Figura 9, escolha arquivo VHDL e clique em OK. Isso abre a janela Editor de texto. A primeira etapa é especificar um nome para o arquivo que será criado. Selecione File > Save as para abrir a caixa pop-up mostrada na Figura 10. Na caixa com a opção do Tipo do arquivo, selecionar VHDL. Na caixa Nome, escrever aula1. Coloque uma marca de seleção na caixa Add file to current Project (Adicionar arquivo ao projeto atual). Clique em Salvar para colocar o arquivo no diretório aulal e retornar à janela do editor. Digite o código VHDL no editor de texto (Figura 11) e salve o arquivo (File > Salve as ou atalho Ctrl-s). Dois recursos do editor de texto são especialmente convenientes para digitar o código VHDL. Em primeiro lugar, o editor pode exibir diferentes tipos de declarações VHDL em cores diferentes, o que é a opção padrão. Em segundo lugar, o editor pode automaticamente recuar o texto em uma nova linha para que ele corresponda a linha anterior. Essas opções podem ser controladas pelas configurações em Tools > Options > Text Editor.. 6
Figura 9 Escolha do arquivo em formato VHDL. Figura 10 Tela para salvar o arquivo em formato VHDL. 3.1.1. Usando o editor do Quartus A sintaxe do código VHDL às vezes é difícil para um designer lembrar. Para ajudar com esse problema, o editor de texto fornece uma coleção de modelos VHDL (templates). Os modelos fornecem exemplos de vários tipos de instruções VHDL, como uma declaração ENTITY, uma instrução CASE e instruções de atribuição. Vale a pena consultar os modelos selecionando Edit > Insert Template > VHDL para se familiarizar com este recurso. 7
Figura 11 Tela do Quartus com arquivo VHDL para edição. 4. Compilando o projeto O código VHDL no arquivo aula1.vhd é processado por várias ferramentas do Quartus que analisam o código, sintetizam o circuito e geram uma implementação dele para o chip de destino. Essas ferramentas são controladas pelo programa aplicativo chamado Compiler. Execute o Compilador selecionando Processing > Start Compilation ou clicando no ícone da barra de ferramentas que se parece com um triângulo roxo. Seu projeto deve ser salvo antes de compilar. À medida que a compilação se move através de várias fases, o seu progresso é relatado numa janela no lado esquerdo do Quartus. Na janela de mensagem, na parte inferior da figura, várias mensagens são exibidas durante todo o processo de compilação. Em caso de erros, haverá mensagens apropriadas. Quando a compilação é concluída, um relatório de compilação é produzido. Uma aba mostrando este relatório é aberta automaticamente, como pode ser visto na Figura 12 A guia pode ser fechada da maneira normal e pode ser aberta a qualquer momento selecionando Processing > Compilation Report ou clicando no respectivo ícone. O relatório inclui um número de seções listadas no lado esquerdo. A Figura 12 exibe a seção Compiler Flow Summary, que indica que apenas um elemento lógico e três pinos são necessários para implementar esse minúsculo circuito no chip FPGA selecionado. 8
Figura 12 Tela com indicação de sucesso na compilação do projeto. 5. Declaração da pinagem (Pin Assignment) Durante a compilação acima, o Quartus foi livre para escolher qualquer um dos pinos do FPGA selecionado para servir como entradas e saídas. No entanto, a placa série DE tem conexões físicas prontas entre os pinos FPGA e os outros componentes na placa. Usaremos duas chaves, rotuladas SW0 e SW1, para fornecer as entradas externas, x1 e x2, ao nosso circuito de exemplo. Estas chaves são conectadas aos pinos FPGA listados na Tabela 2. Vamos conectar a saída f a um LED em sua placa de série DE. Para o DE2-115 usaremos um LED verde: LEDG0. No DE0-CV e DE1-SoC, vamos usar LEDR0. No DE0-Nano e DE0-Nano-SoC, usaremos LED0. A atribuição de pinos FPGA para os LEDs também pode ser encontrada na Tabela 2. Componente DE0-CV DE0-Nano Tabela 2 Atribuição da pinagem da série DE. DE0-Nano- SoC DE2-115 DE1-SoC SW0 PIN_U13 PIN_M1 PIN_L10 PIN_AB28 PIN_AB12 SW1 PIN_V13 PIN_T8 PIN_L9 PIN_AC28 PIN_AC12 LEDG0, LED0 ou LEDR0 PIN_AA2 PIN_A15 PIN_W15 PIN_E21 PIN_V16 A atribuição dos pinos pode ser realizada pelo Assignment Editor (Assignments > Assignment Editor) ou Pin Planner (Assignments > Pin Planner). A Figura 13 mostra a tela para o segundo caso. Basta digitar a posição dos pinos na coluna Location. 9
Figura 13 Tela do Pin Planner. 6. Simulando o projeto do circuito Antes de implementar o circuito projetado no chip FPGA na placa de série DE, é prudente simulá-lo para verificar sua correção. A ferramenta Simulation Waveform Editor do Quartus pode ser usada para simular o comportamento de um circuito projetado. Antes que o circuito possa ser simulado, é necessário criar as formas de onda desejadas, chamadas vetores de teste, para representar os sinais de entrada. Também é necessário especificar quais saídas, bem como possíveis pontos internos no circuito que o designer deseja observar. O simulador aplica os vetores de teste a um modelo do circuito implementado e determina a resposta esperada. Usaremos o Simulation Waveform Editor para desenhar os vetores de teste, da seguinte forma: 1. Na janela principal do Quartus, selecione File > New > Verification/Debugging Files > University Program VWF para abrir o Editor de Forma de Onda de Simulação; 2. A janela do editor de formas de onda de simulação é mostrada na Figura 14. Salve o arquivo sob o nome aula1.vwf; Observe que isso altera o nome na janela exibida. Defina a simulação desejada para executar de 0 a 200 ns selecionando Edit > Set End e inserindo 200 ns na caixa de diálogo que aparece. Selecionar View > Fit in Window para exibir toda a faixa de simulação de 0 a 200 ns na janela, como mostrado na Figura 15. 10
Figura 14 Tela da ferramenta Simulation Waveform Editor. Figura 15 - Tela da ferramenta Simulation Waveform Editor ajustada. 3. Em seguida, queremos incluir os nós de entrada e de saída do circuito a ser simulado. Clique em Edit > Insert > Insert Node or Bus para abrir a janela na Figura 16. É possível digitar o nome de um sinal (pino) na caixa Name, ou usar o Node Finder para procurar os sinais no projeto. Clique no botão denominado Node Finder para abrir a janela na Figura 17. O utilitário Node Finder possui um filtro usado para indicar o tipo de nós a serem encontrados. Uma vez que estamos interessados em pinos de entrada e saída, defina o filtro para pinos: All. Clique no botão List para localizar os nós de entrada e saída, conforme indicado no lado esquerdo da figura. Figura 16 Caixa para inserção de nó ou bus. 11
Figura 17 Seleção de nós para o Editor de Forma de Onda. 4. Clique no sinal x1 na caixa Nodes Found na Figura 17 e, em seguida, clique no sinal > para adicioná-lo à caixa Selected Nodes no lado direito da figura. Faça o mesmo para x2 e f. Clique em OK para fechar a janela do Node Finder e, em seguida, clique em OK na janela da Figura 17. Isso deixa uma janela do Editor de Forma de Onda totalmente exibida, como mostrado na Figura 18. Figura 18 Tela com os nós selecionados para simulação. Podemos gerar as formas de onda de entrada desejadas da seguinte forma. Clique na forma de onda para o nó x1. Quando uma forma de onda é selecionada, os comandos de edição no Wave Editor podem ser usados para desenhar as formas de onda desejadas. Os comandos estão disponíveis para ajustar um sinal selecionado para 0, 1, desconhecido (X), alta impedância (Z), fraco baixo (L), fraco alto (H), um valor de contagem (C), um valor arbitrário, um valor aleatório (R), inverter o seu valor existente (INV) ou definir uma forma de onda de relógio. Cada comando pode ser ativado usando o comando Edit > Value, ou através da barra de ferramentas para o Wave Editor. O menu Value também pode ser aberto clicando com o botão Forma de onda Defina x1 para 0 no intervalo de tempo de 0 a 100 ns. Em seguida, defina x1 para 1 no intervalo de tempo de 100 a 200 ns. Faça isso pressionando o mouse no início do intervalo e arrastando-o até o fim, que destaca o intervalo selecionado e escolhe o valor lógico 1 na barra de ferramentas. Faça x2 = 1 de 50 a 100 ns e também de 150 a 200 ns, o que corresponde à tabela de 12
verdade na Figura 12. Isso deve produzir a imagem na Figura 19. Observe que a saída f é exibida como tendo um valor desconhecido neste tempo, o que é indicado por um padrão de X; seu valor será determinado durante a simulação. Salve o arquivo. Figura 19 Configuração dos valores de teste. 6.1. Realizando a simulação Um circuito projetado pode ser simulado de duas maneiras. A maneira mais simples é assumir que elementos de lógica e fios de interconexão no FPGA são perfeitos, causando assim nenhum atraso na propagação de sinais através do circuito. Isso é chamado de simulação funcional (functional simulation). Uma alternativa mais complexa é levar em conta todos os atrasos de propagação, denominada simulação temporal (timing simulation). Tipicamente, a simulação funcional é usada para verificar a correção funcional de um circuito conforme está sendo projetado. 6.1.1. Simulação funcional Antes de executar uma simulação funcional, é necessário executar a Análise e Síntese (Analysis and Synthesis) do seu projeto, selecionando o ícone na janela principal do Quartus. Observe que Análise e Síntese é executado como parte do fluxo de compilação principal. Se você compilou seu design, então não é necessário executar Análise e Síntese novamente. Para executar a simulação funcional, selecione Simulation > Run Functional Simulation ou selecione o ícone na janela do Simulation Waveform Editor. Uma janela pop-up mostrará o progresso da simulação e, em seguida, fechará automaticamente quando estiver concluída. No final da simulação, uma segunda janela do Simulation Waveform Editor abrirá os resultados, como ilustrada na Figura 20. Observe que a saída f é como especificado na tabela de verdade da Figura 7. 13
Figura 20 Resultado do teste funcional. 6.1.2. Simulação temporal Tendo verificado que o circuito projetado é funcionalmente correto, devemos agora executar a simulação de tempo para ver como ele vai se comportar quando ele é realmente implementado no dispositivo FPGA escolhido. Antes de executar uma simulação de temporização, é necessário compilar seu projeto selecionando o ícone na janela principal do Quartus. Diferentemente das simulações funcionais, as simulações de tempo requerem a compilação completa do seu projeto, não apenas Análise e Síntese. Para executar a simulação de temporização, selecione Simulation > Run Timing Simulation ou selecione o respectivo ícone na janela Simulation Waveform Editor. A simulação deve produzir as formas de onda na Figura 21. Observe que existe um atraso de aproximadamente de 5 ns na produção de uma alteração no sinal f a partir do momento em que os sinais de entrada x1 e x2 mudam. Este atraso é devido aos atrasos de propagação no elemento lógico e os fios no dispositivo FPGA. Nota: as simulações de sincronização são suportadas apenas por FPGAs Cyclone IV e Stratix IV. Se a placa da série DE não tiver um FPGA Cyclone IV ou Stratix IV, o resultado de uma simulação de tempo será idêntico à simulação funcional. Figura 21 Resultado do teste temporal. 14
7. Exercício Fechar o projeto atual e criar um novo projeto, em outro diretório, modificando o arquivo VHDL para desenho em bloco. Para isto, no item 3.1 ao invés de escolher VHDL File, selecionar Block Diagram/Schematic File. Desenhar o circuito controlador de luz e salvar no formato BDF com o mesmo nome do projeto (Figura 22). Para selecionar os componentes, basta clicar duas vezes na área do arquivo BDF e escolher uma das opções. As portas lógicas estão no diretório Primitive. Para nomear os pinos, clicar com o botão esquerdo do mouse, selecionar a opção Properties e digitar o respectivo nome. Para conectar os componentes, passar com o mouse por cima de um dos terminais, clicar e arrastar até o outro ponto de conexão. Após o desenho do projeto, realizar a simulação funcional e temporal. Figura 22 Projeto em bloco esquemático. 8. Relatório Enviar o relatório por email (amauriassef@utfpr.edu.br), em pdf, até a data da próxima aula com o print das seguintes telas: Desenho do circuito; Sumário da compilação; Resultado da simulação funcional; Resultado da simulação temporal. 15