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?
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?
Respostas:
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?)
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)
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).
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.
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
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:
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.
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:
wire
vs reg
)Dito isto, os conceitos mais importantes são compartilhados pelas duas linguagens, embora com nomes diferentes (por exemplo, always
vs 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_comb
Blocos que ajudam o designer distinguir imediatamente entre os blocos de execução diferentes tipos de lógica, e - por always_comb
e always_latch
- (! Uma fonte de erros infinitos em VHDL e Verilog, especialmente para iniciantes) inferir automaticamente os sinais que devem ir na lista de sensibilidadelogic
tipos que substituem os tipos confusos wire
e reg
de Verilog-2001logic [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 semelhantesstruct
(semelhante ao VHDL record
) e ainda mais alto, interface
que 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):
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í ...
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.
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.
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.
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"?
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.