有没有办法从序列的body()中调用$dumpvars, $dumpon $dumpoff
?
可以从模块任务中进行。
我需要控制$ dumpon $ dumpoff,以便转储不会太大
另一种方法是在序列中打开top.dump_on位并在测试平台中等待此位
编辑:
我添加了一个顶级模块:
module dump ();
bit stop=1'b0;
task do_dump(string id);
fork begin
$display("DUMP START %s", id);
$dumpfile($psprintf("dump_%s.vcd", id));
$dumpvars(1, hmr_top.i_hmr.REF_CLK_IN,
hmr_top.i_hmr.RST_N,
hmr_top.i_hmr.SER_CLK,
hmr_top.i_hmr.VMKMODE,
hmr_top.i_hmr.SERIN,
hmr_top.i_hmr.SEROUT,
hmr_top.i_hmr.REF_CLK_OUT);
$dumpon;
wait(stop);
stop = 1'b0;
$dumpoff;
$display("DUMP END %s", id);
end join_none
endtask
function stop_dump();
stop = 1'b1;
endfunction
endmodule // dump
但是当我尝试调用第二个转储时,我得到了这个错误:
Warning-[TFX-DUMPVARCA] DumpVar called previously As $dumpvars was called in previous time step, ignoring this call.$dumpfile at time
#11551000 Please refer to section 18.1.2 in the IEEE Verilog Standard 1364-2001 for details on $dumpvars.
任何想法? THX
答案 0 :(得分:1)
是的,您可以在UVM序列中从body
任务调用这些系统任务。但是,如果在模拟中多次调用body
任务,您可能会收到$dumpvar
的警告。根据{{3}},第21.7.1.2节“指定要转储的变量($ dumpvars)”:
$ dumpvars任务可以根据需要随时调用 模型(例如,在各种块中),但执行所有 $ dumpvars任务应处于相同的模拟时间。
答案 1 :(得分:1)
您当然可以从序列的正文中调用$dumpon
或$dumpoff
,但如果序列是在package
(应该是)中定义的,那么您将无法指定要转储的特定分层路径名。