Initial-Block
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 47 von 90.
Verilog hat zwei prozedurale Blöcke: initial (führt einmal aus) und always (führt kontinuierlich aus). Schauen wir uns nun den initial-Block an.
Was ist ein Initial-Block?
Der initial-Block wird nur einmal zu Beginn der Simulation (Zeitpunkt 0) ausgeführt. Wenn er beendet ist, wird er nicht noch einmal ausgeführt.
Es wird hauptsächlich in Testbenches verwendet für:
- Das Setzen von Anfangswerten
- Das Erzeugen von Testsignalen
- Das Anzeigen von Nachrichten
- Das Starten der Simulation
Syntax
initial begin
// Anweisungen werden einmal sequentiell ausgeführt
endGrundelegendes Beispiel
initial begin
$display("Simulation started");
$display("This runs once");
$finish;
endAusgabe:
Simulation started
This runs onceVerwendung von Initial Block für Test-Signale
initial begin
a = 0;
#10 a = 1;
#10 a = 0;
#10 $finish;
endDies ändert a zu den Zeiten: 0, 10 und 20.
Initial vs Always
initial | always | |
|---|---|---|
| Runs | Once | Kontinuierlich (dauerhaft) |
| Verwendung für | Testbenches, Initialisierung | Hardware (Flipflops, Zähler) |
| Synthetisierbar? | Nein (nur Simulation) | Ja (mit Sensitivitätsliste) |
Wichtige Hinweise
initial-Blöcke sind nicht synthetisierbar — sie können nicht in Hardware umgesetzt werden- Verwenden Sie
initialnur in Testbenches - Wenn die Testbench einen frei laufenden Takt enthält (z. B.
always #5 clk = ~clk;), läuft dieSimulationewig, außer Sie rufen$finishauf; bei nur eineminitial-Block stoppt der Simulator von selbst, wenn keine Ereignisse mehr vorhanden sind, aber das Hinzufügen von$finishist dennoch bewährte Praxis
Aufgabe
Füge den fehlenden initial-Block hinzu, der a auf 0 setzt und nach 10 Zeiteinheiten a auf 1 setzt.
Was zu tun ist:
- Füge
initial beginundendhinzu - Setze
a = 0 - Warte
#10 - Setze
a = 1 - Füge $finish hinzu, um die simulation zu beenden
Probier es selbst
module test;
reg a;
// TODO: Hier einen initial-Block hinzufügen
// Setze a = 0
// Warte #10
// Setze a = 1
// Füge $finish; hinzu, um die Simulation zu beenden
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen9Prozedurale Blöcke
Always-BlockInitial-BlockSensitivitätslisteBlockierende ZuweisungNicht-blockierende ZuweisungZusammenfassung – Always vs. Initial