Verilog

Im Halbleiter und der elektronischen Designindustrie ist Verilog eine Hardware-Beschreibungssprache (HDL), die verwendet ist, um elektronische Systeme zu modellieren. Verilog HDL, um mit VHDL (eine konkurrierende Sprache) nicht verwirrt zu sein, wird meistens im Design, der Überprüfung und der Durchführung von Digitallogikchips am Niveau der Register-Übertragung der Abstraktion verwendet. Es wird auch in der Überprüfung des Analogons und der Mischsignal-Stromkreise verwendet.

Übersicht

Hardware-Beschreibungssprachen wie Verilog unterscheiden sich von Softwareprogrammiersprachen, weil sie Weisen einschließen, die Fortpflanzung der Zeit und Signalabhängigkeiten (Empfindlichkeit) zu beschreiben. Es gibt zwei Anweisungsmaschinenbediener, eine blockierende Anweisung (=), und ein blockierungsfreier (

Verilog-2001 ist der dominierende Geschmack nach von der Mehrheit von kommerziellen EDA Softwarepaketen unterstütztem Verilog.

Verilog 2005

Um mit SystemVerilog, Verilog nicht verwirrt zu sein, besteht 2005 (IEEE Standard 1364-2005) aus geringen Korrekturen, Spekulationserläuterungen und einigen neuen Spracheigenschaften (wie das uwire Schlüsselwort).

Ein getrennter Teil des Standards von Verilog, Verilog-AMS, versucht, Analogon und gemischtes Signal zu integrieren, das mit traditionellem Verilog modelliert.

SystemVerilog

SystemVerilog ist eine Obermenge von Verilog-2005, mit vielen neuen Eigenschaften und Fähigkeiten, Designüberprüfung und dem Designmodellieren zu helfen. Bezüglich 2009 wurden die Sprachstandards von SystemVerilog und Verilog in SystemVerilog 2009 (IEEE Standard 1800-2009) verschmolzen.

Das Advent von Hardware-Überprüfungssprachen wie OpenVera und die e Sprache von Verisity hat die Entwicklung des Superklotzes durch Co-Design Automation Inc. Co-Design Automation Inc gefördert wurde später von Synopsys gekauft. Die Fundamente des Superklotzes und Veras wurden Accellera geschenkt, der später der IEEE normale P1800-2005 geworden ist: SystemVerilog.

Beispiel

Ein hallo Weltprogramm sieht wie das aus:

wichtiges Modul;

Initiale

beginnen Sie

$display ("Hallo Welt!");

$finish;

Ende

endmodule

</Quelle>

Ein einfaches Beispiel von zwei Zehensandalen folgt:

Modul auf höchster Ebene (Uhr, Rücksetzen);

Eingangsuhr;

Eingang neu gefasst;

reg flop1;

reg flop2;

immer (posedge Rücksetzen oder posedge Uhr)

wenn (neu gefasst)

,

beginnen Sie

flop1

"

Modul Div20x (rst, clk, cet, Steinpilz, Zählung, tc);

//TITEL 'Divide-20 Schalter damit ermöglicht'

//ermöglichen Sie STEINPILZ ist eine Uhr ermöglichen nur

//ermöglichen Sie CET ist eine Uhr ermöglichen und

//ermöglicht die TC Produktion

//ein Schalter mit der Sprache von Verilog

Parameter-Größe = 5;

Parameter-Länge = 20;

Eingang rst;//vertreten Diese Eingänge/Produktionen

Eingang clk;//Verbindungen zum Modul.

Eingang cet;

Eingangssteinpilz;

Produktion [Größe-1:0] Zählung;

Produktion tc;

reg [Größe-1:0] Zählung;//haben Signale zugeteilt

//innerhalb immer

//(oder Initiale) blockieren

//muss des Typs reg sein

Leitung tc;//sind Andere Signale Typ Leitung

//Immer ist Behauptung unten eine Parallele

//Ausführungsbehauptung das

//führt jede Zeit die Signale durch

//rst oder clk Übergang von niedrig bis hohen

immer (posedge clk oder posedge rst)

wenn (rst)//Das Rücksetzen des cntr verursacht

Zählung

Ein Beispiel von Verzögerungen:

...

reg a, b, c, d;

Leitung e;

...

immer (b oder e)

beginnen Sie

a = b & e;

b = | b;

#5 c = b;

d = #6 c ^ e;

Ende

</Quelle>

Immer illustriert Klausel oben den anderen Typ der Methode des Gebrauches, d. h. es führt durch, wann auch immer sich einige der Entitäten in der Liste (der b oder e) ändert. Als eine dieser Änderungen, sofort zu sein, einen neuen Wert, und wegen der blockierenden Anweisung zugeteilt hat, wird b ein neuer Wert später zugeteilt (den neuen Wert von a in Betracht ziehend). Nach einer Verzögerung von 5mal Einheiten wird c zugeteilt der Wert von b und der Wert von c ^ e werden in einem unsichtbaren Laden versteckt. Dann nach noch 6 Zeiteinheiten wird d der Wert zugeteilt, der versteckt wurde.

Signale, die aus einem Prozess gesteuert werden (eine Initiale oder blockieren immer), müssen vom Typ reg sein. Signale, die von der Außenseite eines Prozesses gesteuert werden, müssen der Typ-Leitung sein. Das Schlüsselwort reg bezieht kein Hardware-Register notwendigerweise ein.

Definition von Konstanten

Die Definition von Konstanten in Verilog unterstützt die Hinzufügung eines Breite-Parameters. Die grundlegende Syntax ist:

Beispiele:
  • 12'h123 - Hexadecimal 123 (das Verwenden von 12 Bit)
  • 20'd44 - Dezimale 44 (ist das Verwenden der 20-Bit-0erweiterung automatisch)
  • 4'b1010 - Binäre 1010 (das Verwenden von 4 Bit)
  • 6'o77 - Oktal-77 (das Verwenden von 6 Bit)

Konstruktionen von Synthesizeable

Es gibt mehrere Behauptungen in Verilog, die kein Analogon in der echten Hardware, z.B $display haben. Folglich kann viel von der Sprache nicht verwendet werden, um Hardware zu beschreiben. Die Beispiele präsentiert hier sind die klassische Teilmenge der Sprache, die hat zu echten Toren direkt kartografisch darzustellen.

//Beispiele von Mux - Drei Weisen dasselbe zu machen.

//Das erste Beispiel verwendet dauernde Anweisung

Leitung;

teilen Sie = sel zu? a: b;

//das zweite Beispiel verwendet ein Verfahren

//dasselbe Ding zu vollbringen.

reg;

immer (a oder b oder sel)

beginnen Sie

Fall (sel)

1'b0: = b;

1'b1: = a;

endcase

Ende

//Schließlich - können Sie wenn/sonst in einem verwenden

//Verfahrensstruktur.

reg;immer (a oder b oder sel)

wenn (sel)

= a;

sonst

= b;

</Quelle>

Die folgende interessante Struktur ist eine durchsichtige Klinke; es wird den Eingang zur Produktion passieren, wenn das Tor-Signal für "den Durchgang" gesetzt wird, und den Eingang gewinnt und es nach dem Übergang des Tor-Signals versorgt "zu halten". Die Produktion wird stabil unabhängig vom Eingangssignal bleiben, während das Tor veranlasst wird "zu halten". Im Beispiel unter dem "Durchgang"-Niveau des Tors würde sein, wenn der Wert, wenn Klausel, d. h. Tor = 1 wahr ist. Das wird gelesen, "wenn Tor wahr ist, wird der Lärm zu latch_out unaufhörlich gefüttert." Einmal, wenn Klausel falsch ist, wird der letzte Wert an latch_out bleiben und ist des Werts des Lärms unabhängig.

//Durchsichtiges Klinke-Beispiel

reg;

immer (Tor oder Lärm)

wenn (Tor)

= Lärm;//Führen Staat Durch

//Bemerken Sie, dass sonst hier nicht erforderlich ist. Die Variable

//wird dem Wert des Lärms folgen, während Tor hoch ist.

//Wenn Tor niedrig geht, wird unveränderlich bleiben.

</Quelle>

Die Zehensandale ist die folgende bedeutende Schablone; in Verilog ist der D-Misserfolg am einfachsten, und es kann als modelliert werden:

reg q;

immer (posedge clk)

q

Das bedeutende Ding, im Beispiel zu bemerken, ist der Gebrauch der blockierungsfreien Anweisung. Eine Grundregel des Daumens ist zu verwenden

reg q;

immer (posedge clk oder Posedge-Rücksetzen)

wenn (neu gefasst)

,

q

Die folgende Variante schließt sowohl eines asynchronen Rücksetzens als auch asynchroner Satz-Bedingung ein; wieder tritt die Tagung in Spiel ein, d. h. dem Rücksetzen-Begriff wird vom Satz-Begriff gefolgt.

reg q;

immer (posedge clk oder Posedge-Rücksetzen oder Posedge-Satz)

wenn (neu gefasst)

,

q

Zeichen: Wenn dieses Modell verwendet wird, um einen Flip-Misserfolg des Satzes/Rücksetzens dann zu modellieren, können Simulierungsfehler resultieren. Denken Sie die folgende Testfolge von Ereignissen. 1) geht Rücksetzen hoch 2) clk geht hoch 3) Satz geht hoch 4) clk geht hoch wieder 5) Rücksetzen geht niedrig gefolgt von 6) dem Satz, der niedrig geht. Nehmen Sie keine Einstellung an und halten Sie Übertretungen.

In diesem Beispiel immer würde Behauptung zuerst durchführen, wenn der steigende Rand des Rücksetzens vorkommt, der q zu einem Wert von 0 legen würde. Das nächste Mal immer führt Block durch würde der steigende Rand von clk sein, der wieder q an einem Wert von 0 behalten würde. Immer führt Block dann durch, wenn gesetzt hoch der geht, weil neu gefasst hohe Kräfte q ist, um an 0 zu bleiben. Diese Bedingung kann oder kann abhängig vom wirklichen Flip-Misserfolg nicht richtig sein. Jedoch ist das nicht das Hauptproblem mit diesem Modell. Bemerken Sie dass, wenn neu gefasst niedrig geht, dass Satz noch hoch ist. In einem echten Flip-Misserfolg wird das die Produktion veranlassen, zu 1 zu gehen. Jedoch in diesem Modell wird es nicht vorkommen, weil immer Block durch steigende Ränder des Satzes ausgelöst und - nicht Niveaus neu gefasst wird. Eine verschiedene Annäherung kann für Flip-Misserfolge des Satzes/Rücksetzens notwendig sein.

Die grundlegende Endvariante ist diejenige, die einen D-Misserfolg mit einem mux Fütterung seines Eingangs durchführt. Der mux hat einen D-Eingang und Feed-Back vom Misserfolg selbst. Das erlaubt eine Gated-Lastfunktion.

//Grundlegende Struktur mit einem AUSFÜHRLICHEN Feed-Back-Pfad

immer (posedge clk)

wenn (Tor)

q

Bemerken Sie, dass es keine "anfänglichen" in dieser Beschreibung erwähnten Blöcke gibt. Es gibt einen Spalt zwischen FPGA und ASIC Synthese-Werkzeugen auf dieser Struktur. FPGA Werkzeuge erlauben anfängliche Blöcke, wo Reg-Werte gegründet werden, anstatt ein "Rücksetzen"-Signal zu verwenden. ASIC Synthese-Werkzeuge unterstützen solch eine Behauptung nicht. Der Grund besteht darin, dass ein anfänglicher Staat eines FPGA etwas ist, was in die Speichertische des FPGA heruntergeladen wird. Ein ASIC ist eine wirkliche Hardware-Durchführung.

Initiale und immer

Es gibt zwei getrennte Weisen, einen Prozess von Verilog zu erklären. Diese sind immer und die anfänglichen Schlüsselwörter. Immer zeigt Schlüsselwort einen freischwingenden Prozess an. Das anfängliche Schlüsselwort zeigt an, dass ein Prozess genau einmal durchführt. Beide Konstruktionen beginnen Ausführung in der Simulator-Zeit 0, und beide führen bis zum Ende des Blocks durch. Einmal immer hat Block sein Ende erreicht, es ist (wieder) wiedervorgesehen. Es ist ein häufiger Irrtum, um zu glauben, dass ein anfänglicher Block vor immer Block durchführen wird. Tatsächlich ist es besser, an den anfänglichen Block als ein spezieller Fall des Immer-Blocks, derjenige zu denken, der endet, nachdem es zum ersten Mal vollendet.

//Beispiele:

Initiale

beginnen Sie

a = 1;//Teilen einen Wert reg in der Zeit 0 Zu

#1;//Warten 1mal auf Einheit

b = a;//Teilen den Wert von reg zu reg b Zu

Ende

immer (a oder b)//Jede Zeit a oder B-ÄNDERUNG, geführt der Prozess

beginnen Sie

wenn (ein)

c = b;

sonst

d = ~b;

enden Sie//Getan mit diesem Block, kehren Sie jetzt zur Spitze (d. h. Ereignissteuerung) zurück

immer (posedge a)//Lauf wann auch immer reg ein Haben eines niedrigen zur hohen Änderung

a

Das ist der klassische Gebrauch für diese zwei Schlüsselwörter, aber es gibt zwei bedeutenden zusätzlichen Gebrauch. Der allgemeinste von diesen ist immer Schlüsselwort ohne (...) Empfindlichkeitsliste. Es ist möglich, immer wie gezeigt, unten zu verwenden:

immer

beginnen Sie//Immer beginnt, in der Zeit 0 durchzuführen, und hört NIE auf

clk = 0;//Satz clk zu 0

#1;//Warten für 1mal auf Einheit

clk = 1;//Satz clk zu 1

#1;//Warten 1mal auf Einheit

Ende//setzt Fort durchzuführen - so machen Sie zurück an der Oberseite vom Beginnen weiter

</Quelle>

Immer handelt Schlüsselwort ähnlich der "C"-Konstruktion während (1) {..} Im Sinn, dass es für immer durchführen wird.

Die andere interessante Ausnahme ist der Gebrauch des anfänglichen Schlüsselwortes mit der Hinzufügung für immer Schlüsselwort.

Das Beispiel ist unten zu immer Beispiel oben funktionell identisch.

Initiale für immer//Anfang in der Zeit 0 und Wiederholung für immer zu zu beginnen zu zu/beenden

beginnen Sie

clk = 0;//Satz clk zu 0 #1;//Warten für 1mal auf Einheit clk = 1;//Satz clk zu 1 #1;//Warten 1mal auf Einheit

Ende

</Quelle>

Sich gabeln/anschließen

Das gabeln/anschließen Paar wird von Verilog verwendet, um parallele Prozesse zu schaffen. Alle Behauptungen (oder Blöcke) zwischen einem gabeln/anschließen Paar beginnen Ausführung gleichzeitig auf den Ausführungsfluss, der die Gabel schlägt. Ausführung geht nach der Verbindungslinie nach der Vollziehung der längsten laufenden Behauptung oder des Blocks zwischen der Gabel weiter, und sich anschließen.

Initiale

Gabel

$write ("A");//Druck Verkohlen Einen

$write ("B");//Druckrotforelle B

beginnen Sie

#1;//Warten 1mal auf Einheit

$write ("C");//Druckrotforelle C

Ende

schließen Sie sich an

</Quelle>

Auf die Weise wird der obengenannte geschrieben, es ist möglich, entweder die Folgen "Abc" oder "BAC" zu haben, drucken aus. Die Ordnung der Simulation zwischen dem ersten $write und dem zweiten $write hängt von der Simulator-Durchführung ab, und kann randomized durch den Simulator zweckmäßig sein. Das erlaubt der Simulation, beide zufälligen Rasse-Bedingungen sowie absichtliches nichtdeterministisches Verhalten zu enthalten.

Bemerken Sie, dass VHDL vielfache Prozesse wie Verilog nicht dynamisch erzeugen kann.

Rasse-Bedingungen

Die Ordnung der Ausführung wird innerhalb von Verilog nicht immer versichert. Das kann am besten durch ein klassisches Beispiel illustriert werden. Denken Sie den Codeschnipsel unten:

Initiale

a = 0;

Initiale

b = a;

Initiale beginnen Sie #1;

$display ("Schätzen = % b Wert von b = % b", a, b);

Ende</Quelle>

Was wird für die Werte von a und b ausgedruckt? Abhängig von der Ordnung der Ausführung der anfänglichen Blöcke konnte es Null und Null, oder abwechselnd Null und ein anderer willkürlicher uninitialisierter Wert sein. Die $display-Behauptung wird immer durchführen, nachdem beide Anweisungsblöcke, wegen #1 Verzögerung vollendet haben.

Maschinenbediener

Zeichen: Diese Maschinenbediener werden in der Größenordnung von der Priorität nicht gezeigt.

Vier geschätzte Logik

Der IEEE 1364-Standard definiert eine vier geschätzte Logik mit vier Staaten: 0, 1, Z (hoher Scheinwiderstand), und X (unbekannter Logikwert). Für das Konkurrieren VHDL besteht ein hingebungsvoller Standard für die mehrgeschätzte Logik als IEEE 1164 mit neun Niveaus.

Systemaufgaben

Systemaufgaben sind verfügbar, um einfache Eingabe/Ausgabe und verschiedene Designmaß-Funktionen zu behandeln. Alle Systemaufgaben werden mit dem $ vorbefestigt, um sie von Benutzeraufgaben und Funktionen zu unterscheiden. Diese Abteilung präsentiert eine kurze Liste der meistenteils verwendeten Aufgaben. Es ist keineswegs eine umfassende Liste.

  • $display - Druck, um eine von einem automatischen newline gefolgte Linie zu schirmen.
  • $write - Schreiben, um eine Linie ohne den newline zu schirmen.
  • $swrite - Druck zur Variable eine Linie ohne den newline.
  • $sscanf - Gelesen von der Variable eine Format-angegebene Schnur. (*Verilog-2001)
  • $fopen - Öffnen einen Griff zu einer Datei (gelesen oder schreiben)
  • $fdisplay - Schreiben, um eine von einem automatischen newline gefolgte Linie abzulegen.
  • $fwrite - Schreiben, um eine Linie ohne den newline abzulegen.
  • $fscanf - Gelesen von der Datei eine Format-angegebene Schnur. (*Verilog-2001)
  • $fclose - Nahe und Ausgabe ein offener Dateigriff.
  • $readmemh - Gelesener Hexe-Dateiinhalt in eine Speicherreihe.
  • $readmemb - Gelesener binärer Dateiinhalt in eine Speicherreihe.
  • $monitor - Drucken alle verzeichneten Variablen wenn jeder Änderungswert Aus.
  • $time - Wert der aktuellen Simulierungszeit.
  • $dumpfile - Erklären den VCD (Wertänderungsmüllkippe) Format-Produktionsdateiname.
  • $dumpvars - drehen Sich und laden die Variablen ab.
  • $dumpports - drehen Sich und laden die Variablen im Verlängerten-VCD Format ab.
  • $random - Rückkehr ein zufälliger Wert.

Program Language Interface (PLI)

Der PLI versorgt einen Programmierer mit einem Mechanismus, Kontrolle von Verilog bis eine auf c Sprache geschriebene Programm-Funktion zu übertragen. Es wird durch IEEE Std 1364-2005 für die neuere Verilog Verfahrensschnittstelle offiziell missbilligt, die völlig den PLI ersetzt.

Der PLI ermöglicht Verilog, mit anderen Programmen zusammenzuarbeiten, die in der c Sprache wie Testgeschirre, Befehlssatz-Simulatoren eines Mikrokontrolleurs, Testhilfeprogramme und so weiter geschrieben sind. Zum Beispiel stellt es die C-Funktionen zur Verfügung, und die verwendet werden, um das Argument der aktuellen Aufgabe von Verilog oder Funktion beziehungsweise zu schreiben und zu lesen.

Simulierungssoftware

Für die Information über Simulatoren von Verilog, sieh die Liste von Simulatoren von Verilog.

Siehe auch

Zusätzliches Material

  • Liste von Simulatoren von Verilog
  • Wellenform-Zuschauer
  • SystemVerilog Direct Programming Interface (DPI)
  • Verilog Procedural Interface (VPI)

Zusammenhängende Sprachen

Außenverbindungen

Tutorenkurse und allgemeine Mittel

Standardentwicklung

Spracherweiterungen

  • Verilog AUTOS - Ein Meta-Anmerkungssystem der offenen Quelle, um das Aufrechterhalten des Codes von Verilog zu vereinfachen.
  • Thomas, Donald, Moorby, Phillip "Die Verilog Hardware-Beschreibungssprache" Kluwer Akademische Herausgeber, Norwell, Massachusetts. Internationale Standardbuchnummer 0-7923-8166-1
  • http://instruct1.cit.cornell.edu/Courses/ece576/Verilog/coding_and_synthesis_with_verilog.pdf baut Cornell ECE576 Kurs, der Synthese illustriert
  • Janick Bergerdon, "Testbenches Schreibend: Funktionelle Überprüfung von HDL Modellen", 2000, internationale Standardbuchnummer 0-7923-7766-4. (Der HDL Testbench Bibel)

Valencia / DICOM
Impressum & Datenschutz