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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 19439|回复: 23

[讨论] UVM高手请进:请教关于SV的cast函数和UVM的clone函数

[复制链接]
发表于 2012-11-9 08:32:49 | 显示全部楼层 |阅读模式

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

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

x
最近空闲时间,看了一下一些之前没太注意的细节问题:
My_trans Tr_A;
My_trans Tr_B;

利用$cast(Tr_A, Tr_B.clone());将Tr_B完全赋给Tr_A, 二者拥有不同的内存;

现在,突发奇想,Tr_A = Tr_B.clone(), 可是这样VCS编译起来出错,说是等号左右两边的类型不匹配。
这样疑问就来了,systemverilog中的$cast的功能到底是什么?句柄的强制映射?请高人详解一下!

还有一个问题,.clone()函数返回的到底是什么东西?我理解为是My_trans类型的一个类,但是这样理解起来应该不对,不然上面的赋值语句为啥编译错误呢?

类的赋值(=号)的操作对象是什么?只是句柄的赋值么?肯定不改变内存的。

一些疑问,麻烦高人和专家指点一下吧???

非常感谢!!!
发表于 2012-11-9 20:46:32 | 显示全部楼层
我想这是一个OOP问题,如果你在SV里把=号赋值函数重载一下,你就可以Tr_A = Tr_B.clone()这样赋值了。否则这样赋值只局限于普通数据类型(int,bit,logic等)。
 楼主| 发表于 2012-11-9 22:24:26 | 显示全部楼层
回复 3# whxqq


    难道UVM中的clone函数必须搭配sv的$cast函数么?
发表于 2012-11-9 23:52:11 | 显示全部楼层
可以想象一下,定义clone这个函数时,这个类还没有真的实现,所以只能返回一个这个的基类,
因此,不能直接赋值,clone后必须$cast,否则就是将基类的句柄赋给扩展类
发表于 2012-11-13 22:55:28 | 显示全部楼层
clone是基类uvm_object的方法,因此返回的是uvm_object的handle,需要cast给子类
发表于 2012-11-14 10:30:58 | 显示全部楼层
have a study! thanks!
发表于 2012-11-14 12:04:36 | 显示全部楼层
回复 6# bexiang


    哇,benben开坛讲道啦,benben正解!顶!
发表于 2016-11-25 13:57:59 | 显示全部楼层
学习学习顺便赚信元
发表于 2016-12-5 11:59:15 | 显示全部楼层
学习学习顺便赚信元
发表于 2016-12-14 21:37:20 | 显示全部楼层
回复 4# ia2ptk


   说的很好,受教了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-15 08:44 , Processed in 0.024689 second(s), 9 queries , Gzip On, Redis On.

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