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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3816|回复: 7

[求助] systemverilog mailbox peek

[复制链接]
发表于 2020-9-3 15:32:43 | 显示全部楼层 |阅读模式
100资产
int m=box.num;for(int i=0;i<m;i++)begin
    int k=i;
    box.peek(k);
    $display("box.peek(%d)=%d",i,k);
end

这段代码在执行的时候打印的k值全为1;
box.peek(0)=1
box.peek(1)=1
....
....

************
这里的打印k值不应该是box的第i位的值吗?

最佳答案

查看完整内容

首先box.peek是从box里面取出k的类型,你定义的k是int那就是取整数赋给k,int k = I给k赋了I的初值,但是box.peek(k)后k值就被覆盖了就是box里面的值,你box 第一个put的值应该是1……然后你一直没有get,所以k值一直是1,i递增就不用说了,你每个peek后get试下, box你别当array或者queue玩……
发表于 2020-9-3 15:32:44 | 显示全部楼层
本帖最后由 anpengfei 于 2020-9-3 21:55 编辑

首先box.peek是从box里面取出k的类型,你定义的k是int那就是取整数赋给k,int k = I给k赋了I的初值,但是box.peek(k)后k值就被覆盖了就是box里面的值,你box 第一个put的值应该是1……然后你一直没有get,所以k值一直是1,i递增就不用说了,你每个peek后get试下,  box你别当array或者queue玩……
发表于 2020-9-3 17:11:57 | 显示全部楼层
你是不是搞错了mailbox的方法,put(i),是把i放进去,get(i),是拿出一个数据赋给i,并且从mailbox中移除,peek(i),和get的区别是不会移除
 楼主| 发表于 2020-9-3 17:47:01 | 显示全部楼层


空白MAX 发表于 2020-9-3 17:11
你是不是搞错了mailbox的方法,put(i),是把i放进去,get(i),是拿出一个数据赋给i,并且从mailbox中移除, ...


我的想法是把mailbox的数据取出来,但是不删除。peek(i)相当于复制的意思吧,用get(i)就把mailbox里面的数据删除了。
发表于 2020-9-3 18:29:12 | 显示全部楼层
peek方法从一个mailbox中复制一个数据但不会将其从队列中删除。peek括号里面就是你从box里面取出来的数据,不是box的数据的序列,是不是这里理解错了。
发表于 2020-9-3 18:43:44 | 显示全部楼层
你确定创建了box?
 楼主| 发表于 2020-9-4 09:14:50 | 显示全部楼层


anpengfei 发表于 2020-9-3 21:47
首先box.peek是从box里面取出k的类型,你定义的k是int那就是取整数赋给k,int k = I给k赋了I的初值,但是bo ...


受教了,现在理解了。感谢。
发表于 2021-2-5 12:20:57 | 显示全部楼层
这是 systemverilog里极易犯的一个错误。 变量k默认是静态变量,初始化只会被执行一次,所以,k一直是1.  有两种fix:
1) automatic int k=i++;
2) int k;
    k=i++;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-5 14:48 , Processed in 0.019836 second(s), 6 queries , Gzip On, Redis On.

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