【问题标题】:calling $dumpvars() from a task从任务调用 $dumpvars()
【发布时间】:2013-12-18 15:09:42
【问题描述】:

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

有什么想法吗?谢谢

【问题讨论】:

  • 第二次dump.do_dump("again");从 seq dump_again.vcd 文件中调用未创建。关键问题是在模拟期间可以创建多个转储文件@toolic
  • 这是一个完全不同的问题。阅读 IEEE 标准。我找不到在模拟期间转储多个文件的任何提及。另见$fopensearch.cpan.org/perldoc?Verilog%3A%3AVCD

标签: verilog system-verilog uvm


【解决方案1】:

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

【讨论】:

  • 我还需要更改转储文件名。编辑过的原帖,请看
【解决方案2】:

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

$dumpvars 任务可以在整个 模型(例如,在各种块中),但所有的执行 $dumpvars 任务应在同一模拟时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2017-03-29
    • 1970-01-01
    相关资源
    最近更新 更多