Simulation UVM监视器根据两条语句的顺序表现出不同的行为
在UVM监视器中,当在如下Simulation UVM监视器根据两条语句的顺序表现出不同的行为,simulation,system-verilog,uvm,Simulation,System Verilog,Uvm,在UVM监视器中,当在如下run_阶段添加以下两条语句时,tr.pkt中的采样值根据中的data_是正确的。但是,如果语句的顺序颠倒,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)
run_阶段添加以下两条语句时,tr.pkt
中的采样值根据中的data_是正确的。但是,如果语句的顺序颠倒,tr.pkt
sampled是不正确的('h0
sampled)。以前有人见过吗
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)
最有可能的是
中的数据\u在执行UVM监视器的同时更新。
在调度程序中,push_back()
在活动区域执行,而`uvm_info()
在观察区域执行。另一个进程将更新反应区域或后一个计划活动区域中的
数据。通过反转.push_bach()
/`uvm_info()
顺序,另一个线程有机会在重新进入活动区域执行.push_bach()
之前在中分配数据。零时间故障(如设计中的#0
)也可能与意外值有关
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)
确保.push_bach()
和`uvm_info()
获得相同值的一种方法是创建一个临时变量,对中的数据进行采样。例如:
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)
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)
谢谢设计中的所有分配都是在时钟边缘上的w/o延迟。我还将尝试在界面中添加setup/hold,看看它是否有帮助。