Menu
CoddyTech

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信号をダンプするモジュール

注: 階層とは、ほかのモジュールの中にあるモジュールのことです。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

ダンプ変数レベルの例

レベルダンプされる内容
0モジュールとすべてのサブモジュール内のすべての信号
1指定したモジュール内の信号のみ(サブモジュールを除く)
challenge icon

チャレンジ

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

やること:

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

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

基礎のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ