1

有没有办法$dumpvars, $dumpon $dumpoff从序列的 body() 调用?可以从模块任务中获得。我需要控制 $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.

有任何想法吗 ?谢谢

4

2 回答 2

1

body是的,您可以从UVM 序列中的任务中调用这些系统任务。但是,如果body在模拟中多次调用该任务,您可能会收到针对$dumpvar. 根据IEEE Std 1800-2012第 21.7.1.2 节“指定要转储的变量 ($dumpvars)”:

$dumpvars 任务可以在整个模型中根据需要随时调用(例如,在各个块中),但所有 $dumpvars 任务的执行应在同一仿真时间。

于 2013-12-18T15:26:17.670 回答
1

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

于 2013-12-18T16:43:48.177 回答