Initial-Block
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 47 von 90.
Verilog hat zwei prozedurale Blöcke: initial (wird einmal ausgeführt) und always (wird kontinuierlich ausgeführt). Behandeln wir nun den initial-Block.
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 erneut ausgeführt.
Es wird hauptsächlich in Testbenches für Folgendes verwendet:
- Setzen von Initialwerten
- Erzeugen von Testsignalen
- Anzeigen von Meldungen
- Starten der Simulation
Syntax
initial begin
// Anweisungen werden einmal nacheinander ausgeführt
endEinfaches Beispiel
initial begin
$display("Simulation started");
$display("This runs once");
$finish;
endAusgabe:
Simulation started
This runs onceVerwendung des Initial-Blocks für Testsignale
initial begin
a = 0;
#10 a = 1;
#10 a = 0;
#10 $finish;
endDies ändert a zu den Zeitpunkten: 0, 10 und 20.
Initial vs Always
initial | always | |
|---|---|---|
| Ausführung | Einmalig | Kontinuierlich (dauerhaft) |
| Verwendung für | Testbenches, Initialisierung | Hardware (Flip-Flops, 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 - Ohne
$finishläuft die Simulation ewig (kein Takt, um sie zu stoppen)
Aufgabe
Fügen Sie den fehlenden initial-Block hinzu, der a auf 0 setzt und dann nach 10 Zeiteinheiten a auf 1 setzt.
Was zu tun ist:
- Fügen Sie
initial beginundendhinzu - Setzen Sie
a = 0 - Warten Sie
#10 - Setzen Sie
a = 1 - Fügen Sie $finish hinzu, um die Simulation zu beenden
Spickzettel
Der initial-Block wird einmal zum Simulationszeitpunkt 0 ausgeführt. Er wird nur in Testbenches verwendet (nicht synthetisierbar).
initial begin
a = 0; // gesetzt zum Zeitpunkt 0
#10 a = 1; // gesetzt zum Zeitpunkt 10
#10 a = 0; // gesetzt zum Zeitpunkt 20
$finish; // Simulation beenden
endOhne $finish läuft die Simulation unendlich lange.
initial | always | |
|---|---|---|
| Ausführung | Einmal | Kontinuierlich |
| Verwendung für | Testbenches | Hardware |
| Synthetisierbar? | Nein | Ja |
Probier es selbst
module test;
reg a;
// TODO: Initial-Block hier 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