Was ist eine Testbench
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 73 von 90.
Ein testbench ist ein spezielles Verilog-Modul, das verwendet wird, um ein anderes Modul zu testen. Es stellt inputs für Ihr Design bereit und prüft, ob die outputs korrekt sind.
Warum brauchen wir eine Testbench?
Wenn Sie ein Modul bauen, müssen Sie sicherstellen, dass es korrekt funktioniert. Eine Testbench ermöglicht Ihnen:
- Verschiedene Eingabewerte auf Ihr Modul anzuwenden
- Die Ausgaben zu beobachten
- Überprüfen Sie, ob die Ausgaben Ihren Erwartungen entsprechen
- Machen Sie dies automatisch ohne manuelles Testen
Testbench vs Design Module
| Design Module | Testbench | |
|---|---|---|
| Zweck | Implementiert Hardware | Testet das Design Module |
| Hat Ports? | Ja (inputs und outputs) | Nein (in sich geschlossen) |
| Synthetisierbar? | Ja | Nein (nur Simulation) |
Einfaches Testbench-Beispiel
module testbench; // Keine Ports!
// Die Eingänge und Ausgänge kommen von dem Modul, das wir testen (dem DUT).
reg a, b; // reg für Eingänge
wire c; // wire für Ausgang
// Dies ist eine Modulinstanziierung — sie erstellt eine Kopie des and_gate-Moduls und nennt sie dut
and_gate dut ( // DUT instanziieren
.a(a),
.b(b),
.c(c)
);
// Dies ist ein initial-Block, der Testwerte auf die Eingänge des zu testenden Moduls anwendet.
initial begin // Testwerte anwenden
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 signals verwendet, die sich ändern (inputs für DUT)wirewird für signals vom DUT verwendet (outputs)
- Das getestete Modul wird DUT (Design Under Test) genannt
$finishbeendet die Simulation
Wir werden das Erzeugen von Stimuli, das Anzeigen von Ergebnissen und andere Testbench-Funktionen in den folgenden Lektionen behandeln.
Aufgabe
Ihnen wird ein AND-Gate-Modul bereitgestellt. Ihre Aufgabe ist es, die fehlenden Teile zu dessen Testbench hinzuzufügen.
Was zu tun ist:
Fügen Sie der 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
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 Eingänge a und b
// Aufgabe 2: Deklariere wire für Ausgang c
// Aufgabe 3: Instanziere and_gate mit 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