【SystemVerilog基础】8.OOP

本文探讨了类型转换(静态与动态)、虚方法的概念及其在类继承中的应用,包括动态绑定与静态绑定的区别,以及对象拷贝、回调函数和参数化类的实践。重点讲解了如何处理父类句柄向子类转换、动态方法查找和有效利用虚方法提升代码复用性。

类型转换

类型转换分为动态转换和静态转换,静态转换只需要在转换的表达式之前加上单引号就可以了,静态转换并不会对得到的转换值进行检查,所以即使发生错误,我们也不得而知;动态转换需要使用系统函数$cast(tgt  , src)做转换。静态转换和动态转换都需要加上操作符后者系统函数,所以被称之为显示转换。

什么是隐式转换?不需要进转换的操作。很经典的例子就是在进行赋值操作的时候等式左边是四位的矢量,等式右边是五位的矢量,这种赋值操作会进行位宽拓展,然后再进行赋值。

什么时候用到动态转换?在使用类的时候,类句柄的向下转换(父类句柄转换为子类句柄)需要进行动态转换,否则会发生编译错误。动态转换会显示1/0来表达转换成功或者失败

 tr.display 最终会采用Transaction::display的方式来打印,因为tr是父类的句柄,父类的句柄里面只能看见父类的方法,父类是小三角形,子类的大三角形,父类的视野是小于子类的。将一个父类句柄赋值给一个子类句柄并不总是法的。 但是SV编译器对这种直接赋值的做法是禁止的。也就是说无论父类句柄是否真正指向了一个子类对象,赋值给子类句柄时, 编译都将出现错误。 因此需要实现句柄类型的动态转换。 $cast(tgt, src)会检查句柄所指向的对象类型,而不仅仅检查句柄本身。 一旦源对象跟目的句柄是同一类型, 或者是目的句柄的扩展, $cast()函数执行即会成功,返回1,否则返回0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值