在systemverilog中new()和new[]有什么区别?
new()为一个对象分配空间,初始化变量,并返回保存对象的地址。
new[]设定动态数组的大小。动态数组在编译时不知道元素个数,也就是数组的宽度,在运行仿真才知道。
相同点:他们都申请内存并且初始化变量。
不同点:最大的不同在于调用new()函数仅创建了一个对象,而new[]操作则建立一个含有多个元素的数组。
例如:
new()用在systemverilog中OOP的构造函数;
构造函数除了分配内存外,还初始化变量,在默认情况下,将变量设置成默认的数值,二值变量为0, 四值变量为x, 当然也可以通过自定义的new函数将变量设置成你想要的数值;
class Transaction;
logic [31:0] addr, crc;
function new();
addr = 3;
endfunction : new
endclass
动态数组在最开始是空的,必须通过调用new[]来分配空间,同时在方括号中传递数组宽度;
int dyn[]; //声明动态数组
initial begin
dyn = new[5]; //分配5个元素
foreach (dyn[j]) dyn[j] = j; //对元素进行初始化
end