Com este post vou introduzir a ferramenta Quartus II da Altera para vocês e mostrar um pouco do que ela pode fazer.
Para começar você pode fazer o download do Quartus II direto do site da Altera em http://www.altera.com/ na seção de downloads (é necessário criar uma conta), a versão paga tem 30 dias de uso liberado mas recomendo baixar a versão grátis (Web Edition) que vem com tudo que é necessário para desenvolver projetos em FPGA, também é necessário realizar o download de um pacote de devices, dê uma olhada em qual kit você tem a disposição e qual FPGA ele possui, caso não possua kit algum escolha o Cyclone pois é a FPGA de entrada e provavelmente você vai encontrar uma Cyclone no seu primeiro kit.
Neste tutorial vou utilizar a versão Web Edition 13.0 (mais recente no momento do post) em um Windows 7 64 bits mas a interface é a mesma para Windows e Linux. Também vou utilizar o kit BeMicroSDK (falei sobre ele aqui) mas não é necessário ter o Kit para realizar as atividades.
Configurando o projeto no Quartus II
Figura 1. Setup do Quartus II |
Após realizar terminar a instalação inicie o Quartus II e você vai se deparar com uma tela igual a da Figura 2
Figura 2. Tela inicial do Quartus II |
Clique em File -> New Quartus II Project para inicializar o wizard de novo projeto conforme Figura 3. É necessário fornecer o nome do projeto e o nome do top do projeto.
Fazendo uma analogia grosseira o top é o "equivalente" ao "main" em C. Quando um projeto é sintetizado ele começa pelo topo da hierarquia (top) e os outros módulos vão sendo sintetizados conforme instanciados. Chamei tanto o top quanto o projeto de pisca_led, é importante não haver espaços no caminho de diretórios do seu projeto. Depois clique em next duas vezes pois não serão inseridos arquivos no projeto.
Figura 3. Configurando o nome do projeto |
Figura 4. Escolhendo o FPGA do projeto |
Desenvolvendo o VHDL
Como o ser humano não consegue enxergar um LED piscando muito rápido vamos realizar um atraso de um segundo na troca de estado do LED. Meu clock é de 50mhz, ou seja, ele pulsa 50 milhões de vezes por segundo. Fazendo uma matemática básica concluímos que é necessário que o LED troque de estado a cada 50 milhões de pulsos de clock. Para isso é criado um registrador do tipo Natural que vai de 0 a 50m, a própria ferramenta aloca a quantidade de bits necessária para este registrador conseguir representar este intervalo de valores.
O funcionamento do circuito é bem simples, ele possui um reset assíncrono que quando em 0 coloca nosso contador em 0 e o registrador do LED também, quando em 1 a cada pulso de clock nosso contador é incrementado. Quando este contador chega em 50m o registrador do led inverte o valor e o contador é zerado. Ainda estou devendo um post introdutório de VHDL mas espero que dê para entender este exemplo.
library ieee; use ieee.std_logic_1164.all; entity pisca_led is port ( sys_clk_50mhz : in std_logic; sys_rst : in std_logic; led : out std_logic ); end entity pisca_led; architecture rtl of pisca_led is signal led_delay : NATURAL range 0 to 50000000; signal led_reg : std_logic; begin led <= led_reg;
-- Atribui a porta de saída chamada led o valor do registrador
process(sys_clk_50mhz, sys_rst)
-- Executado a cada pulso de clock ou reset
begin if sys_rst = '0' then
-- Reset assíncrono, independe do clock
led_delay <= 0; led_reg <= '0'; elsif rising_edge(sys_clk_50mhz) then led_delay <= led_delay + 1; if led_delay = 50000000 then led_delay <= 0; led_reg <= not led_reg;
-- Inverte o valor do registrador do led
end if; end if; end process; end architecture rtl;
Conforme a Figura 5 podemos ver na lista de warnings do console que precisamos informar onde estão conectados as duas entradas e a saída do nosso FPGA. Para resolver isto vamos utilizar a ferramenta Pin Planner do Quartus II, está ferramenta serve para conectar as portas de entrada e saída do seu top aos pinos físicos do FPGA. Clique no ícone do Pin Planner conforme Figura 6.
Figura 5. Mensagens de warning |
Figura 6. Abrindo o Pin Planner |
Consultando a documentação da BeMicro SDK existe um clock de 50mhz conectado ao pino E1 da FPGA, um botão que será nosso reset no pino C2 e um LED no pino N15, vamos informar isto ao Quartus, para isto preencha os campos da Figura 7 de forma que fique igual a Figura 8.
Figura 8. Pinos configurados |
Figura 7. Tela inicial do Pin Planner |
Feche a janela e compile novamente o projeto, com isto os warnings referentes aos pinos não conectados sumirão. Teoricamente ainda seria necessário configurar a entrada de clock como clock em um arquivo .sdc e utilizar a ferramenta Timequest do Quartus mas não é faremos isto neste exemplo.
Agora vamos configurar o FPGA. Para isto utilizaremos o Programmer, primeiro conecte seu kit ao computador e depois clique no ícone da Figura 10. Na Figura 11 basta clicar em start e pronto! Seu kit está rodando o seu design e o primeiro LED irá piscar de um em um segundo, a não ser quando for segurado o botão User que é o reset.
Figura 11. Programmer |
Figura 10. Ícone do Programmer |
Na Figura 12 o resultado desta experiência.
Figura 12. Led piscando de um em um segundo na BeMicro SDK:) |
Abraços!
Nenhum comentário:
Postar um comentário