Menu
Coddy logo textTech

Dumpfile と Dumpvars

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

Waveform(波形)は、時間の経過に伴う信号の変化を視覚的に表したものです。Waveformはシミュレーション中に信号(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 は、waveform file に記録する signals を指定します。

構文:

$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

Dumpvars の Level の例

Levelダンプされる対象
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 を追加
    // Hint: $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腕試し

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

基礎のすべてのレッスン