在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4435|回复: 13

[求助] 为什么队列进行push_back时覆盖了之前的数据?

[复制链接]
发表于 2019-5-5 19:29:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 桅杆 于 2019-5-5 19:31 编辑

如图,每次push_back后,队列里全部数据都变了。
2.png
代码如下,实在想不通,数据的类型都是一个transaction。
1.png


发表于 2019-5-5 23:02:39 | 显示全部楼层
mdl_queue的代码能贴出来看下吗
 楼主| 发表于 2019-5-6 09:15:19 | 显示全部楼层
本帖最后由 桅杆 于 2019-5-6 09:17 编辑


iwantto 发表于 2019-5-5 23:02
mdl_queue的代码能贴出来看下吗


上面的代码是在scoreboard中的。mdl_queue是一个transaction类型,该transaction只包含了一个logic [12:0] ro_data_sync.

mdl 接收的是一个rand出来的数据,直接发给scoreboard.
mdl_queue 定义如下:
3.png
transaction 定义如下:
4.png
发表于 2019-5-6 11:28:50 | 显示全部楼层
应该是你get出来的是同一个指针(取决你前级模块的实现),保险起见这里每次get后clone一下再放入队列

点评

正解  发表于 2019-5-7 07:55
 楼主| 发表于 2019-5-6 13:43:45 | 显示全部楼层


idealm 发表于 2019-5-6 11:28
应该是你get出来的是同一个指针(取决你前级模块的实现),保险起见这里每次get后clone一下再放入队列 ...


谢答,确实从压入队列的是指针这个观点来讲就可以理解得通了。
发表于 2019-5-17 19:41:17 | 显示全部楼层
希望多贴一点代码,我这样写,没有复现你的问题
 楼主| 发表于 2019-5-28 09:04:07 | 显示全部楼层
本帖最后由 桅杆 于 2019-5-28 09:10 编辑


精武英雄 发表于 2019-5-17 19:41
希望多贴一点代码,我这样写,没有复现你的问题


上面代码已经很完整了呀。主要问题我发现了,就是tr 用"get",“=”号赋值新的tr的时候,实际是把句柄赋过去了,所以用copy函数就可以解决了。
发表于 2019-7-25 16:36:01 | 显示全部楼层
代码的意思是把同样的句柄(mdl_temp)push_back了好几次,每次push之前clone一份出来再push,能解决这个问题
发表于 2019-7-26 09:31:15 | 显示全部楼层


桅杆 发表于 2019-5-28 09:04
上面代码已经很完整了呀。主要问题我发现了,就是tr 用"get",“=”号赋值新的tr的时候,实际是把句柄赋过 ...


如果在 while(1) 后面,pack_mdl_in.get(mdl_temp)之前 添加   mdl_temp = new("mdl_new") 是不是也能解决问题?
我自己的做法一般是这样做的,每次都create新的tr。
发表于 2019-7-26 10:05:24 | 显示全部楼层
你在get之后要copy一下,然后把copy出来的放入队列,否则每次get到新值时,之前传入的指针也会随着变化
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-20 09:27 , Processed in 0.030932 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表