Creating Stimulus
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 74 von 90.
Stimulus bezeichnet die Eingangswerte, die du auf dein Design anwendest, um zu testen, ob es korrekt funktioniert. Indem du die Eingänge änderst und die Ausgänge beobachtest, kannst du überprüfen, ob sich dein Design wie erwartet verhält.
Stell es dir wie das Testen einer Maschine vor: Du drückst verschiedene Tasten (stimulus) und beobachtest, was passiert (outputs). Gutes stimulus zu erstellen, ist ein wesentlicher Bestandteil beim Schreiben eines testbench.
Betrachte zum Beispiel stimulus im folgenden testbench:
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// STIMULUS BEGINNT HIER
// Testfall 1: Beide Eingänge sind 0
a = 0; b = 0; #10;
// Testfall 2: a=0, b=1
a = 0; b = 1; #10;
// Testfall 3: a=1, b=0
a = 1; b = 0; #10;
// Testfall 4: Beide Eingänge sind 1
a = 1; b = 1; #10;
// STIMULUS ENDET HIER
$finish;
end
endmoduleJeder stimulus wird angewendet, dann warten wir 10 Zeiteinheiten (#10), bevor der nächste stimulus angewendet wird. Dadurch hat das DUT Zeit, eine Ausgabe zu erzeugen.
Methoden zum Erzeugen von Stimuli
| Methode | Am besten geeignet für | Beispiel |
|---|---|---|
| Sequenzielle Zuweisungen | Einfache Tests | a = 0; b = 0; #10; |
| For-Schleife | Testen aller Kombinationen | for (i = 0; i < 4; i++) |
| Repeat-Schleife | Wiederholen von Mustern | repeat (10) #5 clk = ~clk; |
| Forever-Schleife | Kontinuierliche Signale | forever #5 clk = ~clk; |
Methode 1: Sequenzielle Zuweisungen
Die einfachste Möglichkeit, Stimulus zu erzeugen. Du weist Werte mit Verzögerungen einzeln zu.
initial begin
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
$finish;
endMethode 2: For-Schleife
Nützlich, wenn du alle möglichen Eingangskombinationen testen möchtest.
integer i;
initial begin
for (i = 0; i < 4; i = i + 1) begin
{a, b} = i;
#10;
end
$finish;
endDies testet: 00, 01, 10, 11.
Methode 3: Repeat-Schleife
Nützlich, um denselben Stimulus viele Male zu wiederholen.
initial begin
a = 0; b = 1;
repeat (10) begin
#10 a = ~a;
end
$finish;
endMethode 4: Endlosschleife
Nützlich für kontinuierliche Signale wie Taktgeber.
initial begin
clk = 0;
forever #5 clk = ~clk;
endWichtige Regeln
| Regel | Erklärung |
|---|---|
| Verwende Verzögerungen zwischen stimulus-Zuweisungen | #10 gibt dem DUT Zeit zu reagieren |
Verwende reg für stimulus-Signale | Weil sie sich im Laufe der Zeit ändern |
Add $finish am Ende hinzu | Um die Simulation zu stoppen |
Aufgabe
Dir wird ein OR-Gatter-Modul gegeben. Deine Aufgabe ist es, die fehlenden Stimuli und $display-Anweisungen hinzuzufügen, um die Ergebnisse auszugeben.
Was zu tun ist:
Füge Stimuli hinzu, um alle vier Eingangskombinationen (00, 01, 10, 11) zu testen:
- Setze in jeder Zeile die Werte für
xundy - Füge
#10für eine Verzögerung hinzu - Füge
$displayhinzu, um das Ergebnis auszugeben
Das <strong>$display</strong> sollte so aussehen:
$display("%d %d | %d", x, y, z);Probier es selbst
module or_gate (
input x,
input y,
output z
);
assign z = x | y;
endmodule
module testbench;
reg x, y;
wire z;
or_gate dut (
.x(x),
.y(y),
.z(z)
);
initial begin
$display("x y | z");
$display("---------");
// TODO: Stimulus und Anzeige für 0 0 hinzufügen
// TODO: Stimulus und Anzeige für 0 1 hinzufügen
// TODO: Stimulus und Anzeige für 1 0 hinzufügen
// TODO: Stimulus und Anzeige für 1 1 hinzufügen
$finish;
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