谢谢你的解答。 根据你的思路,我修改了一下代码,但仍是出现了问题。
1。根据你的建议,我更换了main_phase时打印队列的方式,发现expec_queue队列第一次打印是一个正确的数据包A,第二次打印得到的两个数据包就变成了B、B,这个后续我再追查一下这条数据通路;
2。我对两个队列都增加了 local 和 protected属性,确保外部不会对这两个队列做处理,但问题仍然存在。
3。我尝试在run_phase比对数据,但是工程会卡死,具体代码如下:
- 113 task my_scoreboard::run_phase(uvm_phase phase);
- 114 my_transaction actual_trans_tmp;
- 115 my_transaction expect_trans_tmp;
- 116
- 117 `uvm_info("my_scoreboard::run_phase", "", UVM_LOW);
- 118
- 119 while(1) begin
- 120 `uvm_info("my_scoreboard::run_phase", $sformatf("expect_queue.size = %0d", this.expect_queue.size), UVM_LOW);
- 121 if((expect_queue.size() > 0) && (actual_queue.size() > 0) ) begin
- 122
- 123 actual_trans_tmp = actual_queue.pop_front();
- 124 expect_trans_tmp = expect_queue.pop_front();
- 125
- 126 `uvm_info("my_scoreboard:run_phase", "actual_queue trans: ", UVM_LOW);
- 127 actual_trans_tmp.print;
- 128 `uvm_info("my_scoreboard:run_phase", "expect_queue trans: ", UVM_LOW);
- 129 expect_trans_tmp.print;
- 130 end
- 131 end
- 132
- 133 endtask
复制代码 运行时,程序卡死在120行,其他main_phase没法进入了。由于刚接触UVM没多久,这个行为我不太理解,run_phase不是应该和其他12个小的phase并行启动的吗?为什么加入run_phase之后没法运行main_phase了。 (我已经注释了post_main_phase)
|