Was ist ein Testbench
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 73 von 90.
Eine Testbench ist ein spezielles Verilog-Modul, das zum Testen eines anderen Moduls verwendet wird. Sie stellt deinem Design Eingaben bereit und überprüft, ob die Ausgaben korrekt sind.
Warum brauchen wir eine Testbench?
Wenn du ein Modul erstellst, musst du sicherstellen, dass es korrekt funktioniert. Eine Testbench ermöglicht es dir:
- Verschiedene Eingabewerte auf dein Modul anzuwenden
- Die Ausgaben zu beobachten
- Überprüfe, ob die Ausgaben deinen Erwartungen entsprechen
- Führe dies automatisch ohne manuelles Testen durch
Testbench vs. Designmodul
| Designmodul | Testbench | |
|---|---|---|
| Zweck | Implementiert Hardware | Testet das Designmodul |
| Hat Ports? | Ja (Eingänge und Ausgänge) | Nein (eigenständig) |
| 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
- Der Prüfstand hat keine Ports
regwird für sich ändernde Signale verwendet (Eingänge zu DUT)wirewird für Signale von DUT verwendet (Ausgänge)
- Das getestete Modul heißt DUT (Design Under Test).
$finishbeendet die Simulation.
In den folgenden Lektionen behandeln wir das Erstellen von Stimuli, die Anzeige von Ergebnissen und weitere Funktionen einer Testbench.
Aufgabe
Dir wird ein AND-Gatter-Modul gegeben. Deine Aufgabe ist es, die fehlenden Teile zu seinem Testbench hinzuzufügen.
Aufgabe:
Füge die folgenden Teile zum Testbench hinzu:
- Deklariere
regfür die Eingängeaundb - Deklariere
wirefür den Ausgangc - Instanziiere
and_gatemit dem Namendutund verbinde 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 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. 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