Após alguns dias trabalhando em um projeto com VHDL resolvi escrever alguma coisa a respeito. Afinal, estou meio afastado do Linux embedded (por enquanto !). Em especial, este post é sobre máquinas de estados e síntese de circuitos com VHDL.
Existem diversas formas, boas ou não, de se definir uma máquina de estado. O livro HDL Chip Design, de Douglas Smith, comenta várias configurações e a síntese obtida após a compilação, sendo uma boa referência para evitar designs ruins. Outra referência que pode impedir erros básicos é o artigo The Ten Commandments of Excellent Design, de Peter Chambers. Ele cita alguns problemas comuns na hora do design que podem gerar circuitos instáveis na presença de ruídos ou em frequências mais altas.
Eu resolvi resumir uma pequena máquina de estado e comentar alguns cuidados. Apesar de existir material de VHDL na internet, a visão crítica do código e da síntese é geralmente omitida. Esta visão geralmente vem com o tempo (e com vários designs com problema).
O código em VHDL está ao final do texto. Basicamente ele contrói um pequeno componente chamado Demo, com duas entradas e duas saídas, além de linhas de clock e reset. O circuito não faz nada interessante, foi feito apenas para demonstração da síntese. Neste design, vários aspectos citados pelo Peter Chambers foram abordados explicitamente:
- All state machine outputs shall always be registered
- Thou shall use registers, never latches
- Thy state machine inputs, including resets, shall be synchronous (all input signals shall be registered)
- Have no dead states in thy state machines
- Have no logic with unbroken asynchronous feedback lest the fleas of myriad Test Engineers infest thee
- All decode logic must be crafted carefully – eschew asynchronicity
O circuito sintetizado está abaixo, com comentários logo a seguir.

(Mais…)
Franz 11:35 am em Junho 28, 2008 Link Permanente
Vai demorar um pouco para o 3G ser o que a propagando diz que é. No esquema que a Claro está agindo então…
PCIs, estamos engatinhando aqui na roça (ofendeu…)???
Marcelo Barros de Almeida 8:48 pm em Junho 28, 2008 Link Permanente
Eu acho que estamos num rumo muito bom, com excelentes guidelines e práticas. Mas isso tudo, abaixo dos 50MHz, onde cuidado é bom mas influencia pouco. Agora, vencendo a barreira dos 100MHz, começa uma nova fase. O negócio agora é calcular mesmo, medindo campos e impedâncias, especificando detalhadamente os PCBs.
acassis 7:58 pm em Junho 29, 2008 Link Permanente
Marcelo, afinal você irá projetar placas também? Não entendi a importância da palestra para você, rs.
A propósito, onde está escrito gcc creio que vc queria usar vcc. O que prova mais uma vez que vc está mais pra software que pra hardware,
[]s
marcelo barros almeida 9:34 pm em Junho 29, 2008 Link Permanente
eu não faço layout diretamente mas projeto partes eletrônicas e preciso orientar o layout. Em alta frequência você precisa calcular várias coisas, ainda mais se tiver impedância controlada. Uma ddr2 é caso típico. Mas o gcc me entregou mesmo!