面向对象编程基础
1 编写第一个类
2 在哪里定义类
- 在SystemVerilog中,可以在program、module、package中,或者在之外的任何地方定义类。
3 创建新对象
- SystemVerilog类在使用前必须先例化
- SystemVerilog类在运行中测试平台需要的时候才会被创建
4 定制构造函数new
- SystemVerilog会自动创建默认的new函数来给对象分配空间并初始化
- new函数不能有返回值,new函数总是返回指向对象的句柄
注:应避免在声明对象句柄的同时调用new函数!
注:SystemVerilog中的一个句柄可以指向很多对象,当同一时刻只能指向一个。
5 对象的解除分配
- 当最后一个句柄不再引用某个对象时,SystemVerilog就会释放该对象的内存空间。
- SystemVerilog不允许对对象句柄进行加减等操作,也不允许将一种类型的句柄指向其他类型的对象。
6 使用对象
7 静态变量和全局变量
7.1 简单的静态变量
- 在SystemVerilog中,可以在类里定义静态变量,该变量可以被该类所有的实例所共享,且使用范围仅限于该类
7.2 访问静态变量
7.3 静态变量的初始化
7.4 静态方法
- SystemVerilog不允许静态方法访问非静态变量
8 类的方法
- 在类中定义的任务和函数
- 类中的方法默认为动态的
8.1 在类的外面定义方法
- 可以在类的内部声明方法原型,在类外定义方法内容
8.2 作用域规则
- 在块中声明的变量为局部变量,其作用域为该块,不会影响其他块中的同名变量
- 类应尽量在program和module外的package内定义
8.3 this
- this可以用于在类的底层作用域访问类一级的变量
9 在一个类中使用另一个类
- 通过使用指向对象的句柄,一个类内部可以包含另一个类的实例
10 将对象传递给方法
- 可以将对象的句柄传递给方法
- 方法中可以利用传递进来的对象句柄访问对象的变量和方法
- 在未加ref修饰时,方法对传递进来的句柄进行了复制而不是引用,因此对传递进来的句柄进行修改后不会影响方法外的对象
11 句柄数组
12 对象的复制
12.1 使用new复制
12.2 编写简单的copy函数
- 当要复制一个简单的类,类中不包含对其他类的引用,可以定义简单的复制函数
12.3 编写深层复制函数
13 公有和私有
- 在SystemVerilog中,所有成员默认都是公有的,除非标记为local或者protected