2016-11-28 161 views
0

我認爲peek函數uvm_reg返回0模擬時間的值。由於我需要這個功能,我實現了我所有的HDL後門訪問路徑。這是我使用的代碼在我的記分牌uvm_reg peek函數需要很長時間才能返回

while (state == DISABLE) begin 
    uvm_reg_data_t val = 'hDEADBEEF; 
    uvm_status_e status; 
    `uvm_info(get_name(), "Start peek", UVM_LOW) 

    my_reg_block.my_reg.peek(status, val); 

    `uvm_info(get_name(), "End peek", UVM_LOW) 

    assert (val == 'h0) 

    @posedge(my_vif.clk); //Advance clock 

end 

我的目的是:在每一個時鐘週期,在零仿真時間,斷言my_reg是0時state==DISABLE

在仿真運行中,我注意到這很好,直到my_reg正在改變的時間。在這一點上,開始偷看 - >結束偷看大約需要10個時鐘週期。在這個時候,我的狀態不再是DISABLE,而且當然val!='h0。爲什麼peek需要很長時間才能返回?

我使用Questasim 10.4a

回答

1

這可能需要一些時間,因爲peek是SystemVerilog的任務,而不是一個函數。

功能將在0模擬時間內執行,但任務也可能有 時間延遲。

這是它的定義。

virtual task peek( output uvm_status_e status,  
output uvm_reg_data_t value,  
input string kind  = "", 
input uvm_sequence_base parent = null, 
input uvm_object extension = null, 
input string fname = "", 
input int  lineno = 0 ) 
+0

你是對的,這是一個任務,所以可能會花費模擬時間。我不確定在哪裏閱讀,總是需要0個模擬時間。這是真的還是我誤解了? – noobuntu

+1

沒有。在功能的情況下,只能說它將在0模擬時間內執行。在任務的情況下,儘管100次中有99次,它可能會在0個模擬時間內執行,但我們仍然無法確定任務。如果帖子有幫助,請將其標記爲答案。 –

相關問題