Hello World no FPGA: Piscando um LED!

Hello World no FPGA

Com este post vou introduzir a ferramenta Quartus II da Altera para vocês e mostrar um pouco do que ela pode fazer. É possível fazer todo o tutorial com ferramentas gratuitas.

 

O artigo foi escrito tendo como base o kit BeMicroSDK mas não é necessário ter o Kit para realizar as atividades. Quem quiser comprar o kit direto da arrow é só clicar neste link

 

Para começar você pode fazer o download do Quartus II direto do site da Altera 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. 

 

 

Configurando o projeto no Quartus II

 

Após realizar o download do Quartus II de dois cliques no setup e na tela da Figura 1 selecione: Quartus II, device (no caso Cyclone) e Modelsim Starter edition. O Modelsim é um simulador de HDL muito utilizado, falarei mais sobre ele em outra ocasião.

Figura 1. Instalação Quartus II
Figura 1. Instalação 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
Figura 2. Tela inicial 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, o top do projeto é o arquivo .vhd com o maior nível de hierarquia, é a partir dele que o FPGA se conecta com o mundo externo (pinos de I/O) e a partir dele que são instanciados os outros arquivos .vhd.

Figura 3
Figura 3. Configurando o 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.

 

Na tela seguinte é necessário escolher o FPGA em que o projeto será sintetizado, no caso da BeMicroSDK é um EP4CE22F17C7 (Figura 4) caso você não possua um kit pode escolher qualquer FPGA.

Figura 4
Figura 4. Escolhendo o FPGA

 

Com o projeto criado é necessário criar o nosso arquivo top que deve se chamar pisca_led.vhd, para isto vá em File->New->VHDL File. Escreva qualquer coisa no arquivo e salve-o como pisca_led.vhd para que ele seja o topo de hierarquia.

 

 

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 50 milhões, 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.

 

 

 

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
Figura 5. Warnings

 

Figura 6
Figura 6. 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 7
Figura 7. Pin Planner inicial

 

Figura 8
Figura 8. Pin Planner configurado

 

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 9. Na Figura 10 basta clicar em start e pronto! Seu kit está rodando o seu design e o primeiro LED irá piscar a cada segundo, a não ser quando for segurado o botão User que é o reset.

 

Figura 9
Figura 9. Quartus Programmer

 

Figur 1-0
Figura 10. FPGA Programado com sucesso

 

Na Figura 11 o resultado desta experiência.

Figura 11
Figura 11. Resultado

 

 

Toda dúvida é bem vinda, fiquem a vontade para comentar.

 

Abraços! 

 

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

5
Deixe um comentário

avatar
 
2 Comment threads
3 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
André CastelanJose Caetano De Souza NetoMatheus Quick Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Matheus Quick
Visitante
Matheus Quick

FPGA é bom d+, um pouco + caro que os microcontroladores.

Jose Caetano De Souza Neto
Visitante
Khelen Diogo Neto

Qual a vantagem de se utilizar fpga em comparação os pic por exemplo? Não estou sendo irônico é que gostaria de saber se algum dia deveria mudar....

André Castelan
Visitante

Khelen são propósitos completamente diferentes hehe, um FPGA é muito mais potente do que um PIC e você desenvolve hardware com ele, você não faz um programa que roda em um FPGA, você faz um hardware que executa seu algoritmo.

Como nós vimos aqui http://www.embarcados.com.br/fpgadualcores/ um FPGA consegue mais througput do que muitos processadores i3/i7.

Existem FPGAs bem baratos que concorrem em preços com um PIC mas sinceramente se você consegue executar o que você quer com um PIC não há necessidade de se utilizar FPGA, FGPAs normalmente são utilizados para aplicações de alto valor agregado e muito poder computacional.

Jose Caetano De Souza Neto
Visitante
Khelen Diogo Neto

Legal! Bom saber! Mesmo que eu nunca trabalhe com fpga quero fazer pesquisas sobre, interessante.

André Castelan
Visitante

Khelen aqui tem um post que fiz no meu antigo blog pessoal sobre FPGAs com preço semelhantes a microcontroladores mas mantenho a minha posição, são aplicações distintas.

http://www.andrecastelan.com.br/2013/09/fpgas-substituindo-microcontroladores.html