Dumpfile And Dumpvars
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 76/90。
波形は時間の経過に伴うsignalsの変化を視覚的に表したものです。波形は、シミュレーション中にsignals(clk、a、b、outなど)がどのように変化するかを表示します。横軸は時間を、縦軸はsignalsの値(0、1、X、Z)を示します。
$dumpfile と $dumpvars は、GTKWave のような波形ビューアーで表示できるwaveform file(VCD ファイル)を作成するために使用されるシステムタスクです。VCD は Value Change Dump の略です。これは、シミュレーション中のすべての信号の変化を記録するファイルです。このファイルを波形ビューアーで開くと、信号を視覚的に確認できます。
$dumpfile
$dumpfile は作成する波形ファイルの名前を指定します。
構文:
$dumpfile("filename.vcd");例:
$dumpfile("my_waveform.vcd");これは my_waveform.vcd という名前の file を作成します。
$dumpvars
$dumpvars は、波形ファイルに記録する信号を指定します。
構文:
$dumpvars(level, module_name);| パラメータ | 意味 |
|---|---|
level | ダンプする階層レベルの数(0 = すべてのレベル) |
module_name | 信号をダンプする対象のモジュール |
注: 階層とは、ほかのモジュール内にあるモジュールを意味します。0を使用するとトップモジュールとその内部にあるすべてのモジュールからすべてのsignalsがdumpされ、1を使用するとトップモジュールのsignalsのみがdumpされます。
一般的な使用方法
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 | module とすべての sub-module 内のすべての signals |
1 | 指定された module 内の signals のみ(sub-module は含まない) |
チャレンジ
波形ファイルを作成するために、不足している $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 を追加
// ヒント: $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このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge14Testbench Basics
What Is A TestbenchCreating StimulusDisplay And MonitorDumpfile And DumpvarsUsing System TasksRecap - Full Testbench3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logic自分で練習してみよう: Verilogオンラインコンパイラ