微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > queue中取出的值窜了

queue中取出的值窜了

时间:10-02 整理:3721RD 点击:
遇到一个问题,2个task A,B,task A收集数据x放在队列queue里,task B再从队列queue取x,赋值给b_tmp,当task A收集到下一个数y的时候,b_tmp也变成了y,此时task B为x的值还没执行完,也没有从queue中取y,b_tmp在B中定义。请问什么原因造成的?谢谢!示意代码如下
my_transaction trans_queue[$];
task A(my_transaction req);
trans_queue.push_back(req);
endtask
task B();
if(trans_queue.size>0) begin
my_transaction trans_tmp;
trans_tmp=new();
trans_tmp=trans_queue.pup_front():
......
end
endtask
fork
forvever begin
A(my_transaction req);
end
forvever begin
B();
end
join_none

感觉好像是同时运行了多个线程。

压到队列中的每一个object都必是new()出的新对象;要不然所有的object其实是 指向同一个object的多个指针

可以写成 trans_queue.push_back(req.clone());

基本就一个原因,A中每次push_back的对象,其实都是一个(同一个指针);B中这句话多余 trans_tmp=new();。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top