Podsumowanie — pełny testbench
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 78 z 90.
Wyzwanie
To wyzwanie sprawdza wszystko, czego nauczyłeś się o testbenchach: pobudzanie, wyświetlanie, monitorowanie, dumpfile, dumpvars i zadania systemowe. Otrzymujesz moduł bramki XOR do przetestowania.
Co zrobić:
Utwórz kompletny testbench, który:
- Deklaruje sygnały (
regdla wejść,wiredla wyjścia) - Tworzy instancję bramki XOR o nazwie
dut - Tworzy plik przebiegu o nazwie
xor_waveform.vcd - Zapisuje wszystkie sygnały w testbenchu
- Wyświetla nagłówek: "Testing XOR Gate"
- Używa
$monitor, aby śledzić czas, x, y i z - Testuje wszystkie cztery kombinacje wejściowe (00, 01, 10, 11), stosując opóźnienie
#10między każdą z nich - Na końcu wyświetla "Test complete"
- Kończy symulację za pomocą
$finish
Spróbuj swoich sił
module xor_gate (
input x,
input y,
output z
);
assign z = x ^ y;
endmodule
module testbench;
// TODO: Zadeklaruj reg dla x i y
// TODO: Zadeklaruj wire dla z
// TODO: Utwórz instancję xor_gate o nazwie dut
// Połącz .x(x), .y(y), .z(z)
initial begin
// TODO: Dodaj $dumpfile "xor_waveform.vcd"
// TODO: Dodaj $dumpvars (0, testbench)
// TODO: Dodaj $display "Testing XOR Gate"
// TODO: Dodaj $monitor dla czasu oraz x, y, z
// Format: "Time %0t: x=%b, y=%b, z=%b"
// TODO: Dodaj sygnały testowe dla wszystkich czterech kombinacji
// 00, 01, 10, 11 z opóźnieniem #10
// TODO: Dodaj $display "Test complete"
// TODO: Dodaj $finish
end
endmoduleWszystkie 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