嗨,屏幕前的你还好吗?我是不二鱼,一个不喜欢写技术博客的IC验证工程师,写这个系列,是需要很大的勇气的,因为,写得人很多,但写得好的不多,我也是如此。我一个菜鸡,敢写UVM(应该也不止UVM,我尽量把其他知识杂糅进去),我是疯了吗?至今能有比张强老师写得好的估计也没有,我之所以写,是为了促进自己进步,换了一个新的环境,使用UVM也是日常必备,所以,以写促学,写一写我眼中的UVM,也希望能和大家一起学习,相互成就,如有错误,欢迎私信我批评指正。
一个技术帖为什么选这么个小清新的模板,是因为,想让你看完如沐春风,没有压力感,哈哈哈。
更新频率:暂定一周一更。
01
絮絮叨叨
在上一节,我们探讨一下在UVM中,典型的验证平台,今天的分享,想和大家讨论下类的三要素。UVM是面向对象编程的,UVM最伟大的地方,也就是类。之前跳槽面试的时候,也经常会被问到类的三要素,一般的面试,回答 到封装、继承和多态,面试管就不会再问了。但也会有一些严格的面试官,会继续追问,什么是封装继承和多态。为了更好的学习UVM,我觉得很有必要搞清楚类的这三个要素。
02
类的三要素
类,关键字class,关于类,可以扯很多东西,这里就简单讲一讲。我在之前的文章里比作一个菜市场,是为了说明类可以很好的进行复用,不用自己种菜,施肥等等一列操作,“炒菜”省去了很多步骤。今天,为了更好的说明类的三要素,我想把类比作一个菜谱,一个莲花血鸭(我老家的特色菜)的菜谱。在这个菜谱里头,我们定义里食材,比如鸭肉、辣椒、大蒜、姜,配料有油、盐、味精、水。这是一个标准的菜谱,我们把这一系列的东西都写在菜谱里头,也就把这些特性,封装成一个类。这就是所谓的封装。在类里面,封装了一些要使用的变量,还有可能给这些变量赋初识值,还会定义一些函数,一些任务,等等,这个封装好的类,就叫做基类,也叫父类。
在这个菜谱里头,我们定义了的食材、配料,当我们要实际使用这个菜谱,制作一道莲花血鸭,我们就需要基于这个标准菜谱,这就是继承。同时,也可以根据自己的口味进行扩展。继承的类叫做子类,子承父业,被继承的类就是上面的父类。子类会继承父类的所有特性,不管是成员变量还是任务、函数,并且还会有自己的特性。UVM预先定义了一系列的类,在UVM的验证平台中,每一个类,都要继承自UVM中已经定义好的类。类怎么继承呢,会用到关键字extends。同时也涉及到,类的实例化,一张菜谱,是不能变成菜的,只有把这道菜真正的炒出来,才能成为一道菜,这个“炒”的过程,就是实例化的过程,如下所示:
//定义一个类BEY
class BEY;
...
endclass
//通过new创造出一个BEY的实例
BEY y
y = new();
实例化的过程是通过new来实现的,在后面,会通过工厂机制中的实例方式进行实例化,这是后话了。new的过程可以简单概括为分配内存空间的过程。
类的第三个要素,多态,多态的概念比前两个要素都复杂,这里只做简单科普,如果想要深入了解,可以看C++的书籍。在我之前的面试当中,封装和继承的概念还是经常会被问到的,多态只问过一次。在c++中,多态分为静态多态和动态多态,静态和动态的区分在于父类中是否使用virtual 虚函数。为了实现多态,必须具备继承关系,多态的实现依赖于继承,且子类必须重写父类的方法。先声明一个父类的实例,同时也有继承相同父类的不同子类A、B实例,通过父类的指针指向子类的对象,来决定执行哪一个子类对象。
好了,今天的分享就到这里了,希望对你的学习有一点帮助。持续更新,欢迎关注。觉得有帮助的朋友,希望能够点个赞鼓励一下!!你的每个鼓励都是我持续创作的动力!