UVM Monitor基于两个语句的顺序表现不同

时间:2014-01-27 22:40:05

标签: simulation system-verilog uvm

在UVM监视器中,如果在run_phase中添加了以下两个语句,则tr.pkt中采样的值按照data_in是正确的。但如果语句的顺序颠倒过来,tr.pkt采样不正确('h0采样)。以前有人见过吗?

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)

1 个答案:

答案 0 :(得分:0)

最有可能data_in在与UVM监视器执行相同的时间步骤中更新。 在调度程序中,push_back()在活动区域​​中执行,`uvm_info()在观察区域中发生。另一个过程会在反应区域或后一个预定的活动区域中更新data_in。通过撤消.push_bach() / `uvm_info()顺序,其他线程可以在重新进入活动区域之前分配data_in以执行.push_bach()。零时间毛刺(例如设计中的#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)