Menu
Coddy logo textTech

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 ModuleTestbench
ZweckImplementiert HardwareTestet das Design Module
Hat Ports?Ja (inputs und outputs)Nein (in sich geschlossen)
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

  • Testbench hat keine ports
  • reg wird für signals verwendet, die sich ändern (inputs für DUT)
  • wire wird für signals vom DUT verwendet (outputs)
  • Das getestete Modul wird DUT (Design Under Test) genannt
  • $finish beendet die Simulation

Wir werden das Erzeugen von Stimuli, das Anzeigen von Ergebnissen und andere Testbench-Funktionen in den folgenden Lektionen behandeln.

challenge icon

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:

  1. Deklarieren Sie reg für die Eingänge a und b
  2. Deklarieren Sie wire für den Ausgang c
  3. Instanziieren Sie and_gate mit dem Namen dut und 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
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