Menu
Coddy logo textTech

Dumpfile と Dumpvars

CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 76/90。

ウェーブフォームは、時間の経過に伴う信号の変化を視覚的に表現したものです。ウェーブフォームは、シミュレーション中に信号(clkaboutなど)がどのように変化するかを表示します。横軸は時間を、縦軸は信号値(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
endmodule

Dumpvars レベルの例

レベルダンプされる内容
0モジュール内およびすべてのサブモジュール内のすべての信号
1指定されたモジュール内の信号のみ(サブモジュールは含まない)
challenge icon

チャレンジ

波形ファイルを作成するために、不足している $dumpfile$dumpvars ステートメントを追加してください。

手順:

  1. waveform.vcd という名前のファイルを作成するために $dumpfile を追加してください
  2. 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
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン