Dumpfile i Dumpvars
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 76 z 90.
Przebiegi są wizualną reprezentacją zmian sygnałów w czasie. Przebieg pokazuje, jak sygnały (takie jak clk, a, b, out) zmieniają się podczas symulacji. Oś pozioma przedstawia czas, a oś pionowa przedstawia wartości sygnałów (0, 1, X, Z).
$dumpfile i $dumpvars to zadania systemowe używane do tworzenia pliku przebiegu (pliku VCD), który możesz wyświetlić w przeglądarce przebiegów, takiej jak GTKWave. VCD to skrót od Value Change Dump. Jest to plik, w którym zapisywane są wszystkie zmiany sygnałów podczas symulacji. Możesz otworzyć ten plik w przeglądarce przebiegów, aby zobaczyć sygnały w formie wizualnej.
$dumpfile
$dumpfile określa nazwę tworzonego pliku przebiegu.
Składnia:
$dumpfile("filename.vcd");Przykład:
$dumpfile("my_waveform.vcd");Tworzy to plik o nazwie my_waveform.vcd.
$dumpvars
$dumpvars określa, które sygnały mają być zapisywane w pliku przebiegu.
Składnia:
$dumpvars(level, module_name);| Parametr | Znaczenie |
|---|---|
level | Ile poziomów hierarchii zrzucić (0 = wszystkie poziomy) |
module_name | Z którego modułu zrzucać sygnały |
Uwaga: Hierarchia oznacza moduły wewnątrz innych modułów. Użycie 0 zapisuje wszystkie sygnały z modułu najwyższego poziomu i każdego modułu znajdującego się wewnątrz niego, a użycie 1 zapisuje tylko sygnały z modułu najwyższego poziomu.
Typowe zastosowanie
initial begin
$dumpfile("dump.vcd");
$dumpvars(0, testbench);
end$dumpfile("dump.vcd")→ tworzy plik o nazwiedump.vcd$dumpvars(0, testbench)→ zapisuje wszystkie sygnały w moduletestbenchi wszystkich podmodułach
Przykład z modułem testującym
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
$dumpfile("dump.vcd");
$dumpvars(0, testbench);
$display("Creating waveform file...");
x = 0; y = 0; #10;
x = 0; y = 1; #10;
x = 1; y = 0; #10;
x = 1; y = 1; #10;
$finish;
end
endmodulePrzykłady poziomów dumpvars
| Poziom | Co jest zrzucane |
|---|---|
0 | Wszystkie sygnały w module i wszystkich podmodułach |
1 | Tylko sygnały w określonym module (bez podmodułów) |
Wyzwanie
Dodaj brakujące instrukcje $dumpfile i $dumpvars, aby utworzyć plik przebiegu sygnałów.
Co zrobić:
- Dodaj
$dumpfile, aby utworzyć plik o nazwiewaveform.vcd - Dodaj
$dumpvars, aby zrzucić wszystkie sygnały w moduletestbench
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 $dumpfile, aby utworzyć "waveform.vcd"
// TODO: Dodaj $dumpvars, aby zapisać wszystkie sygnały w testbench
// Wskazówka: $dumpvars(0, testbench);
if ($test$plusargs("vcd")) begin
$display("VCD file created successfully");
end
$display("Simulation running...");
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
$display("Simulation complete. Open waveform.vcd");
$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