new()和new[]有什么区别???
systemverilog 语法中构造函数new有两种,new()和new[],二者的使用区别很大。
1.new[]
new[]的使用较为简单,一般用来开辟内存并初始化,常用于设置动态数组的大小。
如下例:
int a[]; //声明动态数组
initial begin
a = new[3]; //为动态数组分配3个元素
foreach (a[i]) a[i] = i; //元素初始化
end
声明动态数组后,尚不知道数组内的元素个数,直到仿真时,才能确定动态元素个数,因此必须通过调用new[]函数分配空间,并确定数组中元素个数。
2.new()
new()用于在SV中OOP的构造函数,构造函数除了分配内存外,还初始化变量,创建对象开辟了新的内存空间,可以存放新的成员变量和方法,构建函数new()是系统预预定函数,不需要指定返回值,函数会隐式的返回例化后的对象指针,构建函数可以定义多个参数作为初始化时外部传入数值的手段。
class example1;//创建一个类
logic[3:0] addr;
logic[9:0] data;
int dyn[];
function new;
addr = 8;
data = 1;
endfunction
dyn = new[8];
foreach (dyn[i]) dyn[i] = i;
endclass
example1 ex; //声明一个句柄
ex = new(); //将句柄实例化
new()函数有三个作用:
- 例化对象,申请新的内存地址;
- 初始化变量,二值变量初始化为0,四值变量初始化为X;
- 返回句柄。
Transaction tr; //声明一个句柄
tr = new(); //创建对象