Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Simulation UVM监视器根据两条语句的顺序表现出不同的行为_Simulation_System Verilog_Uvm - Fatal编程技术网

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

在UVM监视器中,当在如下
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,看看它是否有帮助。