Dumpfile と Dumpvars
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 76/90。
Waveform(波形)は、時間の経過に伴う信号の変化を視覚的に表したものです。Waveformはシミュレーション中に信号(clk、a、b、out など)がどのように変化するかを表示します。横軸は時間を示し、縦軸は信号の値(0、1、X、Z)を示します。
$dumpfile と $dumpvars は、GTKWave などの波形ビューアで表示できる波形ファイル (VCD ファイル) を作成するために使用されるシステムタスクです。VCD は Value Change Dump の略です。これは、シミュレーション中のすべての信号の変化を記録するファイルです。このファイルを波形ビューアで開くことで、信号を視覚的に確認できます。
$dumpfile
$dumpfile は作成する波形ファイルの指定を行います。
構文:
$dumpfile("filename.vcd");例:
$dumpfile("my_waveform.vcd");これにより、my_waveform.vcd というファイルが作成されます。
$dumpvars
$dumpvars は、waveform file に記録する signals を指定します。
構文:
$dumpvars(level, module_name);| パラメータ | 意味 |
|---|---|
level | ダンプする階層レベルの数(0 = すべてのレベル) |
module_name | どのモジュールからシグナルをダンプするか |
注: 階層構造とは、モジュールの中に他のモジュールが含まれていることを意味します。0 を指定するとトップモジュールおよびその内部にあるすべてのモジュールからすべての信号をダンプし、1 を指定するとトップモジュールからのみ信号をダンプします。
一般的な使用方法
initial begin
$dumpfile("dump.vcd");
$dumpvars(0, testbench);
end$dumpfile("dump.vcd")→dump.vcdという名前のファイルを作成します$dumpvars(0, testbench)→ モジュールtestbenchおよびすべてのサブモジュール内のすべての信号をダンプします
テストベンチの例
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
endmoduleDumpvars の Level の例
| Level | ダンプされる対象 |
|---|---|
0 | モジュール内およびすべてのサブモジュール内のすべての信号 |
1 | 指定されたモジュール内の信号のみ(サブモジュールは含まない) |
チャレンジ
波形ファイルを作成するために、不足している $dumpfile と $dumpvars ステートメントを追加してください。
作業手順:
waveform.vcdという名前のファイルを作成するために$dumpfileを追加しますtestbenchモジュール内のすべてのシグナルをダンプするために$dumpvarsを追加します
自分で試してみよう
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: "waveform.vcd" を作成するために $dumpfile を追加
// TODO: testbench 内のすべての信号をダンプするために $dumpvars を追加
// Hint: $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
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。