Dumpfile と Dumpvars
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 76/90。
ウェーブフォームは、時間の経過に伴う信号の変化を視覚的に表現したものです。ウェーブフォームは、シミュレーション中に信号(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 は、波形ファイルに記録する信号を指定します。
構文:
$dumpvars(level, module_name);| パラメータ | 説明 |
|---|---|
level | ダンプする階層レベルの数 (0 = すべてのレベル) |
module_name | どのモジュールから信号をダンプするか |
注:階層(Hierarchy)とは、他のモジュール内にあるモジュールのことを指します。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 レベルの例
| レベル | ダンプされる内容 |
|---|---|
0 | モジュール内およびすべてのサブモジュール内のすべての信号 |
1 | 指定されたモジュール内の信号のみ(サブモジュールは含まない) |
チャレンジ
波形ファイルを作成するために、不足している $dumpfile と $dumpvars ステートメントを追加してください。
手順:
waveform.vcdという名前のファイルを作成するために$dumpfileを追加してくださいtestbenchモジュール内のすべての信号をダンプするために$dumpvarsを追加してください
チートシート
initialブロック内で$dumpfileと$dumpvarsを使用して、GTKWaveなどのツールで表示するためのVCD (Value Change Dump)波形ファイルを生成します。
initial begin
$dumpfile("dump.vcd"); // VCDファイルを作成します
$dumpvars(0, testbench); // testbenchおよびサブモジュール内のすべての信号をダンプします
end$dumpvars(level, module_name)のレベル:
0— モジュール内およびすべてのサブモジュール内のすべての信号1— 指定されたモジュール内の信号のみ(サブモジュールは含まない)
自分で試してみよう
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 を追加してください
// ヒント: $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このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。