前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我眼中的UVM |09.virtual class/sequence/sequencer/interface/function

我眼中的UVM |09.virtual class/sequence/sequencer/interface/function

作者头像
用户10108023
发布2022-10-28 16:35:15
5470
发布2022-10-28 16:35:15
举报

09

我眼中的UVM

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

好了,今天的分享就到这里了,个人愚见,希望对你的学习有一点帮助,如有错误也欢迎批评指正。持续更新,欢迎关注。觉得有帮助的朋友,希望能够点个赞鼓励一下!!你的每个鼓励都是我持续创作的动力!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 不二鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档