System Tasks verwenden
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 77 von 90.
Systemaufgaben sind integrierte Befehle in Verilog, die mit einem Dollarzeichen ($) beginnen. Sie führen nützliche Funktionen aus, z. B. das Ausgeben von Nachrichten, das Beenden der Simulation und das Erstellen von Wellenformdateien.
Wir haben $display, $monitor, $dumpfile und $dumpvars bereits in vorherigen Lektionen behandelt. In dieser Lektion sehen wir uns zusätzliche Systemaufgaben an, die in Testbenches nützlich sind.
Zusätzliche Systemaufgaben
| Systemaufgabe | Zweck |
|---|---|
$time | Aktuelle Simulationszeit zurückgeben |
$finish | Simulation beenden |
$stop | Simulation pausieren |
$random | Zufallszahl generieren |
$time
Gibt die aktuelle Simulationszeit zurück. Nützlich, um zu verfolgen, wann Ereignisse auftreten.
$display("Current time is %0t", $time);$finish
Beendet die Simulation. Verwende es immer am Ende deiner Testbench.
$finish;$stop
Hält die Simulation an. Sie kann mit einem Simulatorbefehl fortgesetzt werden. Nützlich zum Debuggen.
$stop;$random
Erzeugt eine Zufallszahl. Nützlich zum Erstellen zufälliger Testreize.
reg [7:0] rand_value;
rand_value = $random;Beispiel mit mehreren Systemaufgaben
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üge die fehlenden Systemaufgaben zu dieser Testbench hinzu.
Was zu tun ist:
- Füge
$displayhinzu, um die aktuelle Zeit am Anfang auszugeben - Füge
$displayhinzu, um die aktuelle Zeit am Ende auszugeben - Füge
$finishhinzu, um die Simulation zu beenden
Probier 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: Füge $display mit aktueller Zeit am Anfang hinzu
// 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: Füge $display mit aktueller Zeit am Ende hinzu
// Format: "End time: %0t"
// TODO: Füge $finish hinzu
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. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – einfache MathematikBitweise Operatoren7Zuweisungen und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-GrundelementeUND-, ODER- und NICHT-GatterXOR- und XNOR-GatterRückblick – Logikgatter-Schaltung10Entscheidungsfindung
If-AnweisungIf – ElseRückblick – Einfacher KomparatorCase-AnweisungCasex und CasezRückblick – ALU-Entwurf13Zeitsteuerung und Verzögerungen
Was sind Verzögerungen?GatterverzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Zeitsteuerung2Datentypen
Wire-TypReg-TypInteger und RealVektorenArraysParameterZusammenfassung – Signale deklarieren5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenSchiebeoperatorenVerkettungsoperatorBedingter OperatorRückblick – Operatoren-Herausforderung11Schleifen
For-SchleifeWhile-SchleifeWiederholungsschleifeEndlosschleifeAnweisung deaktivierenRückblick – Schleifenmuster14Grundlagen von Testbenches
Was ist ein TestbenchStimuli erzeugenDisplay und MonitorDumpfile und DumpvarsSystem Tasks verwendenZusammenfassung – vollständiger Testbench3Zahlensystem
Binäre DarstellungZahlen mit fester BreiteZahlen ohne feste BreiteNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturInput- und Output-PortsInout-PortsModulinstanziierungPortzuordnung nach NamenPortzuordnung nach ReihenfolgeRückblick – Ein Modul erstellenÜbe selbstständig: Online-Verilog-Compiler