Using System Tasks
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 Teststimuli.
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 diesem 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 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 Challenge14Testbench Basics
What Is A TestbenchCreating StimulusDisplay And MonitorDumpfile And DumpvarsUsing System TasksRecap - Full Testbench3Number 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