Gerador de código VHDL

código

Como é sabido, VHDL é uma linguagem extremamente "tipada", o que faz com que seja necessário escrever muito para dizer pouco.

 

Quase todos, cerca de 90% de meus designs em VHDL seguem um padrão: eles possuem uma máquina de estados, dois processes, sendo um para a parte combinacional e outra para a parte sequencial do design, bibliotecas básicas de aritmética (numeric.std) e lógica (1164), a parte combinacional recebendo a sequencial, etc. Esse estilo de codificação segue muito o que Pong. P Chu propõe em seu livro RTL Hardware Design using VHDL. E quando algo é padrão, nada melhor do que fazer um script para diminuir a parte burocrática de escrever um novo módulo em VHDL e ir direto ao que interessa.

 

Para ficar simples, me limitei a geração automática da interface da entidade (sinais de entrada/saída), maquina de estados, processo combinacional e sequencial e registradores a partir de um arquivo .txt.

 

Pensei em automatizar muita coisa mas a complexidade tanto do .txt responsável por gerar o VHDL quanto a do software em Python iria aumentar muito e não ficaria mais algo simples de se utilizar, perderia o "charme".

 

Funcionamento

 

A sintaxe do arquivo .txt é bem simplificada, a primeira linha é o nome da entidade, a segunda o clock e a terceira o reset. As demais linhas são sinais de entrada ou saída da entidade até chegar no "#" após o símbolo "#" as linhas viram sinais dentro do design.

Da segunda linha em diante o último parâmetro (após o -) é o número de bits.

 

Para rodar o script basta executar o arquivo vhdl_gen.py e passar o caminho para o arquivo .txt como parâmetro.

 

Exemplo

 

A partir deste arquivo blink_led.txt de 8 linhas:

 

 

 

É gerado este arquivo .vhd de 74 linhas:

 

 

 

Conclusões

 

Em um livro que li devido a muitas recomendações (The Pragmatic Programmer) há capítulos dedicados a geradores de códigos e aos benefícios proporcionados ao utilizar um gerador de código, alguns deles:

  • Expressar a mesma informação somente uma vez (DRY do not repeat yourself);

  • Menor tempo de desenvolvimento pois não é necessário escrever tanto;

  • Menos sucessível a erros de sintaxe;

  • Padronização no código fonte de um projeto e etc.

 

Recomendo este livro, apesar de não ser direcionado a desenvolvedores de hardware ele possui uma linguagem muito boa e dicas gerais de desenvolvimento que também podem ser aproveitadas para o desenvolvimento de sistemas de hardware.

 

Agradeço ao Fabio, Vinicius e o Vitor pelas contribuições no projeto, que o deixaram muito melhor.

 

E por último fica aqui o link para o gerador de VHDL feito em Python. Funciona em Windows e Linux, fiquem a vontade para usar, "forkar" e dar feedback. Recomendo ler o README com atenção.

 

https://github.com/andrecp/vhdl_gen/

 

Deixe um comentário

4 Comentários em "Gerador de código VHDL"

Notificar
avatar
 
Ordenar por:   recentes | antigos | mais votados
Leandro Poloni Dantas
Membro
Leandro Poloni Dantas

Parabéns pelo artigo André.
Eu estou usando VHDL na minha pós e é realmente muito chato fazer todas essas definições.
VHDL é uma linguagem muito traiçoeira, principalmente usando lógica sequencial e misturamos sinais com variáveis.

Sandro Dutra
Membro
Sandro Dutra

Infelizmente ainda não conheço o suficiente de FPGA/CPLD/VHDL para poder ajudar nesse gerador de código, ainda estou dependendo da chegada de um MOJO V3 que comprei pela Sparkfun e de um devkit de CPLD MAX II que comprei pela DX para poder iniciar meus estudos (Infelizmento não tem FPGA 101 no labdegaragem e não tem previsão de chegada, por isso tive que agilizar por outros meios), por enquanto, estou restrito a microcontroladores, pois só conheci essa área de hardware a pouco tempo, mas a observo com largo interesse.

Mas assim que ganhar alguma experiência com FPGA/CPLD dou uma olhada melhor no teu código, pelo que vi, é possível melhorar alguns pontos dele, por enquanto vou colocar como favorito.

André Castelan
Visitante
André Castelan

Bacana Sandro! Bom aprendizado para você. Será um prazer ter mais contribuições no código, espero contribuir com seu aprendizado nos meus artigos.

abs

Sandro Dutra
Membro
Sandro Dutra

Sim, sempre acompanho as postagens sobre essa área no embarcados, apesar de não entender muito bem, mas espero que esse quadro mude, pois eu sou de estudar mesmo quando estou com o material em mãos, infelizmente a receita e correios tem que ter paciência... 🙂

wpDiscuz