为什么需要使用virtual,不用可不可以?

电子说

1.3w人已加入

描述

在UVM或者SV中,经常会碰到被virtual修饰的 class、sequence、sequencer、interface、function,不知道你有没有这样的疑问,为什么需要使用virtual,不用可不可以?所以就总结了一下。

  • virtual class

在一切面向对象编程语言中,类最基本的元素。基类(或者说父类)可以包含最基础的一些组成,特征,形成最基本的框架,但是并不完整。基类作为一个不完整的类, 它的主要作用不是被实例化,而是被拓展 ,因为,不完整就实例化也没有意义。

在后续的环境构建当中,可以从这个基类扩展出很多的子类,丰富基类的结构。这样的类,就可以设置成virtual class,使其变得抽象。注意,一个抽象的类,是不能够被实例化的,它只能被继承/扩展,如果实例化,则会出错。

  • virtual function和pure virtual function

pure virtual function是偶然在工作中遇到的,可能见到的次数不多,但还是要学习一下。

virtual function和类的多态性有关,使用户在设计和实现类时不需要担心句柄指向的对象类型是父类还是子类,只要通过虚方法,就可以进行动态绑定,或者SV中称为动态查找方法(摘自红宝书)。

简单理解就是,virtual function是基类中的函数模板,可在派生类中使用新代码重写该函数模板’,它存在对的目的就是为了后续能够重写该函数。如果分不清到底需不需要加上virtual,可以都加上,便于后续的重写,不重写也不会报错。

pure virtual function 虚纯函数是基类中的函数模板, 必须在派生类中用新代码重写

总结一下:对于virtual function ,是在base中提供了一个函数模板,但不是必须进行override,但对于pure virtual function 而言,必须进行override,如果你忘记override,则会出现编译错误,也起了一种提示作用。

  • virtual sequence/sequencer

  • virtual interface

virtual interface你可以认为语法就是这样。作为类和dut之间进行通信的唯一方法,在一个类中,如果实例化一个interface,是不允许的,出现了就会报语法错误,只能在module里面直接

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分