1

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

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)
4

1 回答 1

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)
于 2014-01-28T00:04:38.903 回答