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). Sehen wir uns nun den initial-Block an.
Was ist ein Initial-Block?
Der initial-Block wird am Anfang der Simulation (Zeit 0) nur einmal ausgeführt. Wenn er beendet ist, wird er nicht erneut ausgeführt.
Es wird hauptsächlich in Testbenches verwendet für:
- Festlegen von initial Werten
- Generieren von test-Signalen
- Anzeigen von display-Nachrichten
- Starten der simulation
Syntax
initial begin
// Anweisungen werden einmal sequenziell ausgeführt
endGrundlegendes Beispiel
initial begin
$display("Simulation started");
$display("This runs once");
$finish;
endAusgabe:
Simulation started
This runs onceInitial-Block für Testsignale verwenden
initial begin
a = 0;
#10 a = 1;
#10 a = 0;
#10 $finish;
endDadurch wird a zu den Zeitpunkten 0, 10 und 20 geändert.
Initial vs Always
initial | always | |
|---|---|---|
| Ausführung | Einmal | Kontinuierlich (für immer) |
| 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 umgewandelt werden- Verwende
initialnur in Testbenches - Wenn die Testbench eine dauerhaft laufende Clock enthält (z. B.
always #5 clk = ~clk;), läuft die Simulation für immer, sofern du nicht$finishaufrufst; mit nur eineminitial-Block stoppt der Simulator von selbst, sobald keine Ereignisse mehr vorhanden sind, aber das Hinzufügen von$finishist dennoch eine gute Praxis
Aufgabe
Füge den fehlenden initial-block hinzu, der a auf 0 setzt und dann 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: 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. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicÜbe selbstständig: Online-Verilog-Compiler