2013-12-18 34 views
0

有沒有辦法從序列的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

+1

你試過了嗎?你有錯誤嗎? – toolic

+0

這不是一個錯誤。這是一個警告,它很清楚地描述了問題所在。請澄清你的問題。 – toolic

+0

第二次dump.do_dump(「again」);從seq中調用dump_again.vcd文件未創建。在關鍵問題是可以在模擬過程中創建多個轉儲文件@toolic – Meir

回答

1

是的,您可以在UVM序列中從body任務中調用這些系統任務。但是,如果在仿真中多次調用body任務,則可能會收到有關$dumpvar的警告。按照IEEE Std 1800-2012,第21.7.1.2「指定變量轉儲($ dumpvars)」:

的$ dumpvars任務按需要整個 模型可以經常調用的(例如,不同的塊中) ,但所有 $ dumpvars任務的執行應處於相同的模擬時間。

+0

我試過了,它不起作用。 $ dumpvars可以從模塊任務調用,但它似乎不是從一個類任務(也許只能從靜態任務?)@ dave_59 – Meir

+0

@ dave_59:它適用於我與VCS和Incisive。你在用什麼模擬器? – toolic

+0

VCS:G-2012.09-SP1-1_Full64。我編輯了原始帖子請參閱@toolic – Meir

1

你當然可以撥打$dumpon$dumpoff從序列的身體,但如果序列是在package定義(因爲它應該是),您將不能指定一個特定的階層路徑傾倒。

+0

我還需要更改轉儲文件的名稱。編輯原文,請參閱 – Meir