System-Tasks verwenden
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 77 von 90.
System-Tasks sind integrierte Befehle in Verilog, die mit einem Dollarzeichen ($) beginnen. Sie führen nützliche Funktionen aus, wie zum Beispiel das Ausgeben von Meldungen, das Beenden der Simulation und das Erstellen von Waveform-Dateien.
Wir haben bereits $display, $monitor, $dumpfile und $dumpvars in vorangegangenen Lektionen behandelt. In dieser Lektion werden wir uns zusätzliche System-Tasks ansehen, die in Testbenches nützlich sind.
Zusätzliche System-Tasks
| System-Task | Zweck |
|---|---|
$time | Gibt die aktuelle Simulationszeit zurück |
$finish | Beendet die Simulation |
$stop | Pausiert die Simulation |
$random | Generiert eine Zufallszahl |
$time
Gibt die aktuelle Simulationszeit zurück. Nützlich, um zu verfolgen, wann Ereignisse eintreten.
$display("Current time is %0t", $time);$finish
Beendet die Simulation. Verwenden Sie dies immer am Ende Ihres Testbench-Codes.
$finish;$stop
Pausiert die Simulation. Kann mit einem Simulator-Befehl fortgesetzt werden. Nützlich für das Debugging.
$stop;$random
Erzeugt eine Zufallszahl. Nützlich für die Erstellung von zufälligen Teststimuli.
reg [7:0] rand_value;
rand_value = $random;Beispiel mit mehreren System-Tasks
module system_tasks_demo;
reg [7:0] data;
integer i;
initial begin
$display("Simulation started at time %0t", $time);
for (i = 0; i < 5; i = i + 1) begin
data = $random;
$display("Random value %d: %b", i, data);
end
$stop;
#10 $display("Resumed at time %0t", $time);
$display("Simulation finished at time %0t", $time);
$finish;
end
endmoduleAufgabe
Fügen Sie die fehlenden System-Tasks zu dieser Testbench hinzu.
Was zu tun ist:
- Fügen Sie
$displayhinzu, um die aktuelle Zeit zu Beginn auszugeben - Fügen Sie
$displayhinzu, um die aktuelle Zeit am Ende auszugeben - Fügen Sie
$finishhinzu, um die Simulation zu beenden
Spickzettel
System-Tasks in Verilog beginnen mit $ und führen Simulations-Utilities aus:
| System-Task | Zweck |
|---|---|
$time | Gibt die aktuelle Simulationszeit zurück |
$finish | Beendet die Simulation |
$stop | Pausiert die Simulation |
$random | Erzeugt eine Zufallszahl |
$display("Time: %0t", $time); // Aktuelle Zeit ausgeben
$finish; // Simulation beenden
$stop; // Simulation pausieren
reg [7:0] rand_value;
rand_value = $random; // Zufallszahl zuweisenProbier es selbst
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// TODO: $display mit aktueller Zeit zu Beginn hinzufügen
// Format: "Start time: %0t"
$monitor("Time %0t: a=%b, b=%b, c=%b", $time, a, b, c);
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
// TODO: $display mit aktueller Zeit am Ende hinzufügen
// Format: "End time: %0t"
// TODO: $finish hinzufügen
end
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 – Schleifenmuster14Testbench-Grundlagen
Was ist eine TestbenchErstellen von StimuliDisplay und MonitorDumpfile und DumpvarsSystem-Tasks verwendenZusammenfassung – Vollständige Testbench3Zahlensystem
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 erstellen