Oi
pessoal,
Nesse
primeiro tutorial de VHDL para FPGA estaremos ligando os LEDs (light emitting diode) a partir das
nossas chaves embutidas na placa. O conjunto de ferramentas utilizadas nesse
projeto:
-
Altera DE0
Board;
-
Quartus II
(versao 13.1);
-
Windows 8;
Acredito
que você não enfretará nenhum problema caso esteja utilizando outra placa. O
procedimento é basicamente o mesmo, embora as especificações do seu projeto
(modelo do chip, modelo da EEPROM,
localização dos pinos) serão diferentes.
Para
iniciar, se este é o seu primeiro contato com a placa, você deve instalar os drivers USB-BLASTER para que a placa
seja reconhecida pelo sistema operacional, para isso, no gerenciador de
dispositivos do seu PC (pressione a tecla do windows + pause/break simultaneamente e clique em gerenciador de
dispositivos) procure pelo USB-BLASTER e
instale os drivers (são encontrados na pasta do Quartus II X:\Altera\13\quartus\drivers\usb-blaster).
Figura 1: O driver foi instalado com sucesso.
Nota: Qualquer maior dificuldade, o manual do usuário deve
ser consultado.
Ok, agora
que sua placa já é reconhecida é hora de começar o projeto. Abra o Quartus II…
Figura
2: Tela inicial do Quartus II.
Clique em New Project Wizard…
Nesse
momento você irá passar por uma série de janelas as quais definirão as características
da sua placa e do seu projeto. Leia a primeira tela e clique em next.
Figura 3: new project wizard.
Na segunda janela, escolha a pasta aonde você irá salvar seu projeto e nos outros dois campos escreva o nome do seu projeto, no
caso “chaves”.
Dica: Não escolha nomes e diretórios com espaços vazio (“ “) nos
seus projetos. Às vezes acontecem erros de compilação por causa disso... recomendo sempre utilizar caminhos curtos e sem espaços.
Figura 4: definindo a
pasta e o nome do seu projeto.
Clique em next,
nessa janela o programa pergunta se
você já tem algum arquivo pronto e quer adicionar ao projeto, no nosso caso não
temos nenhum, então pulamos essa janela, next.
Figura 5: adicionar
arquivos ao projeto.
Nesse momento definimos a família do nosso FPGA. Para a DE0 Board escolhemos a
família Cyclone III e em devices selecionamos
EP3C16F484C6.
Nota: Caso esteja
utilizando uma placa diferente as especificações nessa etapa serão diferentes.
Observe qual a família e o chip da sua placa. Por exemplo, se estiver
utilizando a placa DE2 você deve escolher a família Cyclone II e EP2C35F672C6.
Figura 6:
Especificação da família.
Clicando em next,
o programa pergunta se estaremos utilizando alguma ferramenta extra para
utilização no projeto, como ferramentas CAD (EDA e CAD são basicamente
sinônimos).
Figura 7: Escolha de
ferramentas EDA.
A última tela exibe um relatório com todas as configurações
que você escolher, revise e clique em finish.
Depois de instalar os drivers e configurar o seu projeto, eh hora de programar. Clique em File >
New escolha a opção VHDL. Um editor de texto vai aparecer dentro da janela
do Quartus II. Agora clique em Project
> Add current file to project, com isso seu arquivo VHDL é adicionado ao
seu projeto.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY chaves IS
PORT (
LEDS
:OUT STD_LOGIC_VECTOR (9 downto 0);
SWITCHES
:IN STD_LOGIC_VECTOR (9 downto 0)
);
END chaves;
ARCHITECTURE arc_chaves OF chaves IS
BEGIN
LEDS
<= SWITCHES;
END arc_chaves;
Pronto, agora que o código ficou pronto, só nos resta
entendê-lo.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
Esse trecho do código chama o pacote ieee que é padrão para o VHDL. Dentro dele estao contidos vários outros arquivos que
definem estruturas no nosso código, no exemplo de hoje chamamos apenas a
std_logic_1164 que define sinais do tipo STD_ULOGIC, STD_ULOGIC_VECTOR e o resolved ulogic: STD_LOGIC e
STD_LOGIC_VECTOR.
Figura 8: Código VHDL.
ENTITY chaves IS
PORT (
LEDS
:OUT STD_LOGIC_VECTOR (9 downto 0);
SWITCHES
:IN STD_LOGIC_VECTOR (9 downto 0)
);
END chaves;
Nesse momento, criamos a entidade chaves que contem dois STD_LOGIC_VECTOR que chamamos de LEDS e
SWITCHES, o primeiro sendo uma saida e o segundo uma entrada. E/S são definidas
dentro de PORT, observe que a última linha antes de ‘);’ não contem ‘;’
ARCHITECTURE __chaves OF chaves IS
BEGIN
LEDS
<= SWITCHES;
END __chaves;
Finalizando, criamos um architecture. Ele é usado para descrever o comportamento, fluxo de dados e estrutura de uma entity. No exemplo, ele é utilizado para associar os valores de 'SWITCHES' nos 'LEDS'. Note que o sinal de atribuição não é o sinal de igualdade, e sim a seta '<='.
Para compilar
nosso código clique no botão play
roxo ou vá em Processing > Start
compilation. Aguarde seu programa ser compilado, ao fim, o quartus irá exibir um relatório que pode ser acessado através do atalho ctrl + r.
Figura 9: Relatório de compilaçao.
Se seu
programa não foi compilado com sucesso, revise as configurações do seu projeto
(Assignment > Devices) e seu
código. Agora, com tudo funcionando, vamos associar os pinos do seu FPGA com as entradas e saidas do nosso
programa. Para isso, clique em Assignment
> Pin Planner, uma nova tela abrirá. Nessa tela, com auxilio do seu
manual de usuário você irá associar os pinos da sua placa com as variáveis de
entrada e saida criadas. Por exemplo, para a variável SWITCHES[0], em location digite J6 e o pino PIN_J6 será marcado.
Nota: PIN_J6 é associado ao
SWITCH_0 da placa DE0. Consulte o manual de usuário caso possua outra placa.
Figura 11: Pin Planner.
Após associar
todos os pinos, compile seu programa novamente.
Para testar
seu programa na placa, ligue ela apertando no botao vermelho e com a chave no
modo RUN. Clique em Programmer > Tools em Hardware Setup selecione USB-BLASTER e
em mode selecione JTAG. Selecione o seu arquivo chaves.sof e clique em Start. Imediatamente o programa é
transferido para sua placa e já pode ser testado.
Figura
12: gravacao da placa utilizando JTAG.
Agora é só usar as chaves para ligar os leds e voalà.
Figura 13: Resultado final.
Em breve estarei postando e ensinando a vocês como gravar o seu programa utilizando o active serial programming para que seu programa seja aberto mesmo quando a placa é desligada.
É isso ai, até a próxima.
Muito obrigado! Era justamente uma página assim que eu estava procurando!
ResponderExcluir