TB内置法module dumpctrl(input bit clk); string testname; initial begin testname test; if($test$plusargs(DUMP)) begin string tc_name, tc_dir; $display(Enable dump); if($value$plusargs(TESTNAME%s, tc_name)) begin if($value$plusargs(TESTDIR%s, tc_dir)) begin testname {tc_dir, /, tc_name}; $display(Get testname: %s, testname); $fsdbDumpfile({tc_dir, /, tc_name, .fsdb}); $fsdbDumpvars(0,tb,mda); $fsdbDumpvars(0,tb,packedmdastruct); $fsdbDumpon; end end end else begin $display(Disable dump); end end endmodule module tb; dumpctrl udumpctrl(clk); endmodule$fsdbDumpon - 打开 FSDB dumping$fsdbDumpoff - 关闭 FSDB dumping$fsdbDumpfile(“FSDB_NAME”,Limit_Size) - 指定dump文件fsdb_name 为user指定的文件名Limit_Size 为dump波形的最大size$fsdbDumpvars(depth,instance,“option”) dump指定模块的信号2 通过UCLI的方式在命令行dumpmodule dumpctrl(input bit clk); string testname; initial begin testname test; if($test$plusargs(DUMP)) begin string tc_name, tc_dir; $display(Enable dump); if($value$plusargs(TESTNAME%s, tc_name)) begin if($value$plusargs(TESTDIR%s, tc_dir)) begin testname {tc_dir, /, tc_name}; $display(Get testname: %s, testname); end end end else begin $display(Disable dump); end end新建一个tcl文件dump_fsdb.dorun 0 #选择从什么时候可以dump get tb.udumpctrl.testname set name [get tb.udumpctrl.testname] if { $name test } { puts Waveform dump off } else { dump -file $name.fsdb -type FSDB dump -flush FSDB0 dump -glitch on -fid FSDB0 dump -add tb -depth 0 -fsdb_opt allsvaparameter -fid FSDB0 #dump的范围 dump -add.................................. #如果有多个层次需要dump可以继续往下写也可以写成一个函数调用 } run上述的FSDB0 is returned by the dump -file command.常用语法dump [-file filename] [-type FSDB|EVCD|VPD] [-locking] dump -add list_of_nids [-fid fid] [-depth levels] [-aggregates] [-ports|-in|-out|-inout] [-filterfilter string] [-msv on|off] [-iN|-iall] [-isub][-vN|-vall] [-va|-vai|-vav] dump -flush fid [-fid fid]仿真命令选项为vcs-sverilog-debug_accall-ucli-i dump_fsdb.do
VCS dump波形的两种方式
发布时间:2026/6/15 1:34:25
TB内置法module dumpctrl(input bit clk); string testname; initial begin testname test; if($test$plusargs(DUMP)) begin string tc_name, tc_dir; $display(Enable dump); if($value$plusargs(TESTNAME%s, tc_name)) begin if($value$plusargs(TESTDIR%s, tc_dir)) begin testname {tc_dir, /, tc_name}; $display(Get testname: %s, testname); $fsdbDumpfile({tc_dir, /, tc_name, .fsdb}); $fsdbDumpvars(0,tb,mda); $fsdbDumpvars(0,tb,packedmdastruct); $fsdbDumpon; end end end else begin $display(Disable dump); end end endmodule module tb; dumpctrl udumpctrl(clk); endmodule$fsdbDumpon - 打开 FSDB dumping$fsdbDumpoff - 关闭 FSDB dumping$fsdbDumpfile(“FSDB_NAME”,Limit_Size) - 指定dump文件fsdb_name 为user指定的文件名Limit_Size 为dump波形的最大size$fsdbDumpvars(depth,instance,“option”) dump指定模块的信号2 通过UCLI的方式在命令行dumpmodule dumpctrl(input bit clk); string testname; initial begin testname test; if($test$plusargs(DUMP)) begin string tc_name, tc_dir; $display(Enable dump); if($value$plusargs(TESTNAME%s, tc_name)) begin if($value$plusargs(TESTDIR%s, tc_dir)) begin testname {tc_dir, /, tc_name}; $display(Get testname: %s, testname); end end end else begin $display(Disable dump); end end新建一个tcl文件dump_fsdb.dorun 0 #选择从什么时候可以dump get tb.udumpctrl.testname set name [get tb.udumpctrl.testname] if { $name test } { puts Waveform dump off } else { dump -file $name.fsdb -type FSDB dump -flush FSDB0 dump -glitch on -fid FSDB0 dump -add tb -depth 0 -fsdb_opt allsvaparameter -fid FSDB0 #dump的范围 dump -add.................................. #如果有多个层次需要dump可以继续往下写也可以写成一个函数调用 } run上述的FSDB0 is returned by the dump -file command.常用语法dump [-file filename] [-type FSDB|EVCD|VPD] [-locking] dump -add list_of_nids [-fid fid] [-depth levels] [-aggregates] [-ports|-in|-out|-inout] [-filterfilter string] [-msv on|off] [-iN|-iall] [-isub][-vN|-vall] [-va|-vai|-vav] dump -flush fid [-fid fid]仿真命令选项为vcs-sverilog-debug_accall-ucli-i dump_fsdb.do