Was ist eine Testbench
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 73 von 90.
Eine Testbench ist ein spezielles Verilog-Modul, das verwendet wird, um ein anderes Modul zu testen. Sie liefert Eingaben für Ihr Design und prüft, ob die Ausgaben korrekt sind.
Warum brauchen wir eine Testbench?
Wenn Sie ein Modul erstellen, müssen Sie sicherstellen, dass es korrekt funktioniert. Eine Testbench ermöglicht es Ihnen:
- Verschiedene Eingangswerte an Ihr Modul anzulegen
- Die Ausgänge zu beobachten
- Prüfen Sie, ob die Ausgaben Ihren Erwartungen entsprechen
- Führen Sie dies automatisch ohne manuelles Testen durch
Testbench vs. Design-Modul
| Design-Modul | Testbench | |
|---|---|---|
| Zweck | Implementiert Hardware | Testet das Design-Modul |
| Hat Ports? | Ja (Eingänge und Ausgänge) | Nein (eigenständig) |
| Synthetisierbar? | Ja | Nein (nur Simulation) |
Einfaches Testbench-Beispiel
module testbench; // Keine Ports!
// Die Ein- und Ausgänge kommen von dem Modul, das wir testen (das DUT).
reg a, b; // reg für Eingänge
wire c; // wire für Ausgang
// Dies ist eine Modul-Instanziierung — sie erstellt eine Kopie des and_gate-Moduls und benennt sie dut
and_gate dut ( // DUT instanziieren
.a(a),
.b(b),
.c(c)
);
// Dies ist ein initial-Block, der Testwerte an die Eingänge des zu testenden Moduls anlegt.
initial begin // Testwerte anlegen
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
$finish;
end
endmoduleWichtige Punkte
- Testbench hat keine Ports
regwird für Signale verwendet, die sich ändern (Eingänge zum DUT)wirewird für Signale vom DUT verwendet (Ausgänge)
- Das zu testende Modul wird DUT (Design Under Test) genannt
$finishbeendet die Simulation
Wir werden das Erstellen von Stimuli, das Anzeigen von Ergebnissen und andere Testbench-Funktionen in den folgenden Lektionen behandeln.
Aufgabe
Ihnen wird ein AND-Gate-Modul zur Verfügung gestellt. Ihre Aufgabe ist es, die fehlenden Teile zu seinem Testbench hinzuzufügen.
Was zu tun ist:
Fügen Sie dem Testbench die folgenden Teile hinzu:
- Deklarieren Sie
regfür die Eingängeaundb - Deklarieren Sie
wirefür den Ausgangc - Instanziieren Sie
and_gatemit dem Namendutund verbinden Sie die Ports
Spickzettel
Ein Testbench ist ein Verilog-Modul, das verwendet wird, um ein anderes Modul zu testen (das DUT - Design Under Test). Es hat keine Ports und dient nur der Simulation.
module testbench; // Keine Ports!
reg a, b; // reg für Eingänge (Signale, die sich ändern)
wire c; // wire für DUT-Ausgänge
and_gate dut ( // DUT instanziieren
.a(a),
.b(b),
.c(c)
);
initial begin // Testwerte anwenden
a = 0; b = 0; #10;
a = 1; b = 1; #10;
$finish; // Simulation beenden
end
endmodule- Verwenden Sie
regfür Signale, die ininitial-Blöcken gesteuert werden (Eingänge zum DUT) - Verwenden Sie
wirefür Signale, die vom DUT kommen (Ausgänge) $finishbeendet die Simulation
Probier es selbst
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
// Aufgabe 1: Deklariere reg für die Eingänge a und b
// Aufgabe 2: Deklariere wire für den Ausgang c
// Aufgabe 3: Instanziiere and_gate mit dem Namen dut
// Verbinde .a(a), .b(b), .c(c)
initial begin
a = 0; b = 0; #10 $display("%d & %d = %d", a, b, c);
a = 0; b = 1; #10 $display("%d & %d = %d", a, b, c);
a = 1; b = 0; #10 $display("%d & %d = %d", a, b, c);
a = 1; b = 1; #10 $display("%d & %d = %d", a, b, c);
$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. 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