fsdbDumpfile - 指定FSDB文件名
$fsdbDumpfile(“”)
fsdbDumpvars - Dump指定的变量
fsdbDumpSingle - Dump指定的信号
fsdbDumpvariable - Dump指定的VHDL变量
fsdbSwitchDumpFile - 将dumping切换到另一个FSDB文件
$fsdbSwitchDumpFile(“”)
fsdbAutoSwitchDumpfile - 限制文件大小并在数据量过大时自动创建新的FSDB文件
$fsdbAutoSwitchDumpfile(, “”,< number of file>)
fsdbDumpflush - Force to Dump Result to FSDB file
fsdbDumpMem - Dump 指定的memory的内容
$fsdbDumpMem(, [, []])
$fsdbDumpon - 打开 FSDB dumping
$fsdbDumpoff - 关闭 FSDB dumping
1: initial
2: begin
3: $fsdbDumpfile(“wave_out.fsdb”);
4: $fsdbDumpvars;
5: end
这样,在仿真时就会在当前目录生成wave_out.fsdb波形文件。
如果波形文件比较大的话,打开时会占用很多内存,这时可以把波形文件分段输出,调试时只要载入指定时间段的波形文件就可以了,将第三行语句替换为如下语句:
3: $fsdbAutoSwitchDumpfile(25, “test.fsdb”, 150);
这条语句表示将fsdb文件分成每个大小为25MB的文件,最多输出150个文件。每个文件的仿真时间范围记录在test.log文件中。
initial begin
$timeformat(…);
$fsdbAutoSwitchDumpfile(…);
$fsdbDumpvars(…);
// 条件表达式1
$fsdbDumpoff;
// 条件表达式2
$fsdbDumpon;
end
-
我们比较常用的一般还有 v a l u e value valueplusargs这个task,在test_top中: v a l u e value valueplusargs(“casename=%s”,casename)
通过脚本在run的时候把casename传递进去(给vcs/nc SIM_ARG: +casename= T e s t c a s e n a m e . f s d b ) 便 于 如 果 同 时 跑 多 个 t e s t c a s e 的 时 候 可 以 同 时 d u m p f s d b , 另 外 就 是 跳 过 一 些 时 间 开 始 d u m p ( S I M A R G : + t i m e = Testcase_name.fsdb) 便于如果同时跑多个testcase的时候可以同时dumpfsdb,另外就是跳过一些时间开始dump(SIM_ARG: +time= Testcasename.fsdb)便于如果同时跑多个testcase的时候可以同时dumpfsdb,另外就是跳过一些时间开始dump(SIMARG:+time=start_time)
v a l u e value valueplusargs(“time=%d”,skip)
#skip -
project中每个人关注的module不同,为了频繁去修改test_top的dump,一般也会把需要dump的内容用dumplist的file来实现
$fsdbDumpvarsToFile(“dump.list”);
比如dump.list内容:(#用于注释)
0 test_top
#1 test_top
#0 test_top.dut
#0 test_top.dut.m1
#0 test_top.dut.m2
像我们用的时候一般是在test_top.v添加相关的语句:
reg [100:0] casename;
integer skip, i;
initial begin
if(
t
e
s
t
test
testplusargs(“dumpfsdb”) ) begin
if(
v
a
l
u
e
value
valueplusargs(“time=%d”, skip) )
#skip;
if( $value$plusargs ("casename=%s",casename) )
$fsdbAutoSwitchDumpfile(300, casename, 30);
else
$fsdbAutoSwitchDumpfile(300,"./test_top.fsdb",40);
$fsdbDumpvarsToFile("dump.list");
end
end
- 跑仿真的时候,对应的如果要从5000ns(时间单位根timescale有关)处开始dump波形,给vcs/nc的参数
+dumpfsdb +time= 5000 +casename= testcase1.fsdb
其中的testcase1一般我们都会在脚本处理后跟case名字关联起来,这样子跑完之后就会从5000开始dump
testcase1_000.fsdb, testcase1_001.fsdb这样子, - 另外那个dump.list(名字可以随便取)里面的设定就跟平常的设定dump的层次设置一样了
层次 路径名
0 test_top.dut.m1
为了处理fsdb文件过大的问题,有如下的方法:
(1)使用fsdbAutoSwitchDumpfile命令将fsdb文件存成1个个的小文件,这样verdi就可以容易打开。这是通过将大文件拆成小文件来解决。
(2)使用fsdbDumpoff和fsdbDumpon命令来dump指定时刻的波形,不必dump所有仿真时刻的波形来减小文件大小。这是通过减少dump时间来减少文件大小。
(3)使用fsdbDumpvars和fsdbDumpSingle 命令来dump指定信号的波形。这是通过减少dump信号的数量来减少文件大小。