Gerador de código VHDL

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/

 

  • http://oprofessorleandro.wordpress.com 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.