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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
123
返回列表 发新帖
楼主: allencherry

[讨论] systemverilog 为什么要用$cast()类型转换函数??

[复制链接]
发表于 2018-6-4 22:56:44 | 显示全部楼层
mark
发表于 2018-6-15 11:26:29 | 显示全部楼层
如果父类句柄指向子类对象,那通过父类句柄索引不到子类对象的变量,必须通过cast将这个父类句柄转换为子类句柄,从而能够访问到子类对象的变量。
发表于 2018-11-27 14:53:45 | 显示全部楼层
看了好多都没看懂。。。
发表于 2018-11-28 12:19:34 | 显示全部楼层
Mark  分析的很透彻了
发表于 2018-11-28 19:26:38 | 显示全部楼层

                               
登录/注册后可看大图

                               
登录/注册后可看大图
感觉上面的回答不够具体化,自己做了一个简单例子,大家可以参考一下。
由于多态的存在,父类的句柄是可以指向父类,也可以指向子类,比如图中的h_amba.
如果是对于method,由于sv支持的动态绑定,即支持子类method重载,所以代码41行和47行同样的code,执行的是不同子类的method(ahb_action中的disp()和apb_action中的disp())。
如果是对于property,sv是根据handle本身的类型进行判定,所以代码42行和48行同样的code,执行的结果是一样的,都是指向父类中的property(amba_action中的ii)。
所以需要$cast将这种类型转换,即h_amba->hh_apb或者hh_ahb。

code

code

result

result
发表于 2021-9-8 14:23:25 | 显示全部楼层
好东西,学习了
发表于 2021-9-8 21:13:45 | 显示全部楼层
学习了,
发表于 2021-10-11 18:05:06 | 显示全部楼层


ppeezz 发表于 2018-11-28 19:26
感觉上面的回答不够具体化,自己做了一个简单例子,大家可以参考一下。
由于多态的存在,父类的句柄是可以 ...


厉害厉害,学习了
发表于 2024-5-21 17:25:05 | 显示全部楼层
mark.
发表于 2024-5-28 17:09:40 | 显示全部楼层
好帖!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-16 09:40 , Processed in 0.026423 second(s), 9 queries , Gzip On, Redis On.

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