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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2870|回复: 8

[求助] 关于句柄传输的疑惑

[复制链接]
发表于 2013-8-21 10:16:29 | 显示全部楼层 |阅读模式

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

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

x
遇到一个问题:

function xxx(transaction tr);
      tr.data = 10;
endfunction

transaction t;
initial begin
      t = new();
      xxx(t);
      $display(t.data):
end



大家觉得应该显示什么。。。。。。

我记得书中有句话是传输句柄,如果不加ref,仅仅是句柄复制,并不能做到真正的句柄地址传输,故调用xxx函数,理论上不能改变原句柄所指向的对象的成员的值,但是,这里却改变了,请教大家,我哪里理解错误。。。。
发表于 2013-8-21 12:22:31 | 显示全部楼层
我觉得是这里是句柄复制没错,但是这两个句柄都指向同一个object,
所以你的结果会变。
真正的句柄传输指的是function里面的handle和外面的是一样的句柄,而实际
上这俩个handle是不一样的,只是指向了同一个object
 楼主| 发表于 2013-8-21 14:46:42 | 显示全部楼层
回复 2# hbhbts

那么按照你这么说,那你看看这个程序会怎样

function xxx(transaction tr);
      tr = new();
      tr.data = 10;
endfunction

transaction t;

initial begin
      xxx(t);
      $display(t.data):
end

你觉得执行完后  结果会怎样呢
发表于 2013-8-21 16:34:31 | 显示全部楼层
这个就是开始 tr被copy进 function后,这是由于tr是null,
所以这时被复制进去的t也是null,然后执行function,创建一个object
这时function里的t就有值了,但是外面的tr还是null,
所以外面的tr会找不到data
 楼主| 发表于 2013-8-21 16:44:18 | 显示全部楼层
回复 4# hbhbts


   不好意思哈 ,还不很了解,为什么“第一个例子”可以呢,没有ref参数,仅仅句柄复制,不是改变不了原句柄所指向的对象的成员的值吗???仅仅改变的是函数内部句柄tr的值,对外面的那个句柄t,不受影响的啊。。。

你说的--我觉得是这里是句柄复制没错,但是这两个句柄都指向同一个object,所以你的结果会变。

那么“第二个例子”也是同指向一个object,为什么结果不变啊???
发表于 2013-8-21 16:52:31 | 显示全部楼层
第一个例子在复制进function的同时也将handle指向的object的地址也就是handle的value给复制了
所以在func里面可以使用该handle来改变object的值
第二例子则是由于在复制进func之前,handle没被创建还是null所以复制进去的handle也是null,因此这时你虽然在func里面创建了object,里面的handle的value不为null,但是也不会改变外面的handle的value是null,因此。。
 楼主| 发表于 2013-8-21 17:10:23 | 显示全部楼层
回复 6# hbhbts


   哦,明白了,第二个例子的函数加上“ref”这个参数,就可以实现句柄地址的输出,也就可以通过调用函数来改变函数完的值了!!!

function xxx(  ref  transaction tr);
      tr = new();
      tr.data = 10;
endfunction

transaction t;

initial begin
      xxx(t);
      $display(t.data):
end
发表于 2013-8-21 17:17:55 | 显示全部楼层
准确点是加ref是指里面的和外面的是一个handle!
 楼主| 发表于 2013-8-21 17:23:12 | 显示全部楼层
回复 8# hbhbts


   明白了 ,非常感谢哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-15 12:43 , Processed in 0.027470 second(s), 9 queries , Gzip On, Redis On.

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