VERILOG vs VHDL – Precisamos falar sobre esse assunto

VERILOG vs VHDL

“Ainda que eu andasse pelo vale da sombra da morte, não temeria mal algum…” Salmos 23:4

Prezados leitores, começo esse post com um Salmo. Pode parecer estranho, mas justifico essa abordagem porque pretendo tratar de um assunto delicado e suscetível a críticas pesadas. NÃO TEMEREI – Verilog e VHDL – Qual a diferença entre essas duas linguagens de descrição de hardware? Quais as vantagens e desvantagens entre as duas linguagens? 

Vou direto no ponto. Estarei me guiando pelo artigo [1], em leituras adicionais de sites e livros que possuo. Não estarei analisando as especificações em si, nem as variações (VHDL 2008, VERILOG 2005, e outros) – portanto, alguns detalhes das especificações podem variar. Caso você tenha alguma dúvida mais específica sobre essas linguagens, pesquise no Embarcados ou em outros sites os seguintes tópicos: FPGA, Descrição de Hardware, Verilog, VHDL. Existem diversos posts que detalham bem cada assunto. O aprendizado será grande.

Capacidade de Modelagem HDL

Tendo em vista que ambas linguagens têm a capacidade de descrever hardware, podemos analisar então como cada uma permite essa descrição – ou seja, quais os níveis de abstrações que cada linguagem melhor se adapta (aqui cabe uma ressalva – essas linguagens evoluem, portanto podem variar conforme novas especificações são feitas). A Figura 1 concatena alguns detalhes desta capacidade de modelagem.

VERILOG vs VHDL - Comparação entre Verilog e VHDL.
Figura 1 – Comparação entre Verilog vs VHDL – Adaptado de [1].

É importante identificar e entender os cinco níveis de abstração mostrados acima – sistema, algoritmo, nível de transferência de registro (RTL), lógico e nível de porta.

Níveis de Sistema e Algoritmos não são sintetizáveis, ou seja, consistem em um grupo de instruções ou mesmo uma sequência que deve ser seguida e não possuem restrições de tempo (atrasos, clock). Já o nível RTL e Lógico consistem na entrada para a síntese, variando entre si, conforme o nível de detalhamento dos atrasos entre as lógicas. Por fim, o nível de porta consiste na saída final da síntese, ou seja, aqui já temos uma rede de portas lógicas e registradores sintetizados para uma determinada tecnologia. Em resumo, podemos entender que a grande diferença entre esses níveis de abstração está em termos de detalhamento de timing de cada nível.

Modelagem Low-Level (Baixo Nível)

As duas linguagens permitem modelagem em nível de portas lógicas, contudo VERILOG é mais indicada que VHDL para uma descrição Low-Level (observer a Figura 1). Justifico essa afirmação tendo em vista que a origem do VERILOG foi primordialmente para modelar e simular portas lógicas. VERILOG possui primitivas nativas ou portas lógicas, nas quais um desenvolvedor pode instanciar sem maiores traumas, quando comparada com VHDL. A dica para modelar Low-Level em VHDL é utilizar os operadores lógicos NOT, AND, NAND, OR, NOR, XOR, XNOR. Abaixo é possível comparar essas primitivas e seus equivalentes em VHDL e VERILOG.

Abaixo seguem mais algumas primitivas nativas em VERILOG bem interessantes. Neste site é possível obter mais detalhes sobre essas primitivas.

VERILOG possui suporte a duas dúzias de primitivas para modelagem de lógica estrutural. Adicionalmente a essas primitivas, o VERILOG possui suporte a primitivas definidas por usuários, UDP (User-Defined Primitives). UDPs são muito úteis e populares entre projetistas de ASICs. Neste site existem alguns exemplos de como começar uma biblioteca UDP em VERILOG.

Neste sentido, se o projeto final implica em um ASIC, e se você for um projetista de ASIC – use VERILOG.

Modelagem High-Level (Alto Nível)

Aqui pulamos para um outro ponto de vista. VHDL é muito melhor para descrever hardware em alto-nível, observe a figura 1.

VHDL possibilita a criação de tipo de dados definidos pelo usuário.

Pacotes (package) para reuso em projetos. Subprogramas e tipos de dados reutilizados podem ser declarados em um pacote VHDL e reutilizados em outras entidades e arquiteturas. VERILOG possui o equivalente através da diretiva de compilação include ” “.

Declaração de configuração em VHDL permite que um projeto em VHDL possua muitas entidades de projetos com arquiteturas diferentes. Esse recurso é muito útil para os projetistas que utilizam VHDL e precisam gerenciar um projeto de alto nível, cujas características podem variar.

Gerenciamento de Bibliotecas. Essas bibliotecas VHDL possuem arquiteturas, entidades, pacotes e configurações já compiladas. Esse recurso é muito útil no gerenciamento de grandes estruturas de projeto.

Tão quanto o fluxo de projeto não requeira uma modelagem em baixo-nível, é preferível o uso de VHDL. Ou seja, se você for um projetista de sistemas em FPGA, use VHDL.

Verbosidade entre VHDL e VERILOG

VHDL é fortemente tipada, ou seja, você tem que descrever a sua lógica de acordo com o tipo de dados definidos na estrutura inicial do seu código. Caso você misture tipos de dados, o compilador irá acusar erro. Isso não ocorre em VERILOG – portanto muito cuidado e atenção na codificação em VERILOG.

Outro aspecto que traduz em um VHDL mais “verboso” é o fato de o VHDL possuir muitos tipos de dados complexos, e, além disso, temos que considerar que o usuário pode usar outros tantos tipos de dados. Observe a diferença entre os códigos abaixo.

Acima fica bem claro que uma descrição em VERILOG é mais simples que uma descrição em VHDL.

Outras Diferenças

Pontualmente, ainda podemos listar que:

  • VERILOG é muito parecido com a linguagem C, enquanto VHDL é muito próximo a ADA e ao PASCAL;
  • VERILOG é case-sensitive, o que não ocorre com VHDL;
  • Em VERILOG para usar um componente em um módulo basta fazer uma instância e fazer correto “port_map”. Em VHDL, para instanciar um componente é necessário declarar as bibliotecas, os pacotes, a entidade, seguido da arquitetura, para finalmente realizar o port-map dos sinais;
  • VERILOG possui diversas diretivas de compilação como “timescale”, “ifdef”, “else”, “include”. Diretivas de compilação não foram permitidas em VHDL até a especificação VHDL2008. Aqui vale uma observação lembrada pelo engenheiro  Ricardo Fialho – “…sempre foi possível colocar código dentro de uma architecture usando procedure e functions…mas só servem para alguns casos…”. Valeu Tafas. A lógica abaixo  é um bom exemplo de função que implementa a lógica OR bit-a-bit (unária) em VHDL.

Uso no Mundo – desenvolvimento de ASIC e IC

Segundo a pesquisa realizada em 2016 pelo Wilson Research Group Functional Verification Study, a linguagem de descrição de hardware mais utilizada para o desenvolvimento de ASIC e IC é VERILOG. Observe a Figura 2.

Linguagens RTL e sua utilização.
Figura 2 – Linguagens RTL e sua utilização [2].

Já linguagem de VERIFICAÇÃO mais utilizadapara no desenvolvimento de ASIC e IC consiste no SystemVerilog, seguido de VERILOG (Figura 3).

Linguagens RTL e sua utilização.
Figura 3 – Linguagens RTL e sua utilização [2].

Vale ressaltar que SystemVerilog foi concebida para suprir a demanda da linguagem VERILOG com relação à modelagem de alto nível. Permitindo recursos e construções de alto nível, como em VHDL, especialmente para o uso em verificação funcional de ICs. Tendo em vista que a última especificação da linguagem VERILOG foi em 2005, em círculos de programadores, que SystemVerilog tende a substituir VERILOG em todos os níveis. Será que VERILOG está morrendo? É uma dúvida interessante.

Conclusão

Neste post foram apresentados alguns aspectos entre as duas linguagens. Como toda linguagem computacional, esses aspectos podem variar conforme elas evoluem. A melhor sugestão que posso dar é: aprenda as duas. Aprenda a pensar em descrição de hardware reutilizável, com boas abstrações, código claro e bem documentado.

Um engenheiro que admiro muito me lembrou bem detalhes que havia esquecido – “…o engenheiro tem que aprender a construir uma visão sistêmica e a identificar gargalos de desempenho arquiteturais e  buscar ferramentas de verificação (vunit, cocotb, UVVM)…“. Grato Eurípedes.

Invariavelmente um dia você vai se deparar com o desafio de integrar dois códigos, um descrito em VERILOG/SystemVerilog e outro em VHDL, e o entendimento das peculiaridades dessas  linguagens serão fundamentais. 

O assunto não se encerra aqui. Vamos conversar sobre esse assunto?

Saiba mais

Série “Tutorial de Verilog”

PROCESSADORES PROGRAMÁVEIS – como projetar um processador em VERILOG – Arquitetura – parte 1

Introdução ao HDL com MyHDL

Co-simulação HDL

Referências

[1] VHDL & Verilog Compared & Contrasted – Plus Modeled Example Written in VHDL, Verilog and C. Douglas J. Smith. 1996.

[2] Part 10: The 2016 Wilson Research Group Functional Verification Study. Disponível em: https://blogs.mentor.com/verificationhorizons/blog/2016/10/31/part-10-the-2016-wilson-research-group-functional-verification-study/

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.

Sistemas Digitais
Comentários:
Notificações
Notificar
guest
9 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Ricardo Tafas
Membro
01/10/2018 20:55

Verbosidade fazia diferença antes dos editores com macro. Hoje, acho um argumento completamente inválido e obsoleto.

FERNANDO ANDRADE
FERNANDO ANDRADE
01/10/2018 17:32

Excelente artigo!
Eu prefiro a liberdade do Verilog…
Mas é como o Rodrigo concluiu: o importante é conhecer as duas linguagens.

Gallegos Walter
Membro
01/10/2018 10:24

Oi Rodrigo, Sem tentar adicionar combustível ao fogo, é uma discussão que abandonei há muitos anos. Nada produtivo sai disso. Um ponto acho interessante considerar, falando de ferramentas, as linguagens de descrição de hardware são apenas ferramentas, não deveria-se esquecer de considerar quem faz a seleção das ferramentas. Com muito poucas exceções não seria o usuário final da ferramenta quem seleciona. O usuário final geralmente tem nada a ver com isto. As ferramentas são impostas pela empresa; a empresa tem investido muito dinheiro em formação, ferramentas, horas engenheiro e outras; o impacto econômico faz quase impossível reconhecer que poderia estar… Leia mais »

Pedro Ledoux
Pedro Ledoux
30/09/2018 06:44

Estive escrevendo sobre essa tematica ha alguns meses atrás.

Uma grande diferença entre VHDL e Verilog é que VHDL é uma linguagem de tipagem forte enquanto que Verilog é como C, de tipagem fraca. Dai se vc conecta por exemplo uma variavel de 5 bits de largura a uma de 32 bits o Verilog vai deixar passar enquanto que o VHDL não. Esse é um dos fatores que faz VHDL ser bem usado pelo pessoal que trabalha com sistemas criticos para o setor aeroespacial na Europa.

Pedro Ledoux
Pedro Ledoux
Reply to  Pedro Ledoux
01/10/2018 17:12

VHDL foi baseada no ADA. Por ser uma linguagem de tipagem forte em tese ela deixaria menos erros passarem e precisaria de msnos linting em comparação ao verilog que é de tipagem fraca.

Porém para a verificação funcional o Verilog tem um suporte bem mais forte que vem do SystemVerilog e da metodologia UVM. No ciclo de desenvolvimento do ASIC a verificação funcional é uma etapa extremamente critica. Para o VHDL ha alternativas recentes que podem fazer algo analogo ao UVM. Porém essas alternativas são bem menos maduras e tem muito pouca literatura cobrindo.

Pedro Ledoux
Pedro Ledoux
Reply to  Rodrigo Pereira
02/10/2018 13:27

Quanto aos EUA já ouvi dizer que VHDL seria mais usado na defesa e o Verilog seria mais usado no vale do Silicio.

Na Europa de uma representante de uma empresa que fornece softwares para o desenvolvimento ouvi que no lado do ASIC as empresas estão procurando a homogenização das linguagens para verificação e desenvolvimento e por isso estão usando mais o verilog e SystemVerilog enquanto que o VHDL é mais usado quando ha legacy que não da para fugir.

Talvez você goste:

Séries

Menu

EVENTO ONLINE

Simplificando seus projetos de Internet das coisas com o iMCP HT32SX Sigfox

DATA: 18/05 às 15:00h