VHDL o Verilog? [chiuso]


94

VHDL e Verilog sono gli HDL del giorno. Quali sono i vantaggi di chi non ha alcuna esperienza con le HDL?


2
Sembrano ugualmente efficienti, scegli quello che preferisci. Trovo che VHDL mi si adatti meglio.
Leon Heller,

1
Come posso dare a questi moderatori "voto in giù"? La retorica delle persone con esperienza prima è più preziosa delle informazioni contenute nei libri. I libri non portano il concetto di tempo.
dsgdfg,

Risposte:


70

Non posso dirti quale imparare, ma ecco alcuni punti contrastanti (da un utente molto incentrato sul VHDL, ma ho cercato di essere il più equo possibile!), Che possono aiutarti a fare una scelta in base alle tue preferenze in termini di stile di sviluppo:

E tieni a mente la famosa citazione che segue la linea "Preferisco qualunque delle due che non sto usando attualmente" (scusa, non ricordo chi l'abbia effettivamente scritto - forse Janick Bergeron?)

VHDL

  • fortemente tipizzato
  • più prolisso
  • molto deterministico
  • sintassi non simile a C (e mentalità)

Molti errori di compilazione per cominciare, ma poi funziona principalmente come ti aspetti. Questo può portare a una curva di apprendimento della sensazione molto ripida (insieme alla sintassi sconosciuta)

Verilog

  • debolmente tipizzato
  • più conciso
  • deterministico solo se segui attentamente alcune regole
  • più sintassi di tipo C (e mentalità)

Gli errori vengono riscontrati in seguito nella simulazione: la curva di apprendimento per "sentirsi come fare qualcosa" è più superficiale, ma va avanti più a lungo (se questa è la metafora giusta?)

Anche a favore di Verilog è che la verifica di fascia alta si appoggia sempre più a SystemVerilog, che è un'enorme estensione di Verilog. Ma gli strumenti di fascia alta possono anche combinare il codice di sintesi VHDL con il codice di verifica SystemVerilog.


Per un altro approccio interamente: MyHDL ottieni tutta la potenza di Python come linguaggio di verifica con un set di estensioni di sintesi da cui puoi generare VHDL o Verilog.

O Cocotb - tutta la potenza di Python come linguaggio di verifica, con il tuo codice sintetizzabile ancora scritto in qualsiasi HDL che hai deciso di imparare (ad esempio VHDL o Verilog).


2
Conosco Verilog ma non ho familiarità con VHDL: cosa intendi con VHDL come più deterministico di Verilog?
cic

44

Ho imparato entrambi la stessa settimana. VHDL è come ADA / Pascal e Verilog è come C. VHDL è più prolisso e più doloroso per ottenere una compilazione, ma una volta ottenuta una compilazione le tue possibilità di successo sono migliori. Almeno questo è quello che ho trovato. Verilog, come C, è abbastanza contento di lasciarti sparare in un piede. Alcune industrie come quelle aerospaziali / governative si inclinano verso il VHDL, altre verso Verilog. Il problema che riscontro con entrambi è la capacità del banco di prova, e quando si cerca di imparare e provare a passare dalla simulazione alla scrittura in silicone / FPGA sintetizzabile, solo il codice è un altro livello di istruzione.

C'è una lingua che mi piace molto chiamata CDL . È strettamente sintetizzabile, scrivi i tuoi banchi prova in altri modi, genera Verilog sintetizzabile che puoi prendere in altri strumenti. Sfortunatamente i documenti CDL mancano, spero di ottenere alcuni campioni nel mondo per mostrare quanto sia più facile da usare rispetto a Verilog o VHDL, ma non lo faccio. Viene fornito con un proprio ambiente di simulazione / test. Con CDL e GTKWave puoi svolgere una notevole mole di lavoro.

Un altro strumento chiamato Verilator , è abbastanza rigido nel mantenere pulito il tuo Verilog. È un simulatore Verilog gratuito con un modo molto semplice per collegarsi alla sim o creare banchi prova in C / C ++. Puoi usare anche Verilog, non ti limita lì. C'è anche Icarus Verilog , che è più grande e più noto, ma consiglierei Verilator se vuoi imparare Verilog. Per VHDL c'è GHDL , la mia esperienza con esso non è stata buona come Verilator , ma almeno c'è uno strumento gratuito per provare a piedi. Se hai esperienza di programmazione software, è probabile che tu raccolga e godrai Verilog più velocemente di VHDL.

Sono assolutamente d'accordo con Leon, prova entrambi. fpga4fun e altre pagine web hanno alcune buone informazioni e alcune di quelle pagine ti daranno gli equivalenti Verilog e VHDL per l'argomento di cui stanno discutendo. Trovo pagine come quelle più utili per confrontare le due lingue. Se usare un HDL è qualcosa che vuoi fare nella tua carriera, ti consiglio di avere almeno alcune capacità con entrambi, forse davvero buono con uno ma non essere completamente incapace di usare l'altro.


1
Suggerimenti molto buoni. Ho modificato la tua risposta come riferimento a me e agli altri. +1
Daniel Grillo,

23

Molte guerre sante sono state combattute per questo. Uno svantaggio particolare di Verilog è il suo comportamento non deterministico. http://www.sigasi.com/content/verilogs-major-flaw


Sì, sembra male, ma non sono sicuro: è un difetto nella lingua o in questo sintetizzatore particolare?
Stevenvh,

4
È un problema di lingua. Sintetizzatori diversi scelgono il proprio comportamento in modo imprevedibile. Esegui lo stesso codice su un simulatore Mentor o un simulatore di cadenza e potresti ottenere risultati diversi.
Philippe,

20

Entrambi hanno vantaggi e svantaggi. VHDL è più accademico, dettagliato e complesso. Devi scrivere più codice, ma il rigore significa che è più probabile che funzioni. Verilog è più semplice per il tipico design digitale, ma semplifica la creazione di bug difficili. VHDL è più comune nelle università. Verilog è più comune nelle grandi aziende di semiconduttori.

Di solito la scelta dell'uno o dell'altro è guidata dagli strumenti che stai utilizzando. Alcuni dei più popolari strumenti FPGA funzionano meglio con VHDL. Alcuni strumenti ASIC popolari funzionano meglio con Verilog. Quindi, ciò che è meglio dipende da cosa vuoi farci.

Supponiamo che tu voglia realizzare piccoli progetti utilizzando gli FPGA Altera che sono popolari nelle scuole EE. Gli strumenti gratuiti supportano entrambi gli HDL. Ma potresti scoprire che la comunità di utenti utilizza principalmente VHDL. Ci saranno più codici di esempio, moduli riutilizzabili, ecc. Se scegli quella lingua.

Al contrario, se hai intenzione di lavorare in una grande azienda facendo seri lavori di progettazione di chip, quasi tutti usano Verilog in questi giorni. Gli strumenti di sintesi, simulazione e verifica per servizio pesante sono ottimizzati per Verilog. E di recente, SystemVerilog - estensioni a Verilog per supportare la progettazione e la verifica di sistemi di alto livello.

Altre discussioni qui e link utili qui:

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

Per un principiante / hobbista, il miglior consiglio è di decidere con quali gettoni giocare e vedere quali esempi fornisce il fornitore. Usalo. Una volta che sei un designer digitale esperto, l'apprendimento dell'altra lingua richiederà solo pochi giorni.


4
Grazie. L'ultima frase è importante. Ci sono strumenti che convertono l'uno nell'altro?
Stevenvh,

c'è un po 'di storia di noi in cui non entrerò, ma se guardi a modelim, quando prende verilog in, si converte in vhdl e poi lo simula. Non fa il contrario, quindi almeno da Verilog a VHDD puoi vedere qualche conversione con quello strumento. ci sono altri strumenti là fuori che convertono specificamente in un modo o nell'altro e hanno versioni demo.
old_timer

3
Alcuni degli strumenti commerciali (sintesi, analisi statica) leggeranno in una lingua e verranno stampati nell'altra. Il risultato è come usare un compilatore per trasformare Ada in linguaggio assembly e quindi un decompilatore per estrarre C. Non ti piacerà il risultato.
Andy McC,

17

Risposta breve : usa SystemVerilog, ma impara anche VHDL . Evita Verilog-2001 se puoi.

Risposta molto lunga : per il momento, suppongo che Verilog intenda Verilog-2001, che è probabilmente quello che assumono anche la maggior parte delle altre risposte. Il miglior suggerimento sarebbe probabilmente quello di imparare entrambi, ma non usare nessuno dei due (di più su questo alla fine della risposta). Le principali differenze possono essere riprese in quanto segue:

  • Verilog-2001 è conciso , mentre VHDL è (molto, molto, molto) prolisso
  • Verilog-2001 supporta costrutti di livello molto basso che non sono supportati da VHDL (ma non sarà necessario utilizzarli per la progettazione tipica del livello di trasferimento del registro (RTL)
  • VHDL è tipizzato più fortemente , il che in genere rende molto più facile rilevare errori in anticipo
  • VHDL è molto più espressivo di Verilog
  • Verilog-2001 ha una sintassi più simile al C, mentre VHDL è più simile all'Ada
  • Verilog-2001 può avere alcuni concetti confusi per i principianti (ad es. wireVs reg)

Detto questo, i concetti più importanti sono condivisi dalle due lingue, anche se con nomi diversi (ad es. alwaysVsprocess ) e in ogni caso la difficoltà nell'apprendimento di un HDL è più correlata ai concetti sottostanti (come la concorrenza di tutti i processi, l'HW convenzioni ecc.) rispetto alla lingua stessa. Considerando le differenze, se la scelta fosse tra Verilog 2001 e VHDL, personalmente indirizzerei qualsiasi principiante a VHDL.

Tuttavia, come ho detto, il mio suggerimento è in realtà di non utilizzare né VHDL né Verilog-2001 se si ha il potere di scegliere. Contrariamente a quanto molti pensano, SystemVerilog non è un linguaggio di livello superiore utile solo per la progettazione o la verifica a livello di sistema e ha poco da condividere con le lingue che possono essere inserite in uno strumento di sintesi di alto livello come SystemC.

Invece, SystemVerilog è un aggiornamento completo del linguaggio Verilog (basato su Verilog-2005, vedi http://en.wikipedia.org/wiki/SystemVerilog ) che ha un sottoinsieme completamente sintetizzabile che corrisponde alla concisione di Verilog con un'espressività più elevata di entrambi Verilog-2001 e VHDL, fornendo a mio avviso il meglio dei due mondi.

Esempi di costrutti / espressioni molto significativi disponibili in SystemVerilog che non sono disponibili in Verilog-2001, VHDL o entrambi includono:

  • always_ff, always_latch, always_combBlocchi che aiutano il progettista distinguere immediatamente tra i blocchi di attuazione diversi tipi di logica, e - per always_combe always_latch- (! Una fonte di infinite bug in VHDL e Verilog, soprattutto per i principianti) inferire automaticamente i segnali che dovrebbero andare nella lista sensibilità
  • logictipi che sostituiscono la confusione wiree regtipi di Verilog-2001
  • tipi compressi che consentono di costruire facilmente bus multidimensionali (ad es. logic [N-1:0][M-1:0][P-1:0]), mentre Verilog-2001 supporta solo bus bidimensionali e VHDL costringe il progettista a definire nuovi tipi per costruire strutture simili
  • costrutti di alto livello come struct(simile a VHDL record) e persino di livello superiore interfaceche possono essere utilizzati in modo molto efficace per modellare strutture regolari (come le porte di un bus)

Ho provato tutte queste differenze "sulla mia pelle" mentre lavoravo su un sistema multicore piuttosto complesso a fini di ricerca. Ora è supportato da molti strumenti e so con certezza (dall'usarli quasi ogni giorno) che è supportato dagli strumenti Synopsys (sia per i flussi di sintesi ASIC e FPGA), Xilinx Vivado (per la sintesi FPGA) e strumenti di simulazione come come MentorGraphics Modelsim, Cadence NCsim e Synopsys VCS.

Per essere totalmente completi, ci sono altri due tipi significativi di linguaggi nella toolbox del progettista hardware (sebbene la qualità di questi strumenti possa variare molto):

  • Linguaggi di generazione HDL come MyHDL (basato su Python) e Rocket (basato su Scala). Il concetto qui è: descrivi il tuo progetto in un linguaggio di livello superiore ma usi ancora concetti molto HDL (ad es. Blocchi simultanei, tempistiche esplicite) e quindi generi HDL convenzionale (di solito Verilog-2001). Onestamente non li trovo super utili poiché il passaggio di astrazione da HDL è piccolo e SystemVerilog fornisce già molti dei concetti di livello superiore, con il vantaggio di essere direttamente immesso nel flusso di sintesi senza passaggi intermedi.
  • Strumenti di sintesi di alto livello , come Vivado HLS, LegUp, Calypto Catapult e molti altri. Questi prendono una descrizione di altissimo livello, spesso in C, C ++ o SystemC e di solito senza orario, e generano un'implementazione di massimo sforzo in Verilog (di solito illeggibile). Sono abbastanza bravi a generare alcuni oggetti (ad esempio acceleratori HW per funzioni come convoluzione, FFT ecc.) Ma generalmente non sono generici. Ad esempio, è impossibile progettare un core del processore nella maggior parte degli strumenti HLS - l'unico che io conosca è BlueSpec, che è davvero un ibrido tra la generazione HLS e HDL.

Questo è praticamente come ho imparato. Prima ho appreso VHDL e l'ho codificato per 3 anni. Trascorsi 3 mesi a scrivere codice dopo e, molto rapidamente, decisi che SystemVerilog era la strada da percorrere. Ora codifico quasi esclusivamente SV, ma faccio molto affidamento sulla comprensione e sulle tecniche di codifica che ho imparato usando VHDL.
stanri,

12

La mia carriera negli ultimi 13 anni è stata dell'80% ASIC e del 20% FPGA.

Il VHDL è stato usato per i primi 3,5 anni e il resto erano Verilog. Non ho trovato difficile passare a Verilog, e per motivi di posizione (Silicon Valley) e velocità ho solo codificato in Verilog oggi.

Inoltre, eseguo molte interfacce Asatch, interfacce e design semi personalizzati a livello di gate per prestazioni, quindi VHDL ha ben poco uso nella mia vita ora. Invece ho trovato SystemVerilog e SystemC molto più utili da raccogliere e utilizzare per grandi progetti di ingegneria.

A un certo punto, strumenti come Verilator (gratuito! E veloce) mi hanno risparmiato un sacco di fondi necessari per le simulazioni critiche. Non hai (ancora) questa opzione per VHDL. E potresti non averne mai bisogno se nuoti sempre in una piscina ricca o non fai progetti di gate> 1M.

Tuttavia, VHDL è migliore per i principianti prima che sviluppino solidi principi di progettazione HW. Le mie comunicazioni con la gente dell'EDA qui suggeriscono che hanno fatto piccoli sviluppi VHDL negli ultimi 10 anni e oggi c'è un grande impulso dietro HLS. Quindi non ci saranno molti sviluppatori di strumenti VHDL in giro ...


FreeHDL per la simulazione VHDL? Qucs come frontend.
Martin

8

Ho scelto VHDL, soprattutto perché conosco C molto bene e ho scoperto che provare a scrivere verilog tendeva a farmi scrivere come se stessi puntando su una CPU che non descriveva l'hardware.

Molto fastidioso scrivere una pagina di codice e rendersi conto che quello che hai scritto era effettivamente un programma sequenziale, non un progetto hardware, sì, sarebbe synth, ma il risultato è stato brutto e lento.

VHDL era abbastanza diverso che ho trovato molto più facile pensare in termini di progettazione logica e non di controllo del flusso.

Alla fine della giornata, la lingua è raramente la parte difficile, l'abilità è nella progettazione del sistema non nella digitazione.

Saluti, Dan.


5

L'anno scorso l'università che ho studiato ha promosso due corsi aperti per principianti. Entrambi riguardavano lo stesso contenuto ma uno utilizzava VHDL e l'altro Verilog.

Naturalmente ho chiesto a entrambi i professori le differenze tra VHDL e Verilog. Entrambi non potevano eleggere il meglio.

Quindi ho dovuto fare entrambi i corsi per vedere quale poteva essere migliore per me. La mia prima impressione è stata che VHDL è più simile a Pascal e Verilog è più simile a C .

Dopo questo ho deciso di fare solo VHDL perché, a quel tempo, stavo lavorando con Delphi.

Ma non ho mai lavorato con FPGA dopo il corso. Quindi questo è il meglio che posso aiutarti.


5

Uso VHDL quasi interamente. La mia esperienza è che VHDL è più comune in Europa, Verilog negli Stati Uniti, ma VHDL ha fatto progressi costanti anche negli Stati Uniti. La tipizzazione forte di VHDL non mi disturba perché lo uso come un linguaggio di progettazione hardware vecchio stile come usato in piccole logiche programmabili, come PALASM o AHDL di Altera.

Il grosso problema per la maggior parte delle persone che usano VHDL sono i tipi forti. Vogliono fare delle assegnazioni tra std_logic_vector (che io considero una raccolta di fili nel bersaglio) e "int", (che io considero un numero memorizzato nel computer che sta compilando il disegno). La conversione di tipo più fastidiosa in cui mi imbatto in genere è tra bit_vector (che considero una descrizione di una raccolta di fili nel computer che compila il disegno) e std_logic_vector. In effetti, ciò che mi ha trascinato su stackexchange in questo momento è stato alla ricerca di una conversione da char (una variabile di carattere memorizzata nel computer di compilazione) in int.

In passato, il conflitto più famoso tra VHDL e Verilog era il concorso di design organizzato dalla rivista ASIC & EDA. Google "Risultati inaspettati da un concorso di progettazione hardware: Verilog Won & VHDL Lost? - You Be The Judge!", Ad esempio: http://www.ee.ed.ac.uk/~gerard/Teach/Verilog/manual /Example/lrgeEx2/cooley.html

Il contest doveva implementare un registro a 9 bit abbastanza complicato. Aveva il conto alla rovescia e anche alcune altre cose. Il risultato è stato che 8 dei 9 designer di Verilog avevano il codice in esecuzione dopo 90 minuti. Zero dei 5 ragazzi VHDL ha funzionato.

Non uso VHDL come nessun altro. Per come la uso, i tipi non mi ostacolano molto spesso. Avrei implementato il progetto sopra nello stesso modo in cui faccio tutto il resto, interamente in std_logic e std_logic_vector, usando (back in the day) la libreria IEEE senza segno. Invece, immagino che i progettisti VHDL abbiano fatto il loro lavoro con int e si siano persi nella conversione dei tipi.

Ci sono due posti in cui puoi perderti nella conversione del tipo: (a) il tuo design e (b) il tuo banco di prova. Per me, è più semplice scrivere il banco di prova (quasi) interamente in std_logic, quindi il banco di prova stesso è (quasi) sintetizzabile. Con "quasi" intendo che definirò l'orologio con un incarico ritardato che non può essere sintetizzato. A parte questo (e i commenti), non puoi distinguere i miei banchi di prova dalla logica sintetizzata.

Ad ogni modo, prima di decidere una prima lingua da imparare (quasi tutti hanno una preferenza ma quasi tutti usano entrambe), consiglierei di cercare quel concorso e leggere il commento su di esso.

Uno dei problemi che ho riscontrato con VHDL è che, poiché si tratta di un linguaggio molto dettagliato, sembra esserci una tendenza (nella mente dei progettisti) a credere che non richieda commenti. Ovviamente non è vero, dovresti scrivere i commenti prima del codice.


1
Penso che sia un'affermazione interessante che la forte tipizzazione di VHDL sia il problema più grande. Per me la digitazione forte è una caratteristica centrale che mi consente di aumentare il livello di astrazione. Nella progettazione hardware è possibile scegliere tra descrivere una struttura che implementa un comportamento o descrivere un comportamento che implementa una struttura. La storia ha dimostrato che l'astrazione è la chiave per il successo della progettazione di grandi sistemi e che i sistemi digitali non fanno eccezione. Penso quindi che ti manchi molto limitandoti a un sottoinsieme molto ristretto di funzionalità linguistiche.
trondd

2
È vero, ma non sono specializzato nella "progettazione di sistemi di grandi dimensioni", sono specializzato in piccole cose che devono essere estremamente efficienti. Esistono diverse ragioni per cui l'efficienza a volte diventa fondamentale nella progettazione elettronica. A volte un grande sistema è costituito da molti di questi piccoli sistemi e questo tipo di design offre un'efficienza molto maggiore.
Carl Brannen,

5

Peserò i miei due centesimi: anch'io sono un utente VHDL pesante, ma Verilog può sicuramente fare anche il lavoro. Puoi sempre avvolgerli l'uno nell'altro (anche se con un tempo e un costo di battitura).

Quello che ho scoperto è che il VHDL grezzo non ha molte funzioni utili. (OR o AND: mi viene in mente un intero std_logic_vector). Pertanto, la creazione di una cassetta degli attrezzi con funzioni debug e sintetizzabili contribuisce notevolmente ad aumentare la produttività durante l'utilizzo di VHDL.

Forse qualcuno potrebbe fare riferimento a una buona libreria open source che offre tutte queste funzioni "buone da avere"?


2
Sono abbastanza sicuro che la riduzione AND / OR sia inclusa in VHDL 2008 insieme ad altri utili aggiornamenti.
ks0ze,

4

Le risposte precedenti coprono praticamente i contrasti tra le due lingue e questo articolo copre abbastanza bene anche i punti: http://www.bitweenie.com/listings/verilog-vs-vhdl/

Vorrei anche fare un altro paio di punti che non sono stati menzionati.

Consiglierei di imparare prima il VHDL per un paio di ragioni. La digitazione forte aiuta alcuni errori facili per i principianti a essere colti dal compilatore. Ho anche sentito che VHDL è più difficile da raccogliere dopo aver usato Verilog per primo.

Onestamente, non puoi sbagliare con nessuna delle due lingue; e se lavori in questo settore da molto tempo, alla fine imparerai comunque entrambe le lingue.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.