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
endmoduledumpvars 级别示例
| 级别 | 转储的内容 |
|---|---|
0 | 模块及其所有子模块中的所有信号 |
1 | 仅指定模块中的信号(不包括子模块) |
挑战
添加缺少的 $dumpfile 和 $dumpvars 语句,以创建波形文件。
要做什么:
- 添加
$dumpfile,以创建名为waveform.vcd的文件 - 添加
$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这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Verilog 在线编译器