Menu
Coddy logo textTech

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

 DesignmodulTestbench
ZweckImplementiert HardwareTestet das Designmodul
Hat Ports?Ja (Eingänge und Ausgänge)Nein (eigenständig)
Synthetisierbar?JaNein (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
endmodule

Wichtige Punkte

  • Der Prüfstand hat keine Ports
  • reg wird für sich ändernde Signale verwendet (Eingänge zu DUT)
  • wire wird für Signale von DUT verwendet (Ausgänge)
  • Das getestete Modul heißt DUT (Design Under Test).
  • $finish beendet die Simulation.

In den folgenden Lektionen behandeln wir das Erstellen von Stimuli, die Anzeige von Ergebnissen und weitere Funktionen einer Testbench.

challenge icon

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:

  1. Deklariere reg für die Eingänge a und b
  2. Deklariere wire für den Ausgang c
  3. Instanziiere and_gate mit dem Namen dut und 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
endmodule
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen

Übe selbstständig: Online-Verilog-Compiler