Korzystanie z zadań systemowych
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 77 z 90.
Zadania systemowe to wbudowane polecenia w Verilogu, które zaczynają się od znaku dolara ($). Wykonują przydatne funkcje, takie jak wyświetlanie komunikatów, kończenie symulacji i tworzenie plików przebiegów.
Omówiliśmy już $display, $monitor, $dumpfile i $dumpvars na poprzednich lekcjach. W tej lekcji przyjrzymy się dodatkowym zadaniom systemowym, które są przydatne w testbenchach.
Dodatkowe zadania systemowe
| Zadanie systemowe | Cel |
|---|---|
$time | Zwróć bieżący czas symulacji |
$finish | Zakończ symulację |
$stop | Wstrzymaj symulację |
$random | Wygeneruj losową liczbę |
$time
Zwraca bieżący czas symulacji. Przydatne do śledzenia, kiedy występują zdarzenia.
$display("Current time is %0t", $time);$finish
Kończy symulację. Zawsze używaj na końcu swojego testbencha.
$finish;$stop
Wstrzymuje symulację. Można ją wznowić za pomocą polecenia symulatora. Przydatne podczas debugowania.
$stop;$random
Generuje losową liczbę. Przydatne do tworzenia losowych bodźców testowych.
reg [7:0] rand_value;
rand_value = $random;Przykład użycia wielu zadań systemowych
module system_tasks_demo;
reg [7:0] data;
integer i;
initial begin
$display("Simulation started at time %0t", $time);
for (i = 0; i < 5; i = i + 1) begin
data = $random;
$display("Random value %d: %b", i, data);
end
$stop;
#10 $display("Resumed at time %0t", $time);
$display("Simulation finished at time %0t", $time);
$finish;
end
endmoduleWyzwanie
Dodaj do tego testbencha brakujące zadania systemowe.
Co należy zrobić:
- Dodaj
$display, aby wypisać aktualny czas na początku - Dodaj
$display, aby wypisać aktualny czas na końcu - Dodaj
$finish, aby zakończyć symulację
Spróbuj swoich sił
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// TODO: Dodaj $display z bieżącym czasem na początku
// Format: "Start time: %0t"
$monitor("Time %0t: a=%b, b=%b, c=%b", $time, a, b, c);
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
// TODO: Dodaj $display z bieżącym czasem na końcu
// Format: "End time: %0t"
// TODO: Dodaj $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