Eine Sprache zum Beschreiben von Schaltungen
Die meisten Sprachen, die du bisher gesehen hast - Python, JavaScript, Go - beschreiben eine Folge von Anweisungen, die eine CPU abarbeitet. Verilog beschreibt eine Schaltung. Du notierst, welche Leitungen existieren, welche Register existieren und wie Signale zwischen ihnen fließen. Ein Simulator kann dann das Verhalten der Schaltung abspielen, und ein Synthese-Tool kann denselben Text in die Gatter und Flip-Flops eines echten Chips übersetzen.
Das ist die Ein-Zeilen-Definition. Die Konsequenzen brauchen länger, bis sie sitzen.
Dieser Schnipsel sieht aus wie ein winziges Programm: ein module, ein initial-Block, eine $display-System-Task. Drücke Run und du siehst hello from verilog. Unter der Haube führt der Simulator allerdings keine Funktion aus - er tut so, als verginge Zeit, und schaltet die Schaltung Schritt für Schritt weiter. Genau deshalb siehst du überall $finish: irgendjemand muss dem Simulator sagen, dass er aufhören soll.
Was "Hardwarebeschreibung" eigentlich bedeutet
Eine C-Zeile läuft, wenn der Programmzähler sie erreicht. Eine Verilog-Zeile beschreibt ein Stück Schaltungstechnik, das immer existiert. Betrachte:
assign y = a & b;
Das heißt nicht "berechne y einmal". Es heißt: "es gibt eine Leitung y, und zu jedem Zeitpunkt ist sie gleich a AND b." Ändere a oder b und y folgt sofort. Mehrere assign-Anweisungen in einem Modul sind keine Sequenz - sie sind parallele Beschreibungen verschiedener Teile der Schaltung.
Das ist das prägende Merkmal von Verilog und die Quelle jedes Anfänger-Bugs. Das meiste, was du schreibst, beschreibt Dinge, die nebenläufig passieren, und die wenigen Konstrukte, die nach geordneten Anweisungen aussehen (innerhalb von initial- und always-Blöcken), wirken nur deshalb so, weil der Simulator es vortäuscht.
Was du mit Verilog baust
Du wirst Verilog auf jeder Ebene des digitalen Stacks finden:
- Kombinatorische Logik. Addierer, Multiplexer, Decoder, ALU-Slices - alles, wo die Ausgabe nur von den aktuellen Eingaben abhängt.
- Sequentielle Logik. Zähler, Schieberegister, endliche Automaten, alles, was von einem
posedge clkgetaktet wird. - Prozessorkerne. Von Hausaufgaben-CPUs in Uni-Kursen bis zu den Open-Source-RISC-V-Kernen, die in echtem Silizium ausgeliefert werden - der RTL ist meist Verilog oder SystemVerilog.
- FPGA-Designs. Logik, die in ein Xilinx- oder Intel-FPGA geladen wird - Networking, Bildverarbeitung, Embedded-Steuerung - wird überwiegend in Verilog geschrieben.
- ASICs. Die kundenspezifischen Chips in deinem Handy, deinem Router, deinem Auto - das Front-End-Design ist HDL, und Verilog ist eine der beiden vorherrschenden Optionen.
Du brauchst keine dieser Hardware zum Lernen. Alles in diesen Docs läuft in einem browserbasierten Simulator.
Simulation vs. Synthese
Es gibt zwei Arten, Verilog "auszuführen", und sie sind nicht dasselbe:
- Simulation spielt das Verhalten der Schaltung in Software ab. Der Simulator (Icarus Verilog, Verilator, ModelSim, kommerzielle Tools) liest deine Module plus eine Testbench - Code, der die Eingänge treibt - und erzeugt Ausgaben: Text-Logs, Waveforms, Pass/Fail-Berichte.
- Synthese nimmt eine Teilmenge von Verilog und übersetzt sie in eine Netzliste echter Gatter. Ein Hersteller-Tool (Vivado, Quartus, Design Compiler bei großen Firmen) übernimmt das Mapping. Synthetisierbarer Verilog muss zusätzliche Regeln einhalten -
initial-Blöcke und$display-Aufrufe existieren in Silizium nicht.
Der Browser-Editor auf diesen Seiten macht Simulation. Mehr brauchst du nicht, bis du einen echten Chip ausliefern oder ein FPGA programmieren willst.
Verilog vs. SystemVerilog
Wenn du dich umschaust, wirst du beide Namen sehen. SystemVerilog ist eine Obermenge - es behält jedes Verilog-Konstrukt bei und fügt Features hinzu, die überwiegend auf Verifikation abzielen (Klassen, constrained-random Testing, Assertions, Interfaces, ein viel reicheres Typsystem). Alles, was du hier lernst, ist gültiges SystemVerilog. In der Praxis verschwimmen die beiden Namen; die meisten Tools akzeptieren beide, und die meisten Dateien enden trotzdem auf .v. Wir sagen in diesen Docs durchgehend "Verilog".
Verilog vs. VHDL
Beides sind Hardwarebeschreibungssprachen. Beide sind IEEE-Standards. Beide gibt es seit den 1980ern. Die Unterschiede:
- Syntax. Verilog stammt von C ab - Klammern, kompakte Schlüsselwörter, lockerere Typregeln. VHDL stammt von Ada ab - ausführlicher, viel strenger bei Typen.
- Geografie. Verilog dominiert im kommerziellen US-Design. VHDL ist in Europa, in Wehrtechnik und in älteren Codebasen immer noch verbreitet.
- Mächtigkeit. Sie sind in dem, was sie ausdrücken können, ungefähr gleichwertig. Wähle danach, was dein Team einsetzt.
Wenn du HDL zum ersten Mal lernst, hat Verilog die sanftere Lernkurve - kleinere Syntax, nachsichtiger, und die Online-Beispielbibliothek ist größer.
Wie diese Docs Verilog ausführen
Der Editor unten nutzt Icarus Verilog (iverilog) unter der Haube. Er kompiliert deinen Quelltext in einen Simulator und führt ihn in einer Sandbox aus. Keine Vivado-Lizenz, keine Quartus-Installation, kein FPGA-Board nötig. Du schreibst ein Modul plus eine kleine Testbench, drückst Run, und du siehst die Ausgabe und die Waveform.
Das ist ein vollständiger 4-Bit-Zähler plus Testbench. Das counter-Modul ist das Design under Test (DUT); das test-Modul wackelt am Takt, gibt den Reset frei und gibt den Wert jeden Takt aus. Lass es laufen und du siehst count von 0 bis 15 laufen und überschlagen. Öffne den Waveform-Tab und du siehst das Gleiche als Spannungswechsel.
Wie es weitergeht
Du hast genug Kontext, um Module zu schreiben. Das nächste Dokument - Hardware vs Software - widmet sich der mentalen Umstellung noch etwas ausführlicher, weil das die größte Stolperfalle für neue Verilog-Programmierer ist. Danach folgen die Installation eines lokalen Simulators (optional - der Browser reicht völlig), das Schreiben deines ersten Moduls von Grund auf und der Rest der Sprache.
Lass dir Zeit. Die Syntax ist klein; das mentale Modell ist die Arbeit.
Häufig gestellte Fragen
Was ist Verilog einfach erklärt?
Verilog ist eine Hardwarebeschreibungssprache (HDL), mit der digitale Schaltungen in Textform beschrieben werden. Statt Anweisungen zu schreiben, die eine CPU ausführt, beschreibst du Leitungen, Register, Gatter und wie Signale zwischen ihnen fließen. Ein Simulator führt diese Beschreibung dann aus, damit du das Verhalten überprüfen kannst, und ein Synthese-Tool kann die gleiche Beschreibung in ein echtes Chip-Layout umwandeln.
Wofür wird Verilog verwendet?
Verilog wird zum Entwurf und zur Verifikation digitaler Hardware eingesetzt: CPUs, GPUs, Netzwerk-Switches, Speichercontroller, Signalverarbeitungs-Blöcke, FPGA-Designs - alles, was aus Gattern und Flip-Flops aufgebaut ist. Es läuft außerdem in der reinen Simulation, um digitale Logik zu lehren und Designs zu prototypisieren, bevor ein einziges Stück Silizium produziert wird.
Ist Verilog eine Programmiersprache?
Nicht im üblichen Sinn. Verilog-Code beschreibt Hardware-Struktur und -Verhalten - Signale, Gatter und getakteten Speicher - statt einer Folge von CPU-Instruktionen. Viele Zeilen, die du schreibst, laufen gleichzeitig auf dem Chip ab, nicht nacheinander. Diese geistige Umstellung ist die größte Hürde beim Wechsel von Software zu Verilog.
Was ist der Unterschied zwischen Verilog und SystemVerilog?
SystemVerilog ist eine Obermenge von Verilog. Es behält die gesamte Verilog-Syntax bei und fügt vor allem Verifikations-Funktionen hinzu: Klassen, constrained-random Stimulus, Assertions, Interfaces und reichere Datentypen. Tools, die SystemVerilog akzeptieren, akzeptieren auch klassisches Verilog. Für die meiste Einsteigerarbeit sehen beide identisch aus.
Was ist der Unterschied zwischen Verilog und VHDL?
Verilog und VHDL sind beides Hardwarebeschreibungssprachen, die das gleiche Problem lösen. Die Syntax von Verilog stammt von C ab und ist knapper; die von VHDL stammt von Ada ab und ist ausführlicher und strenger bei Typen. Die Industrie nutzt beide je nach Region und Team - beide sind aktiv und standardisiert (IEEE 1364/1800 für Verilog/SystemVerilog, IEEE 1076 für VHDL).
Ist Verilog schwer zu lernen?
Die Syntax ist klein - kleiner als die von C++. Schwierig ist das Verlernen von Software-Gewohnheiten. In Verilog beschreiben die meisten Anweisungen Dinge, die gleichzeitig passieren, nicht in einer Sequenz, und eine fehlerhaft gesetzte blocking- vs non-blocking-Zuweisung kann darüber entscheiden, ob deine Schaltung überhaupt funktioniert. Rechne damit, dass sich die erste Woche fremd anfühlt, bevor es klick macht.