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ł projektu | Testbench | |
|---|---|---|
| Cel | Implementuje sprzęt | Testuje moduł projektu |
| Ma porty? | Tak (wejścia i wyjścia) | Nie (samodzielny) |
| Syntezowalny? | Tak | Nie (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
endmoduleNajważniejsze informacje
- Testbench nie ma portów
regjest używane dla sygnałów, które się zmieniają (wejścia do DUT)wirejest używane dla sygnałów z DUT (wyjścia)
- Testowany moduł nazywa się DUT (Design Under Test)
$finishkończy symulację
W kolejnych lekcjach omówimy tworzenie bodźców, wyświetlanie wyników i inne funkcje testbencha.
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:
- Zadeklaruj
regdla wejśćaib - Zadeklaruj
wiredla wyjściac - Utwórz instancję
and_gateo nazwieduti 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
endmoduleTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Wprowadzenie
Czym jest VerilogSprzęt a oprogramowanieTwój pierwszy modułKomentarzePoziomy abstrakcji projektu4Operatory, część 1
Operatory arytmetyczneOperator moduloOperatory porównaniaPowtórka — prosta matematykaOperatory bitowe7Przypisania i bramki
Przypisanie ciągłePrzypisanie z operatoramiWbudowane prymitywy bramekBramki AND, OR i NOTBramki XOR i XNORPodsumowanie — układ z bramek logicznych10Podejmowanie decyzji
Instrukcja ifIf-elsePowtórka – prosty komparatorInstrukcja caseCaseX i CaseZPowtórka – projektowanie ALU13Odmierzanie czasu i opóźnienia
Czym są opóźnieniaOpóźnienia bramekOpóźnienia przypisańDyrektywa timescaleGenerowanie zegaraPodsumowanie — kontrola czasu2Typy danych
Typ WireTyp RegLiczby całkowite i rzeczywisteWektoryTabliceParametryPowtórka — deklarowanie sygnałów5Operatory — część 2
Operatory logiczneOperatory redukcjiOperatory przesunięciaOperator konkatenacjiOperator warunkowyPowtórzenie — wyzwanie z operatorami11Pętle
Pętla forPętla whilePętla repeatPętla nieskończonaInstrukcja wyłączaniaPowtórka — wzorce pętli14Podstawy testbencha
Czym jest testbenchTworzenie sygnałów testowychDisplay i MonitorDumpfile i DumpvarsKorzystanie z zadań systemowychPodsumowanie — pełny testbench3System liczbowy
Reprezentacja binarnaLiczby o określonej szerokościLiczby o nieokreślonej szerokościLiczby ujemneWartości specjalne X i ZPodsumowanie — formaty liczb6Moduły
Struktura modułuPorty wejściowe i wyjściowePorty dwukierunkoweInstancjonowanie modułuMapowanie portów według nazwMapowanie portów według kolejnościPodsumowanie — zbuduj moduł9Bloki proceduralne
Blok alwaysBlok initialLista czułościPrzypisanie blokującePrzypisanie nieblokującePodsumowanie — always a initial12Projekt multipleksera
Projekt multipleksera 2 do 1Projekt multipleksera 4 do 115Sterownik sygnalizacji świetlnej
Definiowanie stanówLogika maszyny stanówPoćwicz samodzielnie: Kompilator Verilog online