Verilog-Dokumentation
Kompakte, beispielorientierte Verilog-Referenz. Konzept lesen, Code ansehen, dann in einem Coddy-Lernweg üben.
Geführten Verilog-Lernweg startenErste Schritte
- Was ist Verilog?Eine verständliche Einführung in Verilog - was es ist, wofür man es einsetzt, wie es sich von einer normalen Programmiersprache unterscheidet und warum Digital-Designer auch nach 40 Jahren noch dazu greifen.
- Hardware vs. SoftwareWarum sich Verilog nach Software-Sprachen anfühlt wie ein Schock: Nebenläufigkeit per Default, Zeit als First-Class-Konzept und Anweisungen, die nicht der Reihe nach laufen.
- Verilog installierenInstalliere Icarus Verilog und GTKWave, um Verilog lokal zu kompilieren und zu simulieren. Oder lass die Installation weg und nutze den Browser-Editor - beides funktioniert für diese Docs.
- Dein erstes ModulSchreibe dein erstes vollständiges Verilog-Modul von Grund auf - Deklaration, Ports, ein Stück kombinatorische Logik und eine Testbench, die es treibt. Lauffähig im Browser.
- KommentareWie du einzeilige und mehrzeilige Kommentare in Verilog schreibst, plus die Dokumentations-Muster, die Digital-Designer nutzen, um Module mit dem Wachstum lesbar zu halten.
Datentypen und Zahlen
- wire und regDie zwei wichtigsten Datentypen in Verilog - `wire` für kontinuierliche Verbindungen und `reg` für prozeduralen Speicher - und die Regel, mit der du jedes Mal richtig wählst.
- Vektoren und ArraysWie du mehrbittige Signale mit `[7:0]` deklarierst, in Slices zerlegst, kombinierst und der Unterschied zwischen einem packed-Vektor und einem Memory-Array.
- ParameterWie du `parameter` und `localparam` für Compile-Zeit-Konstanten verwendest, Breiten und Tiefen parametrierst und Werte beim Instanziieren eines Moduls überschreibst.
- Zahlen-LiteraleWie Verilog Konstanten schreibt: gesized vs ungesized, die Basen `'b` `'h` `'d` `'o`, signed Zahlen, Unterstriche für die Lesbarkeit und die Stolperfallen, die Anfänger erwischen.
- X- und Z-WerteVerilog-Signale haben vier mögliche Werte, nicht zwei. Hier ist, was `x` (unknown) und `z` (high-impedance) in der Simulation wirklich bedeuten - und wie du sie debuggst.
Operatoren
- OperatorenDie Kern-Operatoren in Verilog - Arithmetik, Vergleich, Logik und der bedingte `?:` - mit den Regeln und Fallstricken rund um gemischte Breiten und Vorzeichen.
- Bitwise & ReduktionDie Bit-Level-Operatoren in Verilog - bitweises AND/OR/XOR, die Invertierungsformen und die Reduktionsoperatoren, die einen ganzen Vektor auf ein einziges Bit kollabieren.
- Konkatenation & ReplikationWie du Signale mit `{}` zusammenfügst und ein Muster mit `{N{...}}` N-mal kopierst - die unverzichtbaren Verilog-Operatoren, um aus Teilen breitere Busse zu bauen.
Module und Struktur
- Modul-PortsWie du Modul-Ports deklarierst - input, output und inout - die ANSI-Port-Liste und wann ein output `wire` und wann `reg` sein sollte.
- Modul-InstanziierungWie du ein Modul in einem anderen instanziierst, der Unterschied zwischen benannten und positionsbasierten Port-Verbindungen und die Mehrfach-Instanz-Muster, mit denen du echte Designs baust.
- Continuous AssignmentWie `assign` funktioniert - die immer-gültige Beziehung, die sie beschreibt, was sie treiben kann und was nicht, und in welchen Mustern sie gegenüber prozeduralem Code glänzt.
Prozedurale Blöcke
- Always-BlockWie `always`-Blöcke funktionieren, der Unterschied zwischen kombinatorischem `always @(*)` und getaktetem `always @(posedge clk)`, und die Regeln, die entscheiden, welche Hardware jeweils entsteht.
- Initial-BlockWie sich `initial`-Blöcke von `always` unterscheiden, warum sie nur in der Simulation existieren und die üblichen Muster - Stimulus, Waveform-Setup, Log-Header - für die sie benutzt werden.
- Blocking vs Non-blockingDas am häufigsten missverstandene Thema in Anfänger-Verilog. Was `=` und `<=` innerhalb eines `always`-Blocks wirklich bedeuten und die Regel, die die meisten Race Conditions verhindert.
Kontrollfluss
- If-ElseWie `if`/`else` innerhalb eines `always`-Blocks funktioniert, die Latch-Falle, in die Anfänger tappen, und die Priority-Encoder-Hardware, die `else if`-Ketten produzieren.
- Case-AnweisungWie `case` für sauberes Mehrweg-Decoding funktioniert, der `default`, den du nie weglassen solltest, und die Unterschiede zwischen `case`, `casex` und `casez`.
- For-SchleifenWie Verilogs `for`-Schleifen sich von ihren Software-Verwandten unterscheiden - der Synthesizer rollt sie in parallele Hardware auf, statt sie zur Laufzeit iterativ auszuführen.
Sequenzielle Logik und FSMs
- Getaktete LogikWie du Register, Counter, Schieberegister und Pipelines aus getakteten `always`-Blöcken aufbaust - das Arbeitspferd-Muster jedes synchronen digitalen Designs.
- Endliche AutomatenWie du einen Verilog-FSM so schreibst, wie es Profis tun - ein getaktetes Zustandsregister, ein kombinatorischer Next-State-Block und eine saubere Trennung, die leicht zu lesen und zu synthetisieren ist.
Testbenches und Simulation
- Testbench-GrundlagenWie du eine Verilog-Testbench schreibst - Taktgenerierung, Reset-Sequenz, Stimulus, Beobachtung und das Standard-Skelett, das jede Simulation antreibt, die du startest.
- Display & MonitorWie `$display`, `$write` und `$monitor` funktionieren - die Format-Spezifizierer, die du nutzen wirst, der Unterschied zwischen ihnen und wann welches das richtige Werkzeug ist.
- Dumpfile & VCDWie du VCD-Waveform-Ausgabe zu einer Testbench hinzufügst - `$dumpfile`, `$dumpvars`, Scope-Auswahl und wie du die resultierende Datei in GTKWave oder im Browser-Editor anschaust.
- Timescale & DelaysWie die `` `timescale ``-Direktive die Einheit von `#delay` setzt, die Regeln für die Kombination verschiedener Einheiten über Dateien hinweg und wie Delays mit getakteter Logik interagieren.