2014-01-27 19 views
1

在下面的run_phase中添加以下两条语句时,在UVM监视器中,在tr.pkt中采样的值按照data_in正确。但是,如果语句顺序颠倒,tr.pkt采样不正确('h0采样)。有人看过吗?根据两条语句的顺序,UVM监视器的行为不同

tr.pkt.push_back(this.wr_if.mon_clk_blk.data_in); 
`uvm_info("",$sformatf("Write Monitor data = %0h", this.wr_if.mon_clk_blk.data_in), UVM_NONE) 

回答

0

最有可能data_in在同一时间步长的UVM montitor的执行被更新。 在调度程序中,push_back()在活动区域​​中执行,`uvm_info()发生在观察区域中。另一个进程将在反应区域或后一个预定活动区域中更新data_in。通过反转.push_bach()/`uvm_info()订单给了另一个线程在重新进入活动区域执行.push_bach()之前分配data_in。零时间毛刺(例如设计中的#0)也可能与意外值有关。

确保.push_bach()`uvm_info()获得相同值的一种方法是创建一个临时变量,其样本号为data_in。例如:

sampled_data = this.wr_if.mon_clk_blk.data_in; 
tr.pkt.push_back(sampled_data); 
`uvm_info("",$sformatf("Write Monitor data = %0h", sampled_data), UVM_NONE) 
+0

谢谢。设计中的所有任务都没有延迟时钟的延迟。我也会尝试在界面中添加setup/hold来查看它是否有帮助。 – user3242374

+0

@Tudor,感谢您修复这些错别字 – Greg