Menu
Coddy logo textTech

Dumpfile And Dumpvars

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

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

dumpvars のレベルの例

レベルダンプされる内容
0module とすべての sub-module 内のすべての signals
1指定された module 内の signals のみ(sub-module は含まない)
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オンラインコンパイラ