Verilog
Paradigma | Strukturiert |
---|---|
Erstmals erschienen | 1984 |
Stabile Version | IEEE 1364-2005 / 9 November 2005 |
Disziplin tippen | Statisch, schwach |
Dateiname -Erweiterungen | .v, .vh |
Dialekte | |
Verilog-Ams | |
Beeinflusst von | |
Pascal, Ada, C, Forran | |
Beeinflusst | |
Systemverilog | |
|
Verilog, standardisiert als IEEE 1364, ist ein Hardware -Beschreibung Sprache (HDL) zum Modellieren verwendet elektronische Systeme. Es wird am häufigsten für das Design und die Überprüfung von verwendet Digitale Schaltungen Bei der Registerübertragungsstufe von Abstraktion. Es wird auch bei der Überprüfung von verwendet Analoge Schaltungen und Mischsignalschaltungensowie im Design von Genetische Schaltungen.[1] Im Jahr 2009 wurde der Verilog Standard (IEEE 1364-2005) in die zusammengeführt Systemverilog Standard, erstellen IEEE Standard 1800-2009. Seitdem ist Verilog offiziell Teil der Systemverilog -Sprache. Die aktuelle Version ist IEEE Standard 1800-2017.[2]
Überblick
Hardware -Beschreibungsprachen wie Verilog sind ähnlich wie Software Programmiersprachen weil sie Möglichkeiten zur Beschreibung der Ausbreitungszeit und der Signalstärken (Empfindlichkeit) enthalten. Es gibt zwei Arten von Zuordnungsbetreiber; Eine Blockierungszuweisung (=) und eine nicht blockierende (<=) Zuordnung. Mit der nicht blockierenden Zuordnung können Designer ein staatliches Maschinen-Update beschreiben, ohne zu deklarieren und zu verwenden Temporäre Speichervariablen. Da diese Konzepte Teil der Sprachsemantik von Verilog sind, könnten Designer schnell Beschreibungen großer Schaltungen in relativ kompakter und prägnanter Form schreiben. Zum Zeitpunkt der Einführung von Verilog (1984) stellte Verilog eine enorme Produktivitätsverbesserung für Leiterdesigner dar, die bereits grafisch verwendeten Schematische Erfassung Software und speziell geschriebene Softwareprogramme zum Dokumentieren und Simulieren elektronische Schaltungen.
Die Designer von Verilog wollten eine Sprache mit einer ähnlichen Syntax wie der C Programmiersprache, was bereits im Ingenieurwesen weit verbreitet war Software-Entwicklung. Wie C ist Verilog Fallempfindlichkeit und hat eine grundlegende Präprozessor (Obwohl weniger raffiniert als das von ANSI C/C ++). Es ist Steuerfluss Schlüsselwörter (wenn/sonst, für, während, Fall, Fall usw.) sind gleichwertig und seine Vorrang ist mit C. syntaktischen Unterschieden kompatibel, umfassen: Erforderliche Bitbreiten für variable Deklarationen, Abgrenzung prozeduraler Blöcke (Verilog verwendet Beginn/Ende anstelle von lockigen Klammern {}) und viele andere geringfügige Unterschiede. Verilog verlangt, dass Variablen eine bestimmte Größe erhalten. In C werden diese Größen aus dem 'Typ' der Variablen abgeleitet (zum Beispiel kann ein Ganzzahltyp 8 Bit sein).
Ein Verilog -Design besteht aus a Hierarchie der Module. Module einkapseln Designhierarchieund kommunizieren Sie mit anderen Modulen über eine Reihe deklarierter Eingangs-, Ausgabe- und bidirektionaler Ports. Innen kann ein Modul eine beliebige Kombination der folgenden enthalten: Netto-/Variable -Deklarationen (Draht, Reg, Ganzzahl usw.). gleichzeitig und sequentiell Anweisungsblöckeund Fälle anderer Module (Sub-hierarchien). Sequentielle Anweisungen werden in einem Beginn/Endblock platziert und in sequentiellen Reihenfolge im Block ausgeführt. Die Blöcke selbst werden jedoch gleichzeitig ausgeführt, was Verilog a macht DataFlow -Sprache.
Verilogs Konzept von 'Wire' besteht aus beiden Signalwerten (4-Staaten: "1, 0, schwebend, undefiniert") und Signalstärken (stark, schwach usw.). Dieses System ermöglicht eine abstrakte Modellierung gemeinsamer Signallinien, wobei mehrere Quellen ein gemeinsames Netz treiben. Wenn ein Draht mehrere Treiber hat, wird der (lesbare) Wert des Kabels durch eine Funktion der Quellentreiber und deren Stärken aufgelöst.
Eine Untergruppe von Aussagen in der Verilog -Sprache sind synthetisierbar. Verilog -Module, die einem synthetisierbaren Codierungsstil, der als RTL bekannt ist, entspricht (Registerübertragungsstufe), kann physisch durch Synthesesoftware realisiert werden. Synthese -Software transformiert algorithmisch die (abstrakte) Verilog -Quelle in a Netzliste, eine logisch äquivalente Beschreibung, die nur aus elementaren logischen Primitiven (und, oder nicht, Flip-Flops usw.) besteht, die in einem bestimmten verfügbaren verfügbar sind FPGA oder VLSI Technologie. Weitere Manipulationen der Netzliste führen letztendlich zu einem Entwurf für die Strecke (wie a Fotomaske -Set für ein Asic oder ein Bitstream Datei für an FPGA).
Geschichte
Anfang
Verilog wurde von erstellt von Prabhu Goel, Phil Moorby, Chi-lai Huang und Douglas Warmke zwischen Ende 1983 und Anfang 1984.[3] Chi-Lai Huang hatte zuvor an einer Hardware-Beschreibung Lalsd gearbeitet, einer Sprache, die von Professor S.Y.H. Su für seine Doktorarbeit.[4] Der Rechtsinhaber für diesen Prozess war zum Zeitpunkt des Eigentums "automatisierte integrierte Designsysteme" (später umbenannt in Gateway Design Automatisierung 1985). Gateway -Design -Automatisierung wurde von erworben von Cadence -Designsysteme Im Jahr 1990 hat Cadence nun die vollen Eigentumsrechte an Gateways Verilog und dem Verilog-XL, dem HDL-Simulator, der zum De-facto-Standard werden würde (von Verilog Logiksimulatoren) für das nächste Jahrzehnt. Ursprünglich sollte Verilog nur Simulation beschreiben und zulassen; Die automatisierte Synthese von Teilmengen der Sprache zu physikalisch realisierbaren Strukturen (Gates usw.) wurde entwickelt, nachdem die Sprache weit verbreitete Verwendung erreicht hatte.
Verilog ist ein Portmanteau der Wörter "Überprüfung" und "Logik".[5]
Verilog-95
Mit dem zunehmenden Erfolg von VHDL Zu dieser Zeit beschloss Cadence, die Sprache für offen zu machen Standardisierung. Trittfrequenz übertragen Verilog in die öffentliche Domäne unter dem Open Verilog International (Ovi) (jetzt bekannt als Accellera) Organisation. Verilog wurde später vorgelegt IEEE und wurde IEEE Standard 1364-1995, allgemein als Verilog-95 bezeichnet.
Zur gleichen Zeitrahmen -Trittfrequenz initiierte die Schaffung von Verilog-a Setzen Sie die Standards der Standards hinter seinem analogen Simulator Gespenst. Verilog-a war niemals eine eigenständige Sprache und ist eine Untergruppe von Verilog-Ams das umfasste Verilog-95.
Verilog 2001
Die Erweiterungen an Verilog-95 wurden an IEEE zurückgelegt, um die Mängel zu decken, die Benutzer im ursprünglichen Verilog-Standard gefunden hatten. Diese Erweiterungen wurden IEEE Standard 1364-2001 bekannt als Verilog-2001.
Verilog-2001 ist ein erhebliches Upgrade von Verilog-95. Zunächst fügt es explizite Unterstützung für (2 -Komplement) signierte Netze und Variablen hinzu. Zuvor mussten die Codeautoren signierte Operationen mit unangenehmen Manipulationen auf Bit-Level ausführen (z. B. das Einbringungsbit einer einfachen 8-Bit-Addition erforderte eine explizite Beschreibung der Booleschen Algebra, um den korrekten Wert zu bestimmen). Die gleiche Funktion unter Verilog-2001 kann von einem der eingebauten Operatoren prägnanter beschrieben werden: +,-, /, *, >>>. Mit einem Erzeugungs-Endgenerate-Konstrukt (ähnlich wie VHDLs Generate-Endgenerate) kann Verilog-2001 die Instanz und Anweisung Instanziierung durch normale Entscheidungsoperatoren (Fall-IF-ELSE) kontrollieren. Verilog-2001 kann mit Generate-Endgenerate ein Array von Instanzen instanziieren, wobei die Kontrolle über die Konnektivität der einzelnen Instanzen kontrolliert wird. Die Datei -I/O wurde durch mehrere neue Systemaufgaben verbessert. Und schließlich wurden einige Syntax-Additionen eingeführt, um die Code-Lesbarkeit zu verbessern (z. B. immer @*, mit dem Namen Parameter Override, Funktions-/Task/Modul-Header-Deklaration).
Verilog-2001 ist die Version von Verilog, die von den meisten Werbespots unterstützt wird Eda Softwarepakete.
Verilog 2005
Nicht zu verwechseln mit Systemverilog, Verilog 2005 (IEEE Standard 1364-2005) besteht aus geringfügigen Korrekturen, Spezifikationen und einigen neuen Sprachmerkmalen (wie dem Schlüsselwort Uwire).
Ein separater Teil des Verilog -Standards, Verilog-Ams, Versuche, eine analoge und gemischte Signalmodellierung mit herkömmlichem Verilog zu integrieren.
Systemverilog
Das Aufkommen von Hardware -Überprüfungssprachen wie zum Beispiel Openveraund die Wahrnehmung E Sprache förderte die Entwicklung von Superlog von Co-Design Automation Inc (erworben von Synops). Die Grundlagen von Superlog und Vera wurden gespendet Accellera, was später zum IEEE Standard P1800-2005 wurde: Systemverilog.
Systemverilog ist a Superset von Verilog-2005 mit vielen neuen Funktionen und Funktionen zur Unterstützung der Entwurfsprüfung und der Designmodellierung. Ab 2009 wurden die SYSTEMVERILOG- und Verilog-Sprachstandards in Systemverilog 2009 (IEEE Standard 1800-2009) zusammengefasst. Die aktuelle Version ist IEEE Standard 1800-2017.[6]
Beispiel
Ein einfaches Beispiel von zwei Flip Flops folgt:
Modul Höchststufe(Uhr,zurücksetzen); Eingang Uhr; Eingang zurücksetzen; Regs Flop1; Regs Flop2; stets @ (Posedge zurücksetzen oder Posedge Uhr) wenn (zurücksetzen) Start Flop1 <= 0; Flop2 <= 1; Ende anders Start Flop1 <= Flop2; Flop2 <= Flop1; Ende Endmodule
Das <=
Der Betreiber in Verilog ist ein weiterer Aspekt, dass es sich um eine Hardware -Beschreibungssprache handelt, im Gegensatz zu einer normalen prozeduralen Sprache. Dies ist als "nicht blockierende" Aufgabe bekannt. Die Aktion wird erst nach der Ausführung des immer Blocks registriert. Dies bedeutet, dass die Reihenfolge der Zuordnungen irrelevant ist und das gleiche Ergebnis erzielt: Flop1 und Flop2 tauschen Werte auf jeder Uhr aus.
Der andere Zuordnungsbetreiber =
wird als Blockierungsaufgabe bezeichnet. Wann =
Die Zuordnung wird zum Zwecke der Logik verwendet, die Zielvariable sofort aktualisiert. Im obigen Beispiel hatten die Aussagen die verwendeten =
Blockierbetreiber statt blockieren <=
, Flop1 und Flop2 wären nicht getauscht worden. Stattdessen würde der Compiler wie bei der traditionellen Programmierung Flop1 einfach auf Flop2 festlegen (und anschließend die redundante Logik ignorieren, um FLOP2 gleich zu setzen wie Flop1).
Ein Beispiel Zähler Schaltung folgt:
Modul Div20x (RST, clk, cet, cep, zählen, TC); // Titel 'Divide-by-20-Zähler mit Aktivieren' ' // Aktivieren Sie CEP ist nur eine Uhr aktiviert // Aktivieren CET ist eine Uhr aktiviert und // Aktiviert die TC -Ausgabe // ein Zähler mit der Verilog -Sprache Parameter Größe = 5; Parameter Länge = 20; Eingang RST; // Diese Eingänge/Ausgänge stellen dar Eingang clk; // Verbindungen zum Modul. Eingang cet; Eingang cep; Ausgang [Größe-1:0] zählen; Ausgang TC; Regs [Größe-1:0] zählen; // Signale zugewiesen // Innerhalb eines immer // (oder anfänglich) Block // muss vom Typ Regent sein Kabel TC; // Andere Signale sind vom Typ Draht // Die unten stehende Anweisung ist eine Parallele // Ausführungsanweisung, dass // führt jederzeit die Signale aus // RST- oder CLK -Übergang von niedrig zu hoch stets @ (Posedge clk oder Posedge RST) wenn (RST) // Dies führt zu einem Zurücksetzen des CNTR zählen <= {Größe{1'B0}}; anders wenn (cet && cep) // Aktiviert beide true Start wenn (zählen == Länge-1) zählen <= {Größe{1'B0}}; anders zählen <= zählen + 1'B1; Ende // Der Wert von TC wird kontinuierlich zugewiesen // Der Wert des Ausdrucks zuordnen TC = (cet && (zählen == Länge-1)); Endmodule
Ein Beispiel für Verzögerungen:
... Regs a, b, c, d; Kabel e; ... stets @(b oder e) Start a = b & e; b = a | b; #5 c = b; d = #6 c ^ e; Ende
Das stets Die obige Klausel veranschaulicht die andere Art der Verwendungsmethode, d. H. Sie wird ausgeführt, wenn eines der Entitäten in der Liste (die b oder e) Änderungen. Wenn sich einer dieser ändert, a wird sofort einen neuen Wert zugewiesen und aufgrund der Blockierungsaufgabe, b wird danach ein neuer Wert zugewiesen (unter Berücksichtigung des neuen Wertes von a). Nach einer Verzögerung von 5 Zeiteinheiten, c wird der Wert von zugewiesen b und der Wert von C ^ e ist in einem unsichtbaren Laden versteckt. Dann nach 6 weiteren Zeiteinheiten, d wird der Wert zugewiesen, der versteckt war.
Signale, die innerhalb eines Prozesses (ein Anfang oder immer Block) angetrieben werden, müssen vom Typ sein Regs. Signale, die von außen angetrieben werden, müssen vom Typ sein Kabel. Das Schlüsselwort Regs impliziert nicht unbedingt ein Hardwareregister.
Definition von Konstanten
Die Definition von Konstanten in Verilog unterstützt die Zugabe eines Breitenparameters. Die grundlegende Syntax ist:
<Breite in Bits> '<Basisbrief> <Nummer>
Beispiele:
- 12'H123 - Hexadezimal 123 (mit 12 Bits)
- 20'D44 - Dezimaler 44 (mit 20 Bits - 0 Erweiterung ist automatisch)
- 4'B1010 - Binär 1010 (mit 4 Bits)
- 6'O77 - Oktal 77 (mit 6 Bit)
Synthetisierbare Konstrukte
Verilog gilt allgemein als HDL (Hardware -Beschreibung Sprache). In Verilog gibt es mehrere Aussagen, die in realer Hardware kein Analogon haben, z. $ display. Folglich kann ein Großteil der Sprache nicht zur Beschreibung von Hardware verwendet werden. Dies scheint zu implizieren, dass die Definition der Verilog -Sprache im Allgemeinen ordnungsgemäß neu lädiert. Die hier vorgestellten Beispiele sind jedoch die klassische (und begrenzte) Teilmenge der Sprache, die eine direkte Zuordnung zu realen Toren hat.
// mux Beispiele - drei Möglichkeiten, dasselbe zu tun. // Das erste Beispiel verwendet eine kontinuierliche Zuordnung Kabel aus; zuordnen aus = Sel ? a : b; // Das zweite Beispiel verwendet eine Prozedur // um dasselbe zu erreichen. Regs aus; stets @(a oder b oder Sel) Start Fall(Sel) 1'B0: aus = b; 1'B1: aus = a; Endgepäck Ende // Schließlich - Sie können verwenden, wenn/sonst in a // Verfahrensstruktur. Regs aus; stets @(a oder b oder Sel) wenn (Sel) aus = a; anders aus = b;
Die nächste interessante Struktur ist a transparenter Verriegelung; Es wird den Eingang an den Ausgang übergeben, wenn das Gate-Signal für "Pass-Through" eingestellt ist, und erfasst den Eingang und speichert es beim Übergang des Gate-Signals in "Halten". Der Ausgang bleibt unabhängig vom Eingangssignal stabil, während das Tor auf "Halten" eingestellt ist. In dem Beispiel unterhalb des "Pass-Through" -Pegels des Tores würde der Wert der IF-Klausel wahr sind, d. H. Gate = 1. Dies wird laut "Wenn das Gate wahr ist, wird der DIN kontinuierlich dem Latch_out zugeführt." Sobald die IF -Klausel falsch ist, bleibt der letzte Wert bei Latch_out und ist unabhängig vom Wert von DIN.
// Beispiel für ein transparentes Verriegelungsbeispiel Regs latch_out; stets @(Tor oder Lärm) wenn(Tor) latch_out = Lärm; // den Staat durchlaufen // Beachten Sie, dass die sonst hier nicht benötigt wird. Die Variable // latch_out folgt dem Wert von DIN, während Gate ist // hoch. Wenn Gate niedrig geht, bleibt Latch_out konstant.
Das Flip Flops ist die nächste bedeutende Vorlage; In Verilog ist der D-Flop das einfachste und kann als:
Regs q; stets @(Posedge clk) q <= d;
Das Wesentliche ist im Beispiel die Verwendung der nicht blockierenden Aufgabe. Ein grundlegender Faustregel ist zu verwenden <= Wenn es ein gibt Posedge oder Negedge Aussage innerhalb der Immer -Klausel.
Eine Variante des D-Flops ist eine mit einem asynchronen Reset; Es gibt eine Konvention, dass der Reset -Status die erste IN -Klausel innerhalb der Erklärung sein wird.
Regs q; stets @(Posedge clk oder Posedge zurücksetzen) wenn(zurücksetzen) q <= 0; anders q <= d;
Die nächste Variante umfasst sowohl einen asynchronen Reset als auch einen asynchronen Set -Zustand. Wiederum kommt die Konvention ins Spiel, d. H. Dem Rücksetzbegriff folgt der festgelegte Begriff.
Regs q; stets @(Posedge clk oder Posedge zurücksetzen oder Posedge einstellen) wenn(zurücksetzen) q <= 0; anders wenn(einstellen) q <= 1; anders q <= d;
Hinweis: Wenn dieses Modell zum Modellieren eines Set/Reset -Flip -Flops verwendet wird, können Simulationsfehler hervorgehen. Betrachten Sie die folgende Testfolge von Ereignissen. 1) Reset GEHTE 2) CLK GEHT 3) Set hoch Nehmen Sie keine Einrichtung an und halten Sie Verstöße.
In diesem Beispiel würde die immer @ @ -Anweisung zuerst ausgeführt, wenn die steigende Kante des Resets auftritt, was Q zu einem Wert von 0. Wenn der nächste Mal der immer ausgeführte Always -Block die steigende Kante von CLK ist, die q wieder auf einen Wert von halten würde 0. Der immer Block wird dann ausgeführt, wenn die Menge hoch ist, da das Reset von hohen Kräften q zu bleiben. Diese Bedingung kann je nach tatsächlicher Flip -Flop korrekt sein oder nicht. Dies ist jedoch nicht das Hauptproblem bei diesem Modell. Beachten Sie, dass das Zurücksetzen dieses Set noch hoch ist. In einem echten Flip -Flop wird dies dazu führen, dass die Ausgabe zu einem 1. in diesem Modell nicht auftritt, da er jedoch durch steigende Set- und Zurücksetzenkanten ausgelöst wird - nicht durch Stufen. Ein anderer Ansatz kann für Set/Reset -Flip -Flops erforderlich sein.
Die endgültige Grundvariante implementiert einen D-Flop mit einem Mux, der ihre Eingabe füttert. Der Mux hat ein D-Input und Feedback vom Flop selbst. Dies ermöglicht eine Gated -Lastfunktion.
// Grundstruktur mit einem expliziten Rückkopplungsweg stets @(Posedge clk) wenn(Tor) q <= d; anders q <= q; // explizite Feedback -Pfad // Die häufigere Struktur geht davon aus, dass das Feedback vorhanden ist // Dies ist eine sichere Annahme, da dies so ist // Hardware Compiler interpretiert es. Diese Struktur // Sieht ähnlich wie ein Riegel aus. Die Unterschiede sind die // '' '@(posedge clk)' 'und das nicht blockierende' '' <= '' '' ' // stets @(Posedge clk) wenn(Tor) q <= d; // Das "else" Mux ist "impliziert"
Beachten Sie, dass in dieser Beschreibung keine "ersten" Blöcke erwähnt werden. Es gibt eine Spaltung zwischen FPGA- und ASIC -Synthesewerkzeugen in dieser Struktur. FPGA -Tools erlauben Anfangsblöcke, bei denen Reg -Werte festgelegt werden, anstatt ein "Reset" -Signal zu verwenden. ASIC -Synthese -Tools unterstützen eine solche Aussage nicht. Der Grund dafür ist, dass der Anfangszustand eines FPGA in die Speichertabellen der FPGA heruntergeladen wird. Ein ASIC ist eine tatsächliche Hardware -Implementierung.
Anfang und immer
Es gibt zwei getrennte Möglichkeiten, einen Verilog -Prozess zu erklären. Dies sind die stets und die Initial Schlüsselwörter. Das stets Das Schlüsselwort zeigt einen freien Prozess an. Das Initial Das Schlüsselwort zeigt an, dass ein Prozess genau einmal ausgeführt wird. Beide Konstrukte beginnen die Ausführung zum Simulator -Zeitpunkt 0 und beide werden bis zum Ende des Blocks ausgeführt. Einmal ein stets Block hat sein Ende erreicht, er wird (wieder) verschoben. Es ist ein weit verbreitetes Missverständnis zu glauben, dass ein Anfangsblock vor einem immer Block ausgeführt wird. In der Tat ist es besser, an das zu denken Initial-block als Spezialfall der stets-block, eine, die nach Abschluss zum ersten Mal endet.
// Beispiele: Initial Start a = 1; // ZulEG A zum Zeitpunkt 0 einen Wert zuweisen #1; // warte 1 Zeiteinheit b = a; // Weisen Sie den Wert von Reg A zu Reg B zu Ende stets @(a oder b) // Führen Sie den Prozess jederzeit aus, wenn A oder B ändern Start wenn (a) c = b; anders d = ~b; Ende // mit diesem Block fertig und nun nach oben zurückkehren (d. H. Die @ Event-Control) stets @(Posedge a)// laufen, wenn Reg a eine niedrige bis hohe Veränderung hat a <= b;
Dies sind die klassischen Verwendungen für diese beiden Schlüsselwörter, aber es gibt zwei wichtige zusätzliche Verwendungen. Das häufigste von diesen ist ein stets Schlüsselwort ohne das @(...) Sensitivitätsliste. Es ist möglich, immer wie unten gezeigt zu verwenden:
stets Start // beginnt immer zum Zeitpunkt 0 auszuführen und hört nie auf clk = 0; // CLK auf 0 einstellen #1; // Warte auf 1 Zeiteinheit clk = 1; // CLK auf 1 einstellen #1; // warte 1 Zeiteinheit Ende // führt weiter aus - fahren Sie also an der Spitze des Beginns fort
Das stets Schlüsselwort wirkt ähnlich wie das C -Sprachkonstrukt while (1) {..} in dem Sinne, dass es für immer ausgeführt wird.
Die andere interessante Ausnahme ist die Verwendung des Initial Schlüsselwort mit der Hinzufügung des bis in alle Ewigkeit Stichwort.
Das folgende Beispiel ist funktionell identisch mit dem stets Beispiel oben.
Initial bis in alle Ewigkeit // Beginnen Sie zur Zeit 0 und wiederholen Sie den Beginn/Ende für immer Start clk = 0; // CLK auf 0 einstellen #1; // Warte auf 1 Zeiteinheit clk = 1; // CLK auf 1 einstellen #1; // warte 1 Zeiteinheit Ende
Gabel/Join
Das Gabel/Join Paar werden von Verilog verwendet, um parallele Prozesse zu erstellen. Alle Aussagen (oder Blöcke) zwischen einem Fork/Join -Paar beginnen die Ausführung gleichzeitig, wenn der Ausführungsfluss auf das Treffer auf die Gabel. Die Ausführung wird nach dem fortgesetzt beitreten Nach Abschluss der längsten laufenden Anweisung oder Block zwischen den Gabel und beitreten.
Initial Gabel $ write("EIN"); // Drucken char a $ write("B"); // Drucken char b Start #1; // warte 1 Zeiteinheit $ write("C"); // drucken char c Ende beitreten
Die Art und Weise, wie die oben genannten geschrieben ist, ist es möglich, entweder die Sequenzen "ABC" oder "BAC" auszudrucken. Die Reihenfolge der Simulation zwischen dem ersten $ write und dem zweiten $ write hängt von der Simulator -Implementierung ab und kann vom Simulator absichtlich randomisiert werden. Dies ermöglicht es der Simulation, sowohl zufällige Rassenbedingungen als auch ein absichtlich nicht deterministisches Verhalten zu enthalten.
Beachten Sie, dass VHDL mehrere Prozesse wie Verilog nicht dynamisch hervorbringen kann.[7]
Rennbedingungen
Die Ausführungsreihenfolge ist innerhalb von Verilog nicht immer garantiert. Dies kann am besten durch ein klassisches Beispiel veranschaulicht werden. Betrachten Sie den Code -Snippet unten:
Initial a = 0; Initial b = a; Initial Start #1; $ display("Wert a =%d Wert von b =%d",a,b); Ende
Was wird für die Werte von A und B ausgedruckt? Abhängig von der Reihenfolge der Ausführung der Anfangsblöcke kann es Null und Null oder abwechselnd Null und einen anderen willkürlichen nicht initialisierten Wert sein. Die $ Display -Anweisung wird aufgrund der Nr. 1 -Verzögerung immer ausgeführt, nachdem beide Zuordnungsblöcke abgeschlossen sind.
Betreiber
Hinweis: Diese Operatoren sind nicht in der Reihenfolge der Vorrang gezeigt.
Operatortyp | Operatorsymbole | Operation durchgeführt |
---|---|---|
Bitweise | ~ | Bitweise nicht (1 -Komplement) |
& | Bitweise und | |
| | Bitweise oder | |
^ | Bitweise xor | |
~ ^ oder ^ ~ | Bitwise Xnor | |
Logisch | ! | NICHT |
&& | UND | |
|| | ODER | |
Die Ermäßigung | & | Reduktion und |
~ & | Reduktion NAND | |
| | Reduktion oder | |
~ | | Reduktion Nor | |
^ | Reduktion xor | |
~ ^ oder ^ ~ | Reduktion xnor | |
Arithmetik | + | Zusatz |
- | Subtraktion | |
- | 2's Komplement | |
* | Multiplikation | |
/ | Aufteilung | |
** | Exponentiation (*Verilog-2001) | |
Relational | > | Größer als |
< | Weniger als | |
> = | Größer als oder gleich wie | |
<= | Weniger als oder gleich | |
== | Logische Gleichheit (Bit-Wert 1'BX wird aus dem Vergleich entfernt) | |
! = | Logische Ungleichheit (Bit-Wert 1'BX wird aus dem Vergleich entfernt) | |
=== | 4-Bundesstaat Logische Gleichheit (Bit-Wert 1'BX wird als wörtlich angesehen) | |
! == | 4-Bundesstaat Logische Ungleichheit (Bit-Wert 1'BX wird als wörtlich angesehen) | |
Wechsel | >> | Logische rechte Verschiebung |
<< | Logische linke Verschiebung | |
>>> | Arithmetische rechte Verschiebung (*Verilog-2001) | |
<<< | Arithmetische linke Verschiebung (*Verilog-2001) | |
Verkettung | {,} | Verkettung |
Reproduzieren | {n {m}} | Replizieren Sie den Wert m für n -mal |
Bedingt | ? : | Bedingt |
Vierwertige Logik
Der IEEE 1364 Standard definiert a vierwertige Logik mit vier Staaten: 0, 1, z (hohe Impedanz) und x (unbekannter logischer Wert). Für das konkurrierende VHDL besteht ein spezieller Standard für eine mehrwertige Logik als IEEE 1164 mit neun Ebenen.[8]
Systemaufgaben
Systemaufgaben stehen zur Verfügung, um einfache E/A- und verschiedene Entwurfsmessfunktionen während der Simulation zu verarbeiten. Alle Systemaufgaben sind vorangestellt $ Um sie von Benutzeraufgaben und -funktionen zu unterscheiden. Dieser Abschnitt enthält eine kurze Liste der am häufigsten verwendeten Aufgaben. Es ist keineswegs eine umfassende Liste.
- $ display - Drucken Sie, um eine Zeile zu schirmen, gefolgt von einer automatischen Newline.
- $ write - drucken, um eine Zeile ohne Newline zu schützen.
- $ SWRITE - Drucken Sie eine Zeile ohne Newline, um eine Zeile zu variablen.
- $ SSCANF-Lesen Sie aus der Variablen eine formatspezifizierte Zeichenfolge. (*Verilog-2001)
- $ fopen - Öffnen Sie einen Handle für eine Datei (lesen oder schreiben)
- $ fDisplay - Drucken Sie eine Zeile aus einer Datei, gefolgt von einer automatischen Newline.
- $ fwrite - Drucken Sie, um eine Zeile ohne Newline einzureichen.
- $ fSCANF-Lesen Sie aus der Datei eine formatspezifizierte Zeichenfolge. (*Verilog-2001)
- $ fcLose - Schließen und veröffentlichen Sie ein offenes Dateihandle.
- $ readMemh - Hex -Dateiinhalte in ein Speicherarray lesen.
- $ readMemb - Lesen Sie Binärdateiinhalte in ein Speicherarray.
- $ monitor - Drucken Sie alle aufgelisteten Variablen aus, wenn ein Änderungswert.
- $ Zeit - Wert der aktuellen Simulationszeit.
- $ DUPPFILE - deklarieren Sie die VCD (Value Change Dump) Formatausgabedatei Name.
- $ DUPPVARS - Schalten Sie die Variablen ein und lassen Sie sie ab.
- $ dumpports-Schalten Sie die Variablen im erweiterten VCD-Format ein und lassen Sie die Variablen ab.
- $ random - einen zufälligen Wert zurückgeben.
Programmsprachschnittstelle (PLI)
Der PLI bietet einem Programmierer einen Mechanismus, um die Kontrolle von Verilog auf eine in C -Sprache geschriebene Programmfunktion zu übertragen. Es ist offiziell veraltet von IEEE STD 1364-2005 zugunsten des neueren Verilog -Verfahrensschnittstelle, was den PLI vollständig ersetzt.
Mit dem PLI (jetzt VPI) kann Verilog mit anderen in der C -Sprache geschriebenen Programmen zusammenarbeiten Testgurte, Anweisungssatz Simulatoren von a Mikrocontroller, Debugger, usw. Zum Beispiel liefert es die C -Funktionen tf_putlongp ()
und tf_getlongp ()
die verwendet werden, um das Argument der aktuellen Verilog -Aufgabe oder -Funktion zu schreiben und zu lesen.
Simulationssoftware
Informationen zu Verilog -Simulatoren finden Sie in der Liste der Verilog -Simulatoren.
Siehe auch
Zusätzliches Material
- Liste der Verilog -Simulatoren
- Wellenform Viewer
- Systemverilog Direct Programming Interface (DPI)
- Verilog Procedural Interface (VPI)
Ähnliche Sprachen
- VHDL
- Systemc - C ++ Bibliothek bereitzustellen HDL ereignisgesteuerte Semantik
- Systemverilog
- Openvera
- E (Überprüfungssprache)
- Eigenschaftspezifikationssprache
- Meißel, eine Open-Source-Sprache, die auf Scala aufgebaut ist
Verilog -Generatoren
Verweise
- ^ Nielsen AA, Der BS, Shin J, Vaidyanathan P, Paralanov V, Strychalski EA, Ross D, Densmore D, Voigt CA (2016). "Genetische Schaltungsdesign -Automatisierung". Wissenschaft. 352 (6281): AAC7341. doi:10.1126/science.aac7341. PMID 27034378.
- ^ 1800-2VHHU017-IEEE-Standard für Systemverilog-Unfildes Hardwaredesign, Spezifikation und Überprüfungssprache
- ^ "Verilogs Erfinder nabs Edas Kaufman -Preis". EE mal. 7. November 2005.
- ^ Huang, Chi-Lai; Su, S.Y.H. "Ansätze für computergestütztes Logiksystemdesign mithilfe der Hardware-Beschreibung Sprache". Proceedings of International Computer Symposium 1980, Taipeh, Taiwan, Dezember 1980. S. 772–79o. OCLC 696254754.
- ^ "Orale Geschichte von Philip Raymond" Phil "Moorby" (PDF). Computergeschichte Museum. 22. April 2013. S. 23–25.
- ^ 1800-2017-IEEE-Standard für Systemverilog-Unifiedes Hardwaredesign, Spezifikation und Überprüfungssprache
- ^ Cummings, Clifford E. (2003). "Systemverilog - ist das die Verschmelzung von Verilog & VHDL?" (PDF). Snug Boston 2003.
- ^ Miller, D. Michael; Thornton, Mitchell A. (2008). Mehrfach geschätzte Logik: Konzepte und Darstellungen. Synthesevorlesungen über digitale Schaltkreise und Systeme. Vol. 12. Morgan & Claypool. ISBN 978-1-59829-190-2.
- Anmerkungen
- 1364-2005-IEEE-Standard für Verilog Hardware Beschreibung Sprache. 2006. doi:10.1109/IEEESTD.2006.99495. ISBN 0-7381-4850-4.
- 1364-2001-IEEE Standard Verilog Hardware Beschreibung Sprache. 2001. doi:10.1109/IEEESTD.2001.93352. ISBN 0-7381-2826-0.
- 61691-4-2004-IEC/IEEE-Verhaltenssprachen-Teil 4: Verilog-Hardware Beschreibung Sprache (Übernahme von IEEE STD 1364-2001). 2004. doi:10.1109/IEEESTD.2004.95753. ISBN 2-8318-7675-3.
- 1364-1995-IEEE Standard Hardware Beschreibung Sprache basierend auf der Hardware-Beschreibung der Verilog (R). 1996. doi:10.1109/ieeestd.1996.81542. ISBN 978-0-7381-3065-1.
- Thomas, Donald E.; Moorby, Phillip R. (2013). Die Verilog® -Hardware -Beschreibung Sprache (3. Aufl.). Springer. ISBN 978-1475724646.
- Cornell ECE576 Kurs zur Veranschaulichung der Synthesekonstrukte
- Bergeron, Janick (2012). Schreiben von Testbenben: Funktionale Überprüfung von HDL -Modellen (2. Aufl.). Springer. ISBN 978-1-4615-0302-6. (Die HDL TestBench -Bibel)
Externe Links
Standardentwicklung
- IEEE Standard für Verilog Hardware Beschreibung Sprache. doi:10.1109/IEEESTD.2006.99495. ISBN 978-0-7381-4851-9. - Der offizielle Standard für Verilog 2005 (nicht frei).
- IEEE P1364 - Arbeitsgruppe für Verilog (inaktiv).
- IEEE P1800 - Arbeitsgruppe für Systemverilog (ersetzt oben).
- Verilog -Syntax - Eine Beschreibung der Syntax in Backus-naur-Form. Dies geht vor dem IEEE-1364-Standard.
- Verilog-Ams – Accellera gemischte Signalverlängerungen zu Verilog
Sprachverlängerungen
- Verilog Autos -Ein Open-Source-Meta-Unternehmen, das von der Branchen-IP verwendet wird, um den Verilog-Code aufrechtzuerhalten.