四、SV中的类
1、SV中OOP的术语及定义
类(class):类是包含变量和子程序的基本构建块,在verilog中对应的是module。
对象(object):类的实例。
句柄(handle):指向对象的指针。句柄就像对象的一个地址,通过改地址访问对象。
方法(method):任务或函数中操作变量的程序性代码。
2、一个类包含哪些东西? 怎么创建并使用一个类?
一个普通的类包含属性(成员变量)和方法,创建一个类可以在类中定义所需的成员变量,同时自己创建一些方法(task/function)。在module或class中使用一个已经声明的类首先要声明一个该类的句柄(例化),然后需要通过new函数为对象分配内存空间。如下所示,是使用一个创建好的类的基本方法。
Transaction tr; 声明一个该类的句柄
tr = new(); 为该类分配内存空间,并使句柄指向这一空间
在SV中,如果进行一系列操作后,没有仍何句柄指向一个对象的时候,该对象会被自动销毁。
3、OOP的三大特性
封装:把数据以及对数据的操作封装在一起,也就是对应类中的成员变量和方法。
继承:让一个类获得另一个类当中的属性和方法的方式称作继承。
多态:SV绿皮书中对多态的定义是在派生类中多个子程序共用一个名字的现象称为“多态”,有继承才会有多态。
理解多态首先要理解虚方法,虚方法指得是当父类当中的function/task为virtual function/task时,子类如果继承了父类并同名改写了父类中方法的内容, 那么此时一个父类的句柄指向子类对象时也可以访问到子类当中被改写的方法。具体实例如下:
仿真结果为: