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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2493|回复: 4

[求助] Modifying Objects in Flight

[复制链接]
发表于 2014-3-21 13:00:37 | 显示全部楼层 |阅读模式

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

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

x
请教为什么第一段程序是错误的?

Sample 5.26 Bad generator creates only one object
task generator_bad(int n);
Transaction t;
t = new(); // Create one new object
repeat (n) begin
t.addr = $random(); // Initialize variables
$display("Sending addr=%h", t.addr);
transmit(t); // Send it into the DUT
end
endtask

Sample 5.27 Good generator creates many objects
task generator_good(int n);
Transaction t;
repeat (n) begin
t = new(); // Create one new object
t.addr = $random(); // Initialize variables
$display("Sending addr=%h", t.addr);
transmit(t); // Send it into the DUT
end
endtask
发表于 2014-3-21 14:10:20 | 显示全部楼层
前一个循环的时候使用的Transaction总是同一个句柄的,而后者不是,每次循环的时候new()了
 楼主| 发表于 2014-3-21 15:39:08 | 显示全部楼层
回复 2# seabeam


    没有啊,第一段程序是在循环外new的啊,第一段程序只是每次循环后对类中的非静态变量赋值。
发表于 2014-3-21 21:07:04 | 显示全部楼层
本帖最后由 seabeam 于 2014-3-21 21:18 编辑



正因为在循环外new()的,所以循环使用的object是同一句柄的,这根是不是静态变量没关系。你再看看我上面的回复是什么意思,我觉得你理解和我想表达的似乎有偏差。书上也写的很清楚:The code above creates only one Transaction, so every time through the loop, generator_badchanges the object at the same time it is being transmitted. When you run this, the $display shows many addrvalues, but all transmitted Transactionobjects have the same value of addr.
 楼主| 发表于 2014-3-24 10:12:31 | 显示全部楼层
本帖最后由 soc.part.timee 于 2014-3-24 13:18 编辑

回复 4# seabeam


    不好意思啊,第一次学OOP,有些不太适应。我知道是同一个句柄,但我想不通display为什么可以反映出addr的变化,但是把句柄t传送到transmit后就不行了。我觉得句柄generator.t和transmit.t对应的都是同一个对象,对象中的变量值已经被修改了。难道t.addr = $random()只能初始化,不能对对象中的变量addr赋值嘛?求指教
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-15 10:17 , Processed in 0.039384 second(s), 8 queries , Gzip On, Redis On.

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