Verilog versus VHDL: twee hardwarebeschrijvingstalen vergeleken

Verilog en VHDL zijn de twee belangrijkste hardwarebeschrijvingstalen (HDL's) om digitale schakelingen te beschrijven voor simulatie en logische synthese. Verilog heeft een beknopte, op C lijkende syntaxis en is gemakkelijk om mee te beginnen. VHDL is uitgebreider en strikt getypeerd, waardoor fouten eerder aan het licht komen. Met beide is dezelfde schakeling te beschrijven en de keuze hangt meestal af van de sector, het bedrijf en bestaande code.

KenmerkVerilog (en SystemVerilog)VHDL
HerkomstIn de jaren 1980 ontwikkeld door Gateway Design Automation en gestandaardiseerd als IEEE 1364Ontwikkeld voor het Amerikaanse ministerie van Defensie en in 1987 gestandaardiseerd als IEEE 1076
Kenmerken van de syntaxisBeknopt en lijkt op CUitgebreid en lijkt op Ada
TypenZwak getypeerd. Impliciete typeconversie is eenvoudig, maar kan fouten verbergenSterk getypeerd. Expliciete typeconversie is nodig en fouten worden bij het compileren gevonden
Hoofdletters en kleine lettersHoofdlettergevoeligNiet hoofdlettergevoelig
LeerbaarheidGemakkelijk om mee te beginnenIn het begin moeilijker, maar veilig zodra je eraan gewend bent
VerificatiemogelijkhedenBeperkt in Verilog zelf. SystemVerilog voegt klassen, constrained random testing, assertions en UVM toeVHDL-2008 met bibliotheken zoals OSVVM en UVVM
TaalabstractiesWeinig. Modules en parametersRijk. Packages, generics, records, enumeraties
ToolondersteuningAlle belangrijke simulators en synthesetools ondersteunen hetAlle belangrijke simulators en synthesetools ondersteunen het. Simulatie met gemengde talen is mogelijk
Belangrijkste gebruikersASIC- en SoC-ontwerp, vooral in de VS en AziëEuropa, lucht- en ruimtevaart en defensie, veel FPGA-ontwikkeling

De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.

Wanneer welke variant?

Verilog / SystemVerilog
Voor chipontwerp en -verificatie is dit de veilige eerste keuze, omdat de tools en bibliotheken in de industrie rond SystemVerilog zijn gebouwd.
VHDL
Past bij situaties waar strikte typering en onderhoudbaarheid op lange termijn belangrijk zijn. Veiligheidskritische ontwikkeling en defensietoepassingen.
In de praktijk
Vaak moet je allebei kunnen lezen. De concepten (modules of entities, gelijktijdig werkende signalen, door de klok aangestuurde processen) zijn hetzelfde.

Veelgestelde vragen

Wat is gemakkelijker te leren, Verilog of VHDL?

Verilog, omdat de syntaxis korter is en op C lijkt. VHDL is uitgebreider en strikter getypeerd en dus in het begin moeilijker, maar vindt bij het compileren meer fouten.

Welke wordt het meest gebruikt in de industrie?

Voor ASIC- en SoC-ontwerp en -verificatie, vooral in de VS en Azië, is SystemVerilog de standaard. VHDL wordt gebruikt in Europa, in de lucht- en ruimtevaart en defensie en bij veel FPGA-ontwikkeling.

Kunnen Verilog en VHDL in één project worden gemengd?

Ja. De belangrijke simulators en synthesetools ondersteunen ontwerpen met gemengde talen, zodat een module in de ene taal in de andere kan worden gebruikt.

Wat is SystemVerilog?

Een uitbreiding van Verilog die klassen, constrained random testing, assertions en de UVM-methodiek toevoegt. Het is de standaard voor chipverificatie.

Test uw begrip

Welke uitspraak over het belangrijkste verschil tussen een beschrijving in een HDL zoals Verilog en een softwareprogramma in bijvoorbeeld C is juist?

  1. AEen HDL-beschrijving stelt schakelingen voor die gelijktijdig en parallel werken
  2. BEen HDL-beschrijving is een reeks instructies die regel voor regel van boven naar beneden worden uitgevoerd
  3. CIn HDL kunnen geen variabelen of voorwaardelijke sprongen worden gebruikt
Antwoord en toelichting tonen

Antwoord: A. Een HDL-beschrijving stelt schakelingen voor die gelijktijdig en parallel werken

Een HDL lijkt qua uiterlijk op een programma, maar wat erin is geschreven wordt door logische synthese een schakeling van poorten en flipflops. Alle delen van de schakeling werken voortdurend tegelijk, dus meerdere assign-statements en always-blokken werken parallel, onafhankelijk van de volgorde waarin ze zijn geschreven. Wie zoals bij software denkt in 'als deze bewerking klaar is, volgt de volgende', krijgt niet de bedoelde schakeling, dus het is belangrijk tijdens het schrijven na te denken over welke schakeling ontstaat.

Welke uitspraak over het doel van het gebruik van een module in Verilog is juist?

  1. AEen onderdeel van een schakeling met ingangs- en uitgangsaansluitingen (poorten) definiëren, zodat het in andere modules kan worden gebruikt
  2. BDe uitvoering van het programma tijdelijk stoppen
  3. CHet resultaat van de simulatie op het scherm tonen
Antwoord en toelichting tonen

Antwoord: A. Een onderdeel van een schakeling met ingangs- en uitgangsaansluitingen (poorten) definiëren, zodat het in andere modules kan worden gebruikt

Een module is de eenheid waarmee een samenhangend deel van een schakeling met ingangs- en uitgangspoorten wordt gedefinieerd, zoals een opteller, een teller of een hele CPU. Een gedefinieerde module kan in een andere module als onderdeel zo vaak als nodig worden gebruikt (instantiëring), en door de poorten met bedrading te verbinden wordt een grotere schakeling opgebouwd. Net als bij het rangschikken en bedraden van onderdelen op een printplaat kunnen schakelingen hiërarchisch worden gemaakt.

Welke uitspraak over het verschil tussen het wire-type en het reg-type in Verilog is juist?

  1. AEen reg wordt altijd een flipflop en een wire altijd een combinatorische schakeling
  2. BEen wire stelt bedrading voor die bijvoorbeeld met een assign-statement wordt aangedreven, en een reg stelt een signaal voor waaraan in een always-blok een waarde wordt toegekend, maar een reg wordt niet altijd een flipflop
  3. CEen wire is een type voor getallen en een reg een type voor tekens
Antwoord en toelichting tonen

Antwoord: B. Een wire stelt bedrading voor die bijvoorbeeld met een assign-statement wordt aangedreven, en een reg stelt een signaal voor waaraan in een always-blok een waarde wordt toegekend, maar een reg wordt niet altijd een flipflop

In Verilog geldt de regel dat een signaal dat door een assign-statement of een module-uitgang wordt aangedreven als wire wordt gedeclareerd en een signaal waaraan in een always-blok wordt toegekend als reg. Een reg lijkt een afkorting van 'register', maar als erin always @(*) aan wordt toegekend, ontstaat een combinatorische schakeling en geen flipflop. Of het een flipflop wordt, hangt ervan af of de waarde op een klokflank wordt bijgewerkt. In SystemVerilog kunnen beide met het logic-type worden geschreven.

  1. Welke uitspraak over de werking van de niet-blokkerende toekenning (<=) in Verilog is juist?
  2. Welke hardwarebeschrijvingstaal wordt vooral gebruikt bij RTL-ontwerp?
  3. Welke standaardmethodiek wordt bij verificatie met SystemVerilog gebruikt om een goed herbruikbare testomgeving (testbench) op te bouwen?

Oefenvragen over Hardwarebeschrijvingstalen en verificatie

Belangrijke termen uitgelegd

Verilog
Hardwarebeschrijvingstaal die veel wordt gebruikt voor ontwerp en verificatie van digitale circuits. Circuits worden per module geschreven en het gedrag wordt met assign en always beschreven.
SystemVerilog
Taal die Verilog uitbreidt. Heeft ontwerpmogelijkheden zoals het type logic en always_ff en always_comb, en verificatiemogelijkheden zoals klassen, constrained random en assertions.
Hardwarebeschrijvingstaal (HDL)
Taal om de structuur en werking van digitale schakelingen in tekst te beschrijven. HDL. Voorbeelden zijn Verilog, SystemVerilog en VHDL; via logische synthese worden ze omgezet in een schakeling.
RTL (register transfer level)
Abstractieniveau van het ontwerp waarbij een circuit wordt beschreven aan de hand van hoe data tussen registers worden overgedragen en verwerkt. Geschreven in Verilog of VHDL en invoer voor logische synthese.

Verwante vergelijkingen