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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3588|回复: 21

[讨论] sv绿皮书[5.14.3 在程序中修改对象] 是否有错?

[复制链接]
发表于 2019-7-15 15:10:33 | 显示全部楼层 |阅读模式

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

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

x
感觉 sv绿皮书123页[5.14.3 在程序中修改对象] 说法有误?
大家一起讨论一下,主要是里面说“当你运行这段代码的时候,$display会显示很多不同的addr值,但是所有被传递的Transaction都有相同的addr数值”,我觉得不对啊!
由于没有找到中文版电子书,我上传的图片使用的是此书的英文版。

                               
登录/注册后可看大图

sv

sv
发表于 2019-7-15 16:01:52 | 显示全部楼层
这里应该是说传送的只有一个对象,这个对象会被随机化覆盖,而transmit如果花费仿真时间,那就只会传送最后一个随机数。
 楼主| 发表于 2019-7-15 16:09:56 | 显示全部楼层


huaihui 发表于 2019-7-15 16:01
这里应该是说传送的只有一个对象,这个对象会被随机化覆盖,而transmit如果花费仿真时间,那就只会传送最后 ...


作者的本意我能理解,但是“当你运行这段代码的时候,$display会显示很多不同的addr值,但是所有被传递的Transaction都有相同的addr数值”
这句话是错的,实际情况是“所有被传递的Transaction也都是不同的addr值”
发表于 2019-7-15 16:20:27 | 显示全部楼层
你这样深究就没意思了  他是说transmitted ,而且后面他又补充了这个bug 是在transmitting时,transaction被覆盖。
发表于 2023-12-29 15:37:23 | 显示全部楼层
同意楼主,个人感觉这个书上描述是错的,每一次传输,addr都会变化的
发表于 2024-1-4 15:58:16 | 显示全部楼层


探索的小蜗牛 发表于 2023-12-29 15:37
同意楼主,个人感觉这个书上描述是错的,每一次传输,addr都会变化的


一看你就没有完全理解,上面错误的做法中,transaction只有一份实例对象,随机了N次,改了N次addr值,transmit了N次(实际上是transmit了N次句柄),但这N个句柄都是指向同一份对象,所以这N次中,每一次修改addr的值,这N个句柄的addr值都会变成新的值,并且所有的addr都一样,因为只有一份实例对象。人家书中说的完全没错啊。
发表于 2024-1-4 16:38:45 | 显示全部楼层
是的每一個loop transmit的t的addr都不同
重點是沒用還好,但如果transmit task/function裡面有用fork join_any/join_none生成線程而且會用到t的話
那這所有的線程所用到的t都是同一個t,也就是這些線程執行時t.addr都會變成跟原來transmit進去時的不一樣。
例如




  1. function void transmit(Transaction t);
  2.     fork
  3.         vif.addr[ch_i] = t.addr;
  4.     join_none
  5. endfunction


复制代码


這樣不能確保vif.addr[ch_i]會被設成呼叫transmit時的t.addr.
发表于 2024-1-5 19:19:16 | 显示全部楼层


飞翔的马甲 发表于 2024-1-4 15:58
一看你就没有完全理解,上面错误的做法中,transaction只有一份实例对象,随机了N次,改了N次addr值,tra ...


这N个句柄都是一样的,指向同一个对象的,里面的addr变了n次,你怎么会说addr不变呢
发表于 2024-1-8 09:08:55 | 显示全部楼层


探索的小蜗牛 发表于 2024-1-5 19:19
这N个句柄都是一样的,指向同一个对象的,里面的addr变了n次,你怎么会说addr不变呢
...


我说了addr不变了吗?英文原文说了addr不变了吗?你能看得懂英文不??
发表于 2024-1-8 09:21:49 | 显示全部楼层


探索的小蜗牛 发表于 2024-1-5 19:19
这N个句柄都是一样的,指向同一个对象的,里面的addr变了n次,你怎么会说addr不变呢
...


你要搞明白这段代码的原始目的是啥,原始目的是通过repeat N次,生成N个addr不一样的transaction,但是因为代码错误,这N个句柄指向了同一份实例,所以尽管你随机了N次,但是任意一时刻,你这生成出来的m个(0<m≤N)transaction,addr都是一样的,不管你随机几次,在任意一时刻,这些addr都是一样的,这么说明白了么?你再回头看看英文表述,有问题吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-22 06:48 , Processed in 0.022398 second(s), 6 queries , Gzip On, Redis On.

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