Menu
Coddy logo textTech

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

Wichtige Punkte

  • Testbench hat keine Ports
  • reg wird für Signale verwendet, die sich ändern (Eingänge zum DUT)
  • wire wird für Signale vom DUT verwendet (Ausgänge)
  • Das zu testende Modul wird DUT (Design Under Test) genannt
  • $finish beendet die Simulation

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

challenge icon

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:

  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

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 reg für Signale, die in initial-Blöcken gesteuert werden (Eingänge zum DUT)
  • Verwenden Sie wire für Signale, die vom DUT kommen (Ausgänge)
  • $finish beendet 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
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