4.1-类(类,句柄,this,super)

资料来源:

(1)公众号-芯片学堂;

(2)sv绿皮书;

(3)The UVM Primer

(4)硅芯思见:【124】SystemVerilog中超级英雄super (qq.com)

1.OOP

(1) OOP优点:code可重用性,code可维护性,内存管理简化;

2.类

(1)类(class)是面向对象编程(OOP)中的一种类型,类会包括成员变量成员函数/方法,它们共同组成了一种新的数据结构,并共同定义了某一种对象的内容和能力。

(2)类可以通过构造函数(constructor function)在内存中例化出实例(instance),或者叫对象(object)(类的实例)。对象的生命周期是动态的,它可以在程序的运行过程中创建和删除。可以通过句柄(handle)(指向对象的指针)访问对象的内容或调用对象的方法。

(3)在内存分配上,仿真器对类和结构的处理有所不同;struct变量一旦声明,仿真器就会为之分配内存;但是类声明了句柄之后,需要通过调用new函数对其实例化后,仿真器才会为之分配内存;

3.句柄

(1)SystemVerilog中对对象的引用用的是对象句柄。句柄用来指向具体对象,句柄本身的值就是对象所占内存的起始地址。

(2)在SV中,句柄类型转换需要用内建函数$cast来实现。除了同类型相互casting,一般只有一种结果,即父类句柄指向子类对象。

(3)SV中没有被句柄指向的对象会被自动垃圾回收(garbage collected)。

4.this

 

 

(1)在对代码进行编译的时候,编译器为了减少对磁盘空间的占用,类的成员函数(SystemVerilog中包括function和task)会被编程成跟对象本身无关的普通函数,并单独放在一段代码段上。换句话说,当一个类被多次例化的的时候,例化出来的对象都有自己的成员变量副本,但它们的成员函数则是共享的,这样可以有效的减少编译结果的大小

(2)this句柄的作用之一:建立对象和非静态成员函数之间的纽带。静态成员函数和静态成员变量都可以直接用类名进行调用,跟具体对象没有关系,它不需要this句柄来建立纽带。

(3)编译非静态成员函数时,默认给分静态成员函数加上this作为隐式形参。当调用成员函数的时候,比如ic_object.do_something(),默认会把ic_object这个对象的地址作为this的参数值传给do_something()成员函数。所以在do_something()成员函数中,就可以使用this来直接访问到ic_object这个对象的所有成员变量(包括private, protected 和 public属性)和其他成员函数。

(4)this本身是一个隐式形参,作用域同其他形参,类似于一个局部变量,因此也只能在当前成员函数内部使用;this的类型是const object*,它的值不可以被随意修改,它始终指向当前使用的对象。

(5)this句柄的其他作用:区分同名的成员变量和参数以及将当前对象指针作为参数传递给其他函数;

 

5.super

(1) super告诉编译器显式引用基类/父类的成员变量或方法;

(2) 如果子类对于父类中的属性或者方法没有进行overriden,这种情况下,子类引用父类中的属性或方法时,可以使用或者不使用super;

(3) 如果子类对于父类中的属性或者方法进行overriden,这种情况下,子类引用父类中的属性或方法时,必须使用super;

(4) 子类调用super访问的属性如果在父类中没有,在父类的父类中存在,也是可以的;

posted on 2021-11-11 17:52  知北游。。  阅读(734)  评论(0编辑  收藏  举报

导航