12
Universidade Anhanguera-Uniderp Pró-Reitoria de Graduação Curso: Engenharia Elétrica Disciplina: DTE217 - Dispositivos de Lógica Programável Prof Saulo Pimentel Wulhynek Laboratório 1 Tutorial Quartus II Pag 1 Laboratório 1 - Tutorial Quartus II 1. Introdução O objetivo deste laboratório é familiarizar o aluno com a ferramenta de simulação de VHDL Quartus II da Altera. Esta ferramenta será utilizada no decorrer da disciplina. No presente tutorial estão contemplados a inserção de projeto de circuito digital em VHDL na ferramenta, a simulação funcional e a simulação temporal. Este tutorial está baseado na versão 9.2, Service Pack 2 do Quartus II. 2. Criando um projeto em HDL no Quartus II Neste tutorial, vamos tomar como exemplo um circuito decodificador de 2 para 4 e vamos inseri-lo como um novo projeto e compilá-lo. O circuito a ser usado bem como o seu código em VHDL encontra-se na tabela abaixo. A sintaxe e o esquema do circuito estão fora do escopo desse laboratório. library ieee; -- use the IEEE library use ieee.std_logic_1164.all; -- specify which package in the library to include entity decodificador_2_para_4 is port (A,B : in bit; D0, D1, D2, D3 : out bit); end decodificador_2_para_4; architecture DECODER of decodificador_2_para_4 is begin D0 <= (not A) and (not B); D1 <= (not A) and B; D2 <= A and (not B); D3 <= A and B; end DECODER; Figura 1 - decodificador_2_para_4 e código VHDL Inicialmente crie um novo projeto: clique no menu “File” (arquivo) e selecione "New Project Wizard” (assistente de novo projeto). A caixa de diálogo "New Project Wizard” será aberta. Será exibida uma tela de apresentação. Clique em “next” para continuar. Nesta primeira tela você deve preencher o nome da pasta de trabalho do projeto, o nome do projeto e o nome da entidade de mais alto nível do projeto. Vamos chamar a entidade de mais alto nível de decodificador_2_para_4. Sugere-se criar uma pasta exclusiva para cada projeto pois o Quartus II gera vários arquivos durante a compilação e simulação. Veja Figura 2. Figura 2 - Caixa de Diálogo de novo projeto

Laboratório 1 - Tutorial Quartus II Introdução 2. Criando ...blog.samuelcavalcante.com/wp-content/uploads/2016/05/Tutorial-Prof... · 1. Introdução O objetivo deste laboratório

  • Upload
    hathuan

  • View
    218

  • Download
    1

Embed Size (px)

Citation preview

Universidade Anhanguera-Uniderp Pró-Reitoria de Graduação Curso: Engenharia Elétrica

Disciplina: DTE217 - Dispositivos de Lógica Programável Prof Saulo Pimentel Wulhynek

Laboratório 1 – Tutorial Quartus II – Pag 1

Laboratório 1 - Tutorial Quartus II 1. Introdução

O objetivo deste laboratório é familiarizar o aluno com a ferramenta de simulação de VHDL Quartus II da Altera. Esta ferramenta será utilizada no decorrer da disciplina. No presente tutorial estão contemplados a inserção de projeto de circuito digital em VHDL na ferramenta, a simulação funcional e a simulação temporal. Este tutorial está baseado na versão 9.2, Service Pack 2 do Quartus II.

2. Criando um projeto em HDL no Quartus II Neste tutorial, vamos tomar como exemplo um circuito decodificador de 2 para 4 e vamos inseri-lo como um novo projeto e compilá-lo. O circuito a ser usado bem como o seu código em VHDL encontra-se na tabela abaixo. A sintaxe e o esquema do circuito estão fora do escopo desse laboratório.

library ieee; -- use the IEEE library

use ieee.std_logic_1164.all; -- specify which package

in the library to include

entity decodificador_2_para_4 is

port

(A,B : in bit;

D0, D1, D2, D3 : out bit);

end decodificador_2_para_4;

architecture DECODER of decodificador_2_para_4 is

begin

D0 <= (not A) and (not B);

D1 <= (not A) and B;

D2 <= A and (not B);

D3 <= A and B;

end DECODER; Figura 1 - decodificador_2_para_4 e código VHDL

Inicialmente crie um novo projeto: clique no menu “File” (arquivo) e selecione "New Project Wizard”

(assistente de novo projeto). A caixa de diálogo "New Project Wizard” será aberta. Será exibida uma tela de apresentação. Clique em “next” para continuar. Nesta primeira tela você deve preencher o nome da pasta de trabalho do projeto, o nome do projeto e o nome da entidade de mais alto nível do projeto. Vamos chamar a

entidade de mais alto nível de decodificador_2_para_4. Sugere-se criar uma pasta exclusiva para cada projeto pois o Quartus II gera vários arquivos durante a compilação e simulação. Veja Figura 2.

Figura 2 - Caixa de Diálogo de novo projeto

Universidade Anhanguera-Uniderp Pró-Reitoria de Graduação Curso: Engenharia Elétrica

Disciplina: DTE217 - Dispositivos de Lógica Programável Prof Saulo Pimentel Wulhynek

Laboratório 1 – Tutorial Quartus II – Pag 2

Figura 3 - Caixa de Diálogo de novo projeto,

segunda tela

Clique em “next” (próximo). A segunda tela pergunta se desejamos adicionar um arquivo de projeto anterior. Esta ferramenta serve para aproveitar blocos ou partes de circuitos projetados anteriormente. Como não foi projetado ainda, vamos clicar em “next” para continuar, sem adicionar nenhum arquivo. A Figura 3 mostra essa tela. A terceira tela pergunta sobre o dispositivo objeto do nosso projeto, ou seja, em qual dispositivo vamos fazer funcionar o circuito que estamos projetando. Esse passo é de especial importância pois pretendemos, de fato, implementar o circuito em um FPGA. A escolha do dispositivo informa ao Quartus II as capacidades máximas do dispositivo objeto. Para nossos laboratórios escolheremos a família Cyclone II, e o dispositivo EP2C35F672C6, que se encontra no kit Altera DE2. A figura 4 mostra essa tela. Selecione “next” para continuar.

Figura 4 - Seleção da FPGA a ser usada.

Figura 5 - Integração com outras ferramentas de PLD

A ferramenta Quartus II permite a integração de outras ferramentas de PLD ao ambiente de desenvolvimento. A quarta tela pergunta sobre isso. Como não é o nosso caso, selecione “next” para continuar. Veja a Figura 5. A quinta e última tela do assistente mostra o resumo do projeto criado. Clique em “finish” para finalizar.

Figura 6 - Resumo do projeto criado

Universidade Anhanguera-Uniderp Pró-Reitoria de Graduação Curso: Engenharia Elétrica

Disciplina: DTE217 - Dispositivos de Lógica Programável Prof Saulo Pimentel Wulhynek

Laboratório 1 – Tutorial Quartus II – Pag 3

Figura 7 - caixa de diálogo “New”

Uma vez criada a área do projeto (“Project space”) nós precisamos criar os arquivos do projeto. Para isso clique em “File” -> “New” e a caixa de diálogo “New” será aberta. Selecione “VHDL file” e clique em “OK”. Isso permite inserir um arquivo com código VHDL no projeto. Veja a Figura 7. Uma vez escolhido “VHDL File” o Quartus II irá abrir um arquivo vhld1.vhd em um editor de texto para colocar o arquivo do projeto (Figura 8). Digite o código do decodificador_2_para_4 mostrado na figura 1. Depois de digitado, salve o arquivo com o mesmo nome do

projeto: decodificador_2_para_4.vhd. ATENÇÃO! O NOME DO ARQUIVO VHDL TEM QUE SER O MESMO DA ENTIDADE DE MAIS ALTO NÍVEL

Figura 8 - Edição do arquivo VHDL

Tendo digitado e salvo o arquivo com o código vhdl, é necessário “compila-lo” para poder

realizar a simulação. O compilador irá processar o arquivo decodificador_2_para_4.vhd. É possível fazer uma compilação completa ou por módulos (Análise e Síntese, Analizador de Montagem e o Analizador de temporização). Nós iremos realizar uma compilação parcial, selecionando “Start Analysis and Elaboration” para verificar se o arquivo decodificador_2_para_4.vhdl contém erros de syntax ou esquemático. Veja figuras 9 e 10.

Universidade Anhanguera-Uniderp Pró-Reitoria de Graduação Curso: Engenharia Elétrica

Disciplina: DTE217 - Dispositivos de Lógica Programável Prof Saulo Pimentel Wulhynek

Laboratório 1 – Tutorial Quartus II – Pag 4

Figura 9 - Compilação Parcial

Figura 10 - Resultado da Compilação

Universidade Anhanguera-Uniderp Pró-Reitoria de Graduação Curso: Engenharia Elétrica

Disciplina: DTE217 - Dispositivos de Lógica Programável Prof Saulo Pimentel Wulhynek

Laboratório 1 – Tutorial Quartus II – Pag 5

Após compilado o projeto com sucesso, é necessário criar um arquivo com as formas de onda das entradas do circuito para realizar as simulações. Para isso, clique em “File”-> “New” -> “Vector Waveform File”. Veja na Figura 11. Clique em “OK” para que o arquivo com as formas de onda seja criado. Agora, adicionar a este arquivo as entradas do nosso circuito decodificador. Para isso usaremos o utilitário “Node Finder”. Sele não estiver visível clique em “View” -> “Utility Windows -> “Node Finder” como mostra as Figuras 12 e 13

Figura 11 - Node Finder

Figura 12 - Criando o Vector

Waveform File

Figura 13 - Tornando o Node Finder visível

Nós vamos utilizar o Node Finder para selecionar os nós do nosso circuito. Para isso clique no botão “List” do Node Finder, usando o filtro pins:alls. Ao clicar em “list” vocÊ perceberá que todas as entradas e saídas e sinais intermediários serão relacionados pelo Node Finder. Selecione os pinos de entrada A e B (mascados como imput) e arraste-os para o arquivo Waveform. Veja a Figura 14 abaixo. A partir desse momento o Node Finder já pode ser fechado.

Universidade Anhanguera-Uniderp Pró-Reitoria de Graduação Curso: Engenharia Elétrica

Disciplina: DTE217 - Dispositivos de Lógica Programável Prof Saulo Pimentel Wulhynek

Laboratório 1 – Tutorial Quartus II – Pag 6

Figura 14 - Arrastando as entradas para o arquivo waveform

Figura 15 - Ferramenta de Edição de forma de

onda

Uma vez que os sinais de entrada foram arrastados para o arquivo “waveform”, nós usaremos a ferramenta de edição de formas de onda (“Waveform Editing Tool”), iluminada na Figura 15 ao lado, para criar as formas de onda de entrada para a simulação. Para isso, clique na ferramenta de edição de forma de onda e arraste-a para a área da onda que você deseja alterar. Ao soltar, o nível lógico da área selecionada será invertida de nível baixo para alto, ou vice versa. Veja a Figura 16.

Figura 16 - Criação da forma de onda

Crie uma combinação com todas as entradas possíveis, lembrando-se da tabela verdade (A=0 e B=0; A=0 e B=1; A=1 e B=0 e A=1 e B=1), como mostrado na Figura 17 abaixo.

Universidade Anhanguera-Uniderp Pró-Reitoria de Graduação Curso: Engenharia Elétrica

Disciplina: DTE217 - Dispositivos de Lógica Programável Prof Saulo Pimentel Wulhynek

Laboratório 1 – Tutorial Quartus II – Pag 7

Figura 17 - Forma de onda com todas as possibilidades de entrada

Após criar a forma de onda para a simulação, não se esqueça de salvar o arquivo de forma de onda.

3. Simulação Funcional

A Simulação funcional serve para verificar se a operação dos circuitos lógicos sintetizados está correta. Ela não leva em consideração o retardo de propagação das portas lógicas. O Quartus II tem como padrão a simulação temporal. Então é necessário mudar o tipo de simulação para simulação funcional. Para isso clique em “Assignment” -> “Settings” e então selecione o modo de simulação funcional. Clique em OK. Veja a Figura 18. Antes de realizar uma simulação funcional, é necessário criar uma “Netlist” para simulação funcional (Funcional Simulation Netlist) do circuito sintetizado. Para fazer isso, clique em “Processing” -> “Generate functional Simulation Netlist”. Veja as Figuras 19 e 20.

Figura 18 - Configuração da Simulação Funcional

Universidade Anhanguera-Uniderp Pró-Reitoria de Graduação Curso: Engenharia Elétrica

Disciplina: DTE217 - Dispositivos de Lógica Programável Prof Saulo Pimentel Wulhynek

Laboratório 1 – Tutorial Quartus II – Pag 8

Figura 19 - Generate Funcional Simulation Netlist

Figura 20 - Functional Simulation Netlist gerado com sucesso.

Universidade Anhanguera-Uniderp Pró-Reitoria de Graduação Curso: Engenharia Elétrica

Disciplina: DTE217 - Dispositivos de Lógica Programável Prof Saulo Pimentel Wulhynek

Laboratório 1 – Tutorial Quartus II – Pag 9

Agora, nós estamos prontos para executar a simulação funcional. A simulação usará o arquivo com as

formas de onda criado no item 1. Para iniciar a simulação, clique em “Process” -> “Start Simulation”( Veja a

Figura 21).

Figura 21 - Iniciar a simulação

Como resultado da simulação, as formas de onda das saídas serão geradas. Veja na Figura 22 abaixo que

o circuito sintetizado atua corretamente como um decodificador de 2 para 4. Perceba também que a simulação

não está levando em consideração o tempo de chaveamento das portas lógicas, entre as entradas e saídas.

Figura 22 - Formas de ondas da Simulação Funcional

Universidade Anhanguera-Uniderp Pró-Reitoria de Graduação Curso: Engenharia Elétrica

Disciplina: DTE217 - Dispositivos de Lógica Programável Prof Saulo Pimentel Wulhynek

Laboratório 1 – Tutorial Quartus II – Pag 10

4. Simulação Temporal Após a verificação da correção lógica do arquivo de projeto, é necessário determinar se o circuito

sintetizado atende as restrições do retardo de propagação. A Simulação temporal consegue verificar tanto a

correção lógica quanto a temporização. Ela permite calcular o retardo de propagação de diversos caminhos do

circuito sintetizado.

Para realizar a Simulação Temporal é necessário mudar novamente o tipo de simulação de funcional

para Simulação Temporal. Para isso clique em “Assignment” -> “Settings” e então selecione o modo de

simulação Temporal, como foi mostrado na Figura 18. Agora execute a simulação temporal selecionando

“Processing” -> “Start Compilation and Simulation”. Depois da compilação e da simulação, a forma de onda de

saída mostrada na Figura 23, apresenta a análise temporal da simulação do circuito sintetizado.

Figura 23 - Saída da simulação temporal

A Figura 23 acima mostra o tempo de retardo entra as várias entradas e saídas do circuito sintetizado.

Na figura 24 abaixo, esses tempos podem ser verificados e a Figura 25 mostra o pior caso, ou seja, o maior

tempo de propagação entre as entradas e saídas, apontando o pior caminho como sendo entre a entrada A e a

saída D2. PERGUNTA: Qual a maior freqüência em que esse circuito pode funcionar?

Figura 24 - Tempos de propagação

Figura 25 - Pior caso

5. Designação dos Pinos Durante a compilação acima, o Quartus II ficou livre para atribuir quaisquer pinos da FPGA às entradas e saídas do circuito. Contudo, para utilizar o kit DE2 da Altera, possui chaves, leds e outros dispositivos conectados a FPGA de forma fixa. Assim, para carregar esse programa no Kit teremos que atribuir entradas e saídas a dispositivos já existentes na placa. Para o nosso exemplo usaremos as chaves SW0 e SW1 como as entradas a e b. Elas estão conectadas aos pinos N25 e N26. Como saída usaremos os leds verdes de LEDG0 a LEDG3, que estão conectados aos pinos AE22, AF22, W19 e V18 respectivamente. Para fazer essa attribuição de

Universidade Anhanguera-Uniderp Pró-Reitoria de Graduação Curso: Engenharia Elétrica

Disciplina: DTE217 - Dispositivos de Lógica Programável Prof Saulo Pimentel Wulhynek

Laboratório 1 – Tutorial Quartus II – Pag 11

pinos usamos o editor de atribuições (Pin Assignments Edit) selecionando em Assignments > Pins. O editor será

aberto como mostra na figura 25.

Figura 25 - Pin Assignment Editor

Note que na parte inferior da janela são mostradas as entradas e saídas da compilação. Clique na "Location" e digite N25 para a linha do A. Você perceberá que o nome correto do pino (PIN_N25) é associado automaticamente como na Figura 26. Digite Enter para completar a operação.

Figura 26 - Associação do pino N25

Universidade Anhanguera-Uniderp Pró-Reitoria de Graduação Curso: Engenharia Elétrica

Disciplina: DTE217 - Dispositivos de Lógica Programável Prof Saulo Pimentel Wulhynek

Laboratório 1 – Tutorial Quartus II – Pag 12

Figura 27 - Associação dos pinos

Repita a operação para os demais pinos de entrada e de saídas. Verifique o resultado na Figura 27. Ao final, feche a janela do editor e compile novamente. Sempre que um alteração for feita na associação de pinos, o código deve ser recompilado.

Você pode salvar essa associação criada usando File > Export, para que, cada vez que você for mexer no seu projeto, não seja necessário refazê-la. No caso do kit DE2, o fabricante fornece um arquivo chamado DE2_pin_assignments.csv com a associação dos pinos aos hardwares montados na placa. Para importá-lo use a opção Assignments > Import Assignments.

6. Carregando o programa no kit Para carregar o programa no kit, ele deve estar alimentado, com o cabo USB conectado na porta "blaster" e a chave RUN/PROG deve estar na posição RUN. Esse tipo de programador chama-se JTAG. Clique na opção Tools > Programmer para abrir a janela da figura 28

Figura 28 - Janela de Gravação

Figura 29 - Escolha do programador

Note que aparece um arquivo com nome de lab1.sof que é oarquivo que será carregado no FPGA. A opção Program/Configure deve estar marcada. Falta, porém, indicar o tipo de hardware de gravação que será utilizado. Para isso clique em Hardware Setup. A janela Hardware Setup será

aberta. Escolha o hardware USB_Blaster e clique em close. Atenção! Esse hardware só aparecerá se o programador estiver conectado na porta USB.

Agora pressione START na janela da figura 28 e aguarde a barra de progresso chegar a 100%. Teste o seu circuto usando as chave SW0 e SW1 e confira com a tabela verdade do circuito.

7. Hora do Ponto Agora é sua vez. Faça um programa que acione os LEDG0 a LEDG17 com as chaves de SW0 a SW17. Faça funcionar e chame o professor para ganhar o ponto do laboratório.