Display i Monitor
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 75 z 90.
$display i $monitor to zadania systemowe służące do wyświetlania informacji z symulacji. Pomagają zobaczyć, co dzieje się wewnątrz projektu.
$display
$display wyświetla komunikat raz w momencie wykonania.
Składnia:
$display("message", variables);Przykład:
initial begin
$display("Simulation started");
#10;
$display("Time 10");
#10;
$display("Time 20");
endWynik:
Simulation started
Time 10
Time 20$monitor
$monitor automatycznie wyświetla komunikat za każdym razem, gdy zmieni się którakolwiek z jego zmiennych.
Składnia:
$monitor("message", variables);Przykład:
initial begin
a = 0; b = 0;
$monitor("Time %0t: a=%b, b=%b", $time, a, b);
#10 a = 1;
#10 b = 1;
#10 a = 0;
endWynik:
Time 0: a=0, b=0
Time 10: a=1, b=0
Time 20: a=1, b=1
Time 30: a=0, b=1$display vs $monitor
| $display | $monitor | |
|---|---|---|
| Kiedy wyświetla | Raz po wykonaniu | Za każdym razem, gdy zmieni się zmienna |
| Ile razy | Tyle razy, ile go wywołasz | Nieprzerwanie (aż do zmiany) |
| Zastosowanie | Nagłówki, komunikaty testowe | Śledzenie zmieniających się sygnałów |
Typowe specyfikatory formatu
| Specyfikator | Znaczenie | Przykład |
|---|---|---|
%b | Binarny | $display("%b", a); |
%d | Dziesiętny | $display("%d", count); |
%h | Szesnastkowy | $display("%h", data); |
%t | Czas | $display("%t", $time); |
%0t | Czas (bez spacji) | $display("%0t", $time); |
%s | Ciąg znaków | $display("%s", "Hello"); |
Ważne zasady
| Zasada | Wyjaśnienie |
|---|---|
$display wyświetla raz | Przydaje się do nagłówków i wyników końcowych |
$monitor wyświetla przy zmianie | Przydaje się do obserwowania sygnałów |
Tylko jeden $monitor może być aktywny | Ostatni zastępuje poprzedni |
Użyj $finish, aby zatrzymać symulację | W przeciwnym razie symulacja może działać bez końca |
Wyzwanie
Dodaj brakujące instrukcje $display i $monitor do tego modułu testowego.
Co zrobić:
- Dodaj
$display, aby wyświetlić nagłówek: "Testing OR Gate" - Dodaj
$monitor, aby wyświetlać czas, x, y i z za każdym razem, gdy zmieni się dowolny sygnał. Format: "Time %0t: x=%b, y=%b, z=%b" - Dodaj na końcu
$display, aby wyświetlić "Test complete"
Spróbuj swoich sił
module or_gate (
input x,
input y,
output z
);
assign z = x | y;
endmodule
module testbench;
reg x, y;
wire z;
or_gate dut (
.x(x),
.y(y),
.z(z)
);
initial begin
// TODO: Dodaj nagłówek za pomocą $display "Testing OR Gate"
// TODO: Dodaj $monitor, aby śledzić czas oraz x, y, z
// Format: "Time %0t: x=%b, y=%b, z=%b"
// Podaj sygnały testowe
x = 0; y = 0; #10;
x = 0; y = 1; #10;
x = 1; y = 0; #10;
x = 1; y = 1; #10;
// TODO: Dodaj $display "Test complete"
$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