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
posted @ 2025-03-01 21:56  MKYC  阅读(187)  评论(0)    收藏  举报