fsdb相关系统函数
fsdbDumpfile
功能:
指定用于存储波形数据的 FSDB 文件的名称。
语法:
systemverilog
$fsdbDumpfile(string filename);
参数:
filename:一个字符串,表示要创建的 FSDB 文件的名称。
示例:
initial begin
$fsdbDumpfile("simulation.fsdb");
end
此代码会将后续的波形数据记录到名为 simulation.fsdb 的文件中。
$fsdbDumpvars
功能:
指定要记录到 FSDB 文件中的信号或变量。
语法:
$fsdbDumpvars([depth, scope]);
参数:
- depth(可选):一个整数,表示要递归展开的层次深度。0 表示展开所有层次。
depth = 0:表示展开所有层次,即记录指定作用域下的所有信号,无论其嵌套多深。
depth = 1:只记录指定作用域下的直接子信号,不进一步展开子模块。
depth 为其他正整数 n:表示递归展开 n 层。 - scope(可选):指定要开始记录信号的模块或变量的作用域。如果省略,则默认从当前作用域开始。
- 省略参数:当省略 depth 和 scope 参数时,$fsdbDumpvars 会从当前作用域(一般是tb_top.sv)开始,记录所有层次的信号。
示例:
initial begin
// 从顶层模块 top_module 开始,展开所有层次记录信号
$fsdbDumpvars(0, top_module);
end
$fsdbDumpflush
功能:
在仿真过程中,波形数据通常会先被存储在内存缓冲区中,等到缓冲区满或者仿真结束时,才会将数据写入到 FSDB 文件。使用 $fsdbDumpflush 可以打破这种默认机制,强制立即将缓冲区中的波形数据写入到指定的 FSDB 文件中。这样做的好处是可以避免因仿真意外终止(如系统崩溃、电源故障等)而导致部分波形数据丢失。
语法:
$fsdbDumpflush;
示例:
initial begin
// 每100个时间单位强制刷新一次FSDB文件
forever begin
#100;
$fsdbDumpflush;
end
end
$fsdbDumpoff 和 $fsdbDumpon
功能:
- $fsdbDumpoff:暂停将信号波形记录到 FSDB 文件。
- $fsdbDumpon:恢复将信号波形记录到 FSDB 文件。
语法:
$fsdbDumpoff;
$fsdbDumpon;
示例:
initial begin
// 在仿真开始后的前100个时间单位记录波形
#100;
$fsdbDumpoff;
// 在200个时间单位后恢复波形记录
#200;
$fsdbDumpon;
end