Archive for category VHDL

Compilando o SystemC no VS2010 Express

SystemC

Tentei algum tempo fugir do VHDL e usar algo supostamente de nível mais alto chamado SystemC. O SystemC é uma linguagem construída sobre o C++ e usada para projeto, verificação e modelagem de sistemas. Em especial, eu gostei bastante da parte de verificação, apesar de não ter encontrado boas ferramentas open source para sintetizar o meu código em SystemC em algo realizável em hardware, como VHDL. Achei apenas promessas pouco funcionais, como o sc2v (funcionou em casos bem simples comigo, bastante limitado). Existem algumas ferramentas profissionais e caras que podem fazer isto pra você, no entanto.

Mas não se enganem, não existe mágica. É preciso saber o que se está programando em SystemC, por mais que existam abstrações maiores, como filas, barramentos, etc. Por exemplo, se quer algo dependente de clock (algum circuito sequencial), precisará fazer isto em SystemC explicitamente. Se quer algo combinacional, idem. Em VHDL, temos os mesmos problemas, apesar de a linguagem ser menos agradável do que a sintaxe do SystemC (no fundo, C++).

Leia o resto deste post »

, , ,

3 Comentários

Máquinas de estados e síntese de circuitos com VHDL

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.

Leia o resto deste post »

6 Comentários

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 499 outros seguidores