VHDL ou Verilog? [fechadas]


94

VHDL e Verilog são os HDL do dia. Quais são as vantagens de alguém que não tem nenhuma experiência com HDLs?


2
Eles parecem ser igualmente eficientes, escolha o que você preferir. Acho que o VHDL me convém melhor.
21711 Leon Heller13:

11
Como posso dar a esses moderadores "voto negativo"? A retórica das pessoas com experiência anterior é mais valiosa do que as informações contidas nos livros. Os livros não carregam o conceito de tempo.
dsgdfg

Respostas:


70

Não sei dizer o que aprender, mas eis alguns pontos contrastantes (de um usuário muito centrado em VHDL, mas tentei ser o mais justo possível!), O que pode ajudá-lo a fazer uma escolha com base em suas próprias preferências em termos de estilo de desenvolvimento:

E lembre-se da famosa citação que segue as linhas de "Prefiro qualquer uma das duas que não estou usando atualmente" (desculpe, não lembro quem realmente escreveu isso - possivelmente Janick Bergeron?)

VHDL

  • fortemente tipado
  • mais detalhado
  • muito determinista
  • sintaxe não C (e mentalidade)

Muitos erros de compilação para começar, mas geralmente funcionam como você espera. Isso pode levar a uma curva de aprendizado muito acentuada (junto com a sintaxe desconhecida)

Verilog

  • fracamente tipado
  • mais conciso
  • somente determinístico se você seguir algumas regras cuidadosamente
  • mais sintaxe do tipo C (e mentalidade)

Os erros são encontrados mais tarde na simulação - a curva de aprendizado para "sentir vontade de fazer algo" é mais rasa, mas dura mais tempo (se essa é a metáfora certa?)

Também a favor da Verilog é que a verificação high-end está cada vez mais inclinada ao SystemVerilog, que é uma grande extensão do Verilog. Mas as ferramentas de ponta também podem combinar o código de síntese VHDL com o código de verificação SystemVerilog.


Para outra abordagem inteiramente: MyHDL - você obtém todo o poder do Python como uma linguagem de verificação com um conjunto de extensões de síntese a partir das quais é possível gerar VHDL ou Verilog.

Ou Cocotb - todo o poder do Python como uma linguagem de verificação, com o seu código sintetizável ainda escrito em qualquer HDL que você decidiu aprender (por exemplo, VHDL ou Verilog).


2
Conheço a Verilog, mas não conheço o VHDL: o que você quer dizer com VHDL sendo mais determinístico do que o Verilog?
cic

44

Aprendi as duas na mesma semana. VHDL é como ADA / Pascal e Verilog é como C. VHDL é mais detalhado e mais doloroso para compilar, mas depois de compilado suas chances de sucesso são melhores. Pelo menos foi o que eu encontrei. Verilog, como C, é bastante contente em deixar você dar um tiro no próprio pé. Algumas indústrias, como aeroespacial / governamental, se inclinam para o VHDL, outras, para a Verilog. O problema que encontro com os dois são os recursos da bancada de testes e, ao tentar aprender e passar da simulação para a escrita em silício / FPGA, apenas o código sintetizável é outro nível de educação.

Existe uma linguagem que eu realmente gosto chamada CDL . É estritamente sintetizável, você escreve seus bancos de teste de outras maneiras, gera o Verilog sintetizável, que pode ser usado em outras ferramentas. Infelizmente , faltam os documentos da CDL , espero divulgar algumas amostras no mundo para mostrar como é mais fácil de usar do que o Verilog ou o VHDL, mas isso ainda não foi feito. Ele vem com seu próprio ambiente sim / teste. Com CDL e GTKWave, você pode realizar uma quantidade considerável de trabalho.

Outra ferramenta chamada Verilator é bastante rígida para manter seu Verilog limpo. É um simulador Verilog gratuito, com uma maneira muito fácil de conectar-se ao sim ou criar bancos de teste em C / C ++. Você pode usar o Verilog também, não o limita lá. Também existe o Icarus Verilog , que é maior e mais conhecido, mas eu recomendaria o Verilator se você quiser aprender o Verilog. Para o VHDL existe o GHDL , minha experiência com ele não foi tão boa quanto o Verilator , mas pelo menos há uma ferramenta gratuita para tentar molhar os pés. Se você possui experiência em programação de software, é provável que aproveite o Verilog mais rapidamente que o VHDL.

Eu definitivamente concordo com Leon, tente os dois. O fpga4fun e outras páginas da Web têm boas informações e algumas dessas páginas fornecerão os equivalentes Verilog e VHDL para o tópico que estão discutindo. Acho páginas como as mais úteis para comparar os dois idiomas. Se o uso de um HDL é algo que você deseja fazer em sua carreira, recomendo ter pelo menos alguns recursos com ambos, talvez realmente bons com um, mas não sejam completamente incapazes de usar o outro.


11
Muito boas dicas. Editei sua resposta como uma referência para mim e para outras pessoas. +1
Daniel Grillo

23

Muitas guerras santas foram travadas sobre isso. Uma desvantagem particular do Verilog é seu comportamento não determinístico. http://www.sigasi.com/content/verilogs-major-flaw


Sim, isso parece ruim, mas não tenho certeza: isso é uma falha na linguagem ou neste sintetizador em particular?
22411 stevenvh

4
É uma questão de linguagem. Sintetizadores diferentes escolhem seu próprio comportamento de maneira imprevisível. Execute o mesmo código em um simulador Mentor ou Cadence e você poderá obter resultados diferentes.
Philippe

20

Ambos têm vantagens e desvantagens. O VHDL é mais acadêmico, detalhado e complexo. Você precisa escrever mais código, mas o rigor significa que é mais provável que funcione. O Verilog é mais simples para o design digital típico, mas facilita a criação de erros complicados. VHDL é mais comum nas universidades. O Verilog é mais comum em grandes empresas de semicondutores.

Geralmente, a escolha de um ou outro é orientada pelas ferramentas que você está usando. Algumas das ferramentas FPGA populares se saem melhor com o VHDL. Algumas ferramentas ASIC populares se saem melhor com o Verilog. Então, o que é melhor depende do que você quer fazer com isso.

Digamos que você queira criar pequenos projetos usando os FPGAs da Altera que são populares nas escolas de EE. As ferramentas gratuitas suportam os dois HDLs. Mas você pode achar que a comunidade de usuários está usando principalmente VHDL. Haverá mais exemplos de código, módulos reutilizáveis ​​etc. se você optar por esse idioma.

Por outro lado, se você pretende trabalhar em uma grande empresa realizando um trabalho sério de design de chips, quase todos eles usam o Verilog atualmente. As ferramentas de síntese, simulação e verificação para serviços pesados ​​são otimizadas para a Verilog. Ultimamente, o SystemVerilog - extensões ao Verilog para oferecer suporte ao design e à verificação de alto nível do sistema.

Mais discussões aqui e links úteis aqui:

http://www.eetimes.com/electronics-blogs/programmable-logic-designline-blog/4032239/Verilog-versus-VHDL-which-is-best-

Para um iniciante / hobby, o melhor conselho é decidir com quais fichas você quer jogar e ver quais exemplos o fornecedor fornece. Use isso. Quando você é um designer digital experiente, o aprendizado do outro idioma leva apenas alguns dias.


4
Obrigado. A última frase é importante. Existem ferramentas que convertem uma na outra?
Stevenvh

existe alguma história do governo americano em que eu não vou entrar, mas se você olhar o modelsim, quando ele entra em log, ele se converte em vhdl e sims isso. Não faz o contrário, então pelo menos verilog to vhdl você pode ver alguma conversão com essa ferramenta. existem outras ferramentas que convertem especificamente uma maneira ou de outra e elas têm versões demo.
22611 old_timer

3
Algumas das ferramentas comerciais (síntese, análise estática) serão lidas em um idioma e produzidas no outro. O resultado é como usar um compilador para transformar Ada na linguagem assembly e, em seguida, um descompilador para extrair C. Você não vai gostar do resultado.
Andy McC

17

Resposta curta : use SystemVerilog, mas aprenda também VHDL . Evite o Verilog-2001, se puder.

Resposta muito longa : no momento, suponho que Verilog você quer dizer Verilog-2001, que é provavelmente o que a maioria das outras respostas assume. A melhor sugestão seria provavelmente aprender as duas coisas, mas não use nenhuma (mais sobre isso no final da resposta). As principais diferenças podem ser retomadas a seguir:

  • O Verilog-2001 é conciso , enquanto o VHDL é (muito, muito, muito) detalhado
  • O Verilog-2001 suporta construções de nível muito baixo que não são suportadas por VHDL (mas você não precisará usá-las para o design típico de nível de transferência de registro (RTL)
  • O VHDL é mais fortemente tipado , o que normalmente facilita muito a detecção precoce de erros.
  • VHDL é muito mais expressivo que Verilog
  • O Verilog-2001 possui uma sintaxe mais semelhante ao C , enquanto o VHDL é mais semelhante ao Ada
  • O Verilog-2001 pode ter alguns conceitos confusos para iniciantes (por exemplo, wirevs reg)

Dito isto, os conceitos mais importantes são compartilhados pelas duas linguagens, embora com nomes diferentes (por exemplo, alwaysvs process) e, em qualquer caso, a dificuldade em aprender um HDL esteja mais relacionada aos conceitos por trás (como a simultaneidade de todos os processos, o HW convenções etc.) do que para o próprio idioma. Considerando as diferenças, se a escolha for entre o Verilog 2001 e o VHDL, eu pessoalmente diria qualquer iniciante ao VHDL.

No entanto, como eu disse, minha sugestão é realmente não usar nem o VHDL nem o Verilog-2001 se você tiver o poder de escolher. Ao contrário do que muitas pessoas pensam, o SystemVerilog não é uma linguagem de nível superior útil apenas para design ou verificação no nível do sistema e tem pouco a compartilhar com idiomas que podem ser alimentados em uma ferramenta de síntese de alto nível como o SystemC.

Em vez disso, o SystemVerilog é uma atualização completa da linguagem Verilog (baseada em Verilog-2005, consulte http://en.wikipedia.org/wiki/SystemVerilog ) que possui um subconjunto totalmente sintetizável que corresponde à concisão do Verilog com maior expressividade do que os dois Verilog-2001 e VHDL, fornecendo na minha opinião o melhor dos dois mundos.

Exemplos de construções / expressões muito significativas disponíveis no SystemVerilog que não estão disponíveis no Verilog-2001, VHDL ou em ambos incluem:

  • always_ff, always_latch, always_combBlocos que ajudam o designer distinguir imediatamente entre os blocos de execução diferentes tipos de lógica, e - por always_combe always_latch- (! Uma fonte de erros infinitos em VHDL e Verilog, especialmente para iniciantes) inferir automaticamente os sinais que devem ir na lista de sensibilidade
  • logictipos que substituem os tipos confusos wiree regde Verilog-2001
  • tipos compactados que permitem a construção fácil de barramentos multidimensionais (por exemplo logic [N-1:0][M-1:0][P-1:0]), enquanto o Verilog-2001 suporta apenas barramentos bidimensionais e o VHDL força o projetista a definir novos tipos para construir estruturas semelhantes
  • construções de alto nível, como struct(semelhante ao VHDL record) e ainda mais alto, interfaceque podem ser usadas de maneira muito eficaz para modelar estruturas regulares (como as portas de um barramento)

Eu testei todas essas diferenças "na minha pele" enquanto trabalhava em um sistema multicore bastante complexo para fins de pesquisa. Agora ele é suportado por muitas ferramentas, e eu tenho certeza (ao usá-las quase todos os dias) que é suportado pelas ferramentas Synopsys (para fluxos de síntese ASIC e FPGA), Xilinx Vivado (para síntese FPGA) e ferramentas de simulação como como MentorGraphics Modelsim, Cadence NCsim e Synopsys VCS.

Para ser totalmente completo, existem dois outros tipos significativos de linguagens na caixa de ferramentas do designer de hardware (embora a qualidade dessas ferramentas possa variar muito):

  • Linguagens de geração de HDL , como MyHDL (com base em Python) e Rocket (com base em Scala). O conceito aqui é: você descreve seu design em uma linguagem de nível superior, mas ainda usa conceitos muito HDL-ish (por exemplo, blocos simultâneos, tempo explícito) e gera o HDL convencional (normalmente Verilog-2001). Honestamente, eu não os acho super úteis, pois a etapa de abstração dos HDLs é pequena e o SystemVerilog já fornece muitos dos conceitos de nível superior, com a vantagem de ser diretamente alimentado no fluxo de síntese sem etapas intermediárias.
  • Ferramentas de síntese de alto nível , como Vivado HLS, LegUp, Calypto Catapult e muitas outras. Eles têm uma descrição de nível muito alto, geralmente em C, C ++ ou SystemC e geralmente são temporários, e geram uma implementação de melhor esforço no Verilog (geralmente ilegível). Eles são muito bons em gerar alguns objetos (por exemplo, aceleradores de HW para funções como convolução, FFTs etc.), mas geralmente não são de uso geral. Por exemplo, é impossível projetar um núcleo de processador na maioria das ferramentas HLS - a única que eu conheço é o BlueSpec, que é realmente um híbrido entre a geração HLS e HDL.

Foi assim que eu aprendi. Aprendeu VHDL primeiro e codificou por 3 anos. Passou 3 meses codificando o verilog depois disso e (muito rapidamente) decidiu que o SystemVerilog era o caminho a seguir. Agora eu codifico quase exclusivamente SV, mas confio bastante nas técnicas de compreensão e codificação que aprendi ao usar o VHDL.
Stanri 13/09/16

12

Minha carreira nos últimos 13 anos foi de 80% ASIC e 20% FPGA.

O VHDL foi usado pelos primeiros 3,5 anos e o restante foi Verilog. Não achei difícil mudar para Verilog e, por motivos de localização (Vale do Silício) e velocidade, só codifico hoje em Verilog.

Além disso, eu faço muitas interfaces assíncronas, travas e designs semi-personalizados no nível de porta para desempenho, portanto o VHDL tem muito pouco uso na minha vida agora. Em vez disso, achei o SystemVerilog e o SystemC muito mais úteis para serem utilizados em grandes projetos de engenharia.

Em um estágio, ferramentas como Verilator (grátis! E rápido) me salvaram muito do fundo necessário para simulações críticas. Você ainda não tem essa opção para VHDL. E talvez você nunca precise disso se nadar sempre em uma piscina rica ou não tiver projetos de portão de 1 milhão.

No entanto, o VHDL é melhor para iniciantes antes que eles desenvolvam princípios sólidos de design de HW. Minhas comunicações com o pessoal da EDA aqui sugerem que eles desenvolveram pouco desenvolvimento de VHDL nos últimos 10 anos, e há um grande impulso por trás do HLS hoje. Portanto, não haverá muitos desenvolvedores de ferramentas VHDL por aí ...


FreeHDL para simulação de VHDL? Qucs como frontend.
Martin

8

Fui para o VHDL, principalmente porque conheço C muito bem e descobri que tentar escrever o verilog tendia a me escrever como se estivesse direcionando uma CPU que não descreve o hardware.

Muito chato escrever uma página de código e perceber que o que você escreveu era efetivamente um programa seqüencial, não um design de hardware, sim, seria sintetizado, mas o resultado foi feio e lento.

O VHDL era diferente o suficiente, e achei muito mais fácil pensar em termos de design lógico e não controlar o fluxo.

No final do dia, o idioma raramente é difícil, a habilidade está no design do sistema e não na digitação.

Atenciosamente, Dan.


5

No ano passado, a universidade que eu estudei promoveu dois cursos abertos para iniciantes. Ambos cobriram o mesmo conteúdo, mas um usando VHDL e o outro Verilog.

É claro que perguntei aos dois professores as diferenças de VHDL e Verilog. Ambos não podiam eleger o melhor.

Então, eu tive que fazer os dois cursos para ver qual deles poderia ser melhor para mim. Minha primeira impressão foi VHDL é mais Pascal-like e Verilog é mais C-like .

Depois disso, decidi fazer apenas VHDL porque, naquela época, eu estava trabalhando com o Delphi.

Mas nunca trabalhei com FPGA após o curso. Portanto, este é o melhor que posso ajudá-lo.


5

Eu uso VHDL quase inteiramente. Minha experiência é que o VHDL é mais comum na Europa, o Verilog nos EUA, mas o VHDL também tem feito progressos constantes nos EUA. A forte digitação do VHDL não me incomoda, porque eu o uso como uma linguagem de design de hardware antiquada, usada em pequenas lógicas programáveis, como PALASM ou AHDL da Altera.

O grande problema para a maioria das pessoas que usa VHDL são os tipos fortes. Eles querem fazer atribuições entre std_logic_vector (que considero uma coleção de fios no destino) e "int" (que considero um número armazenado no computador que está compilando o design). A conversão de tipo mais irritante que geralmente encontro é entre bit_vector (que considero uma descrição de uma coleção de fios no computador que compila o design) e std_logic_vector. De fato, o que me arrastou para a stackexchange agora era procurar uma conversão de char (uma variável de caractere armazenada no computador de compilação) para int.

Naquela época, o conflito mais famoso entre VHDL e Verilog foi o concurso de design organizado pela revista ASIC & EDA. Google "Resultados inesperados de um concurso de design de hardware: Verilog Won e VHDL Lost? - Você é o juiz!", Por exemplo: http://www.ee.ed.ac.uk/~gerard/Teach/Verilog/manual /Example/lrgeEx2/cooley.html

O concurso foi implementar um registro de 9 bits bastante complicado. Tinha contagem de cima / baixo, além de algumas outras coisas. Os resultados foram que 8 dos 9 designers da Verilog tiveram código em execução após 90 minutos. Zero dos 5 caras da VHDL tinha alguma coisa funcionando.

Eu não uso VHDL como qualquer outra pessoa. Do jeito que eu uso, os tipos não ficam no meu caminho com muita frequência. Eu teria implementado o projeto acima da mesma maneira que faço todo o resto, inteiramente em std_logic e std_logic_vector, usando (de volta ao dia) a biblioteca não assinada IEEE. Em vez disso, imagino que os designers de VHDL fizeram seu trabalho com int e se perderam na conversão de tipos.

Há dois lugares em que você pode se perder na conversão de tipos: (a) seu design e (b) sua bancada de testes. Para mim, é mais fácil escrever o banco de ensaios (quase) inteiramente em std_logic, para que o próprio banco de ensaios seja (quase) sintetizado. Com "quase", quero dizer que definirei o relógio com uma atribuição atrasada que não pode ser sintetizada. Mas além disso (e comentários), você não pode distinguir meus bancos de teste da lógica sintetizada.

De qualquer forma, antes de você decidir sobre o primeiro idioma a aprender (quase todo mundo tem uma preferência, mas quase todo mundo usa os dois), aconselho procurar no concurso e ler os comentários sobre ele.

Um dos problemas que observei com o VHDL é que, como é uma linguagem muito detalhada, parece haver uma tendência (na mente dos designers) de acreditar que não exige comentários. Não é verdade, é claro, você deve escrever os comentários antes do código.


11
Eu acho que é uma afirmação interessante de que a forte digitação de VHDL é o maior problema. Para mim, a digitação forte é um recurso central que me permite aumentar o nível de abstração. No design de hardware, você tem a opção entre descrever uma estrutura que implementa um comportamento ou descrever um comportamento que implementa uma estrutura. A história mostrou que a abstração é a chave para o sucesso do projeto de grandes sistemas, e os sistemas digitais não são exceção. Por isso, acho que você sente muita falta ao limitar um subconjunto muito restrito de recursos de idioma.
trondd

2
É verdade, mas não sou especialista em "design de sistemas grandes", sou especialista em pequenas coisas que precisam ser extremamente eficientes. Existem várias razões pelas quais a eficiência às vezes se torna fundamental no projeto da eletrônica. Às vezes, um grande sistema é feito com muitos desses pequenos sistemas e esse tipo de design oferece uma eficiência muito maior.
Carl Brannen

5

Vou pesar meus dois centavos: eu também sou um usuário pesado de VHDL, mas a Verilog certamente pode fazer o trabalho da mesma forma. Você sempre pode agrupar um ao outro (embora com tempo e custo de digitação).

O que eu descobri é que o VHDL bruto não possui muitas funções úteis. (OR ou AND: ing um std_logic_vector inteiro vem à mente). Assim, criar uma caixa de ferramentas com funções sintetizáveis ​​e depuradas ajuda bastante a aumentar sua produtividade ao usar o VHDL.

Talvez alguém possa fazer referência a uma boa biblioteca de código aberto que ofereça todas essas funções "boas de ter"?


2
Tenho certeza de que a redução de AND / OR está incluída no VHDL 2008, juntamente com outras atualizações úteis.
ks0ze

4

As respostas anteriores cobrem praticamente os contrastes entre os dois idiomas, e este artigo também aborda bem os pontos: http://www.bitweenie.com/listings/verilog-vs-vhdl/

Eu também gostaria de fazer mais alguns pontos que não foram mencionados.

Eu recomendaria aprender VHDL primeiro por duas razões. A digitação forte ajuda alguns erros fáceis para iniciantes a serem capturados pelo compilador. Também ouvi dizer que é mais difícil captar o VHDL depois de usar o Verilog primeiro.

Honestamente, você não pode dar errado com nenhum dos idiomas; e se você estiver trabalhando nesse setor por muito tempo, acabará aprendendo os dois idiomas de qualquer maneira.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.