在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)
答案 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)