- 术语解释
- 类:包含变量和子程序的基本构建块。
- 对象:类的实例;
- 句柄:指向对象的指针;
- 属性:存储数据的变量;
- 方法:函数或方法中操作变量的程序性代码;
上述几个术语对于没有接触过面向对象编程的语言来说理解可能有一点困难。SystemVerilog里面向对象编程的部分与其他的高级语言类似(如C++,JAVA)。类可以认为是一类事物的抽象,而对象是这类事物一个实际个体;句柄则是我们为这个个体取的一个名称。属性是事物的特点,方法是事物具有的功能。举个例子:猫(类)是一类动物的名称,现在我有一只猫(对象),我给它取名小花(句柄)。猫的毛发,眼睛颜色,身长,体重等就是其属性。抓老鼠,当宠物就是其方法。
- 语法
2.1创建类
创建一个类的语法格式如下:
class name;
//属性定义;
//方法定义
endclass:name
例1:
class Transaction;
bit [31:0] add, crc, data [8];
function void display;
$display(“Transaction:%h”, addr);
endfunction:display
function void calc_crc;
crc = addr^data.xor;
endfunction
endclass
上例中创建了一个名为Transaction的类。该类包含属性:addr,crc,data;方法:display,calc_crc。
2.2实例化类
Transaction tr; //声明一个句柄
tr = new(); //为Transaction分配空间
声明句柄tr后,它被初始化为null。调用new()函数创建对象后,开始为其分配存储空间,属性初始化默认值。
2.3构造函数
上例中,我们在调用new()函数例化对象时,类的属性初始化的是变量的默认值。我们还可以自定义new()函数,对属性初始化。
例2:
class Transaction;
bit [31:0] add, crc, data [8];
function new(bit[31:0] add, crc);
this.add = add;
this.crc = crc;
endfunction
endclass
例2中我们自定义了一个new()函数,函数体里的this指代本类里的变量。