Menu
CoddyTech

Dumpfile 和 Dumpvars

本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 76 课,共 90 课。

波形是信号随时间变化的可视化表示。波形会显示信号(如 clk、a、b、out)在仿真过程中如何变化。横轴表示时间,纵轴表示信号值(0、1、X、Z)。
 

$dumpfile 和 $dumpvars 是用于创建波形文件(VCD 文件)的系统任务。你可以使用 GTKWave 这类波形查看器查看该文件。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

dumpvars 级别示例

级别转储的内容
0模块及其所有子模块中的所有信号
1仅指定模块中的信号(不包括子模块)
challenge icon

挑战

添加缺少的 $dumpfile 和 $dumpvars 语句,以创建波形文件。

要做什么:

  1. 添加 $dumpfile,以创建名为 waveform.vcd 的文件
  2. 添加 $dumpvars,以转储 testbench 模块中的所有信号

亲手试试

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: 添加 $dumpfile,创建 "waveform.vcd"
    
    
    // TODO: 添加 $dumpvars,导出 testbench 中的所有信号
    // 提示:$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 在线编译器