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! 

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

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

Hardware » Sistemas Digitais » Hello World no FPGA: Piscando um LED!
Comentários:
Notificações
Notificar
guest
6 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Daniel
Daniel
29/05/2020 22:19

Obrigado pelo post, acabei de usá-lo para fazer o hello world com minha primeira placa fpga 🙂

Jose Caetano De Souza Neto
Khelen Diogo Neto
09/11/2013 12:48

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
Reply to  Khelen Diogo Neto
09/11/2013 13:06

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://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
Khelen Diogo Neto
Reply to  André Castelan
09/11/2013 16:31

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

André Castelan
Reply to  Khelen Diogo Neto
09/11/2013 13:09

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

Matheus Quick
Matheus Quick
13/03/2017 00:58

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

Talvez você goste:

Séries

Menu

WEBINAR
 
Porque o RTOS não faz o que eu quero?

Data: 28/10 às 19:30h - Apoio: Mouser Electronics
 
INSCREVA-SE AGORA »



 
close-link