从任务中调用$ dumpvars()

时间:2013-12-18 15:09:42

标签: verilog system-verilog uvm

有没有办法从序列的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

2 个答案:

答案 0 :(得分:1)

是的,您可以在UVM序列中从body任务调用这些系统任务。但是,如果在模拟中多次调用body任务,您可能会收到$dumpvar的警告。根据{{​​3}},第21.7.1.2节“指定要转储的变量($ dumpvars)”:

  

$ dumpvars任务可以根据需要随时调用   模型(例如,在各种块中),但执行所有   $ dumpvars任务应处于相同的模拟时间。

答案 1 :(得分:1)

您当然可以从序列的正文中调用$dumpon$dumpoff,但如果序列是在package(应该是)中定义的,那么您将无法指定要转储的特定分层路径名。