2016-11-28 114 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个模拟时间内执行,但我们仍然无法确定任务。如果帖子有帮助,请将其标记为答案。 –

相关问题