Menu
Coddy logo textTech

Czym jest testbench

Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 73 z 90.

Testbench to specjalny moduł Verilog używany do testowania innego modułu. Dostarcza wejścia do twojego projektu i sprawdza, czy wyjścia są poprawne.

Dlaczego potrzebujemy środowiska testowego?

Tworząc moduł, musisz upewnić się, że działa poprawnie. Środowisko testowe pozwala:

  • Przekazywać różne wartości wejściowe do modułu
  • Obserwować wyjścia
  • Sprawdź, czy wyjścia są zgodne z oczekiwaniami
  • Zrób to automatycznie, bez ręcznego testowania

Moduł projektu a testbench

 Moduł projektuTestbench
CelImplementuje sprzętTestuje moduł projektu
Ma porty?Tak (wejścia i wyjścia)Nie (samodzielny)
Syntezowalny?TakNie (tylko symulacja)

Przykład prostego testbencha

module testbench;              // Brak portów!

  // Wejścia i wyjścia pochodzą z testowanego modułu (DUT).
  reg a, b;                    // reg dla wejść
  wire c;                      // wire dla wyjścia
  

  // To jest instancja modułu — tworzy kopię modułu and_gate i nadaje jej nazwę dut
  and_gate dut (               // Utwórz instancję DUT
    .a(a),
    .b(b),
    .c(c)
  );

  // To jest blok initial, który przypisuje wartości testowe do wejść testowanego modułu.
  initial begin                // Przypisz wartości testowe
    a = 0; b = 0; #10;
    a = 0; b = 1; #10;
    a = 1; b = 0; #10;
    a = 1; b = 1; #10;
    $finish;
  end
endmodule

Najważniejsze informacje

  • Testbench nie ma portów
  • reg jest używane dla sygnałów, które się zmieniają (wejścia do DUT)
  • wire jest używane dla sygnałów z DUT (wyjścia)
  • Testowany moduł nazywa się DUT (Design Under Test)
  • $finish kończy symulację

W kolejnych lekcjach omówimy tworzenie bodźców, wyświetlanie wyników i inne funkcje testbencha.

challenge icon

Wyzwanie

Otrzymujesz moduł bramki AND. Twoim zadaniem jest uzupełnienie brakujących elementów w testbench.

Co zrobić:

Dodaj do testbench następujące elementy:

  1. Zadeklaruj reg dla wejść a i b
  2. Zadeklaruj wire dla wyjścia c
  3. Utwórz instancję and_gate o nazwie dut i połącz porty

Spróbuj swoich sił

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

module testbench;
  
  // Zadanie 1: Zadeklaruj reg dla wejść a i b
  
  
  // Zadanie 2: Zadeklaruj wire dla wyjścia c
  

  // Zadanie 3: Utwórz instancję and_gate o nazwie dut
  // Podłącz .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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Verilog online