
如下题目所示:
class Transaction
logic [31:0] addr = 'h10;
logic [31:0] crc,data[8];
function new(logic [31:0] a =3, d =5);
addr = a;
foreach (data[i])
data[i] = d;
endfunction
endclass
initial begin
Transaction tr,tr1;
tr = new(10);
tr1 = new();
end
理解new()创建对象的过程, 首先new(10)根据类 中的变量类型,addr,crc和data来开辟空间,这时addr先被赋值16。之后,我们 传递参数10进入函数,addr值被覆盖为10。
而 new()函数调用时,未从外部传递 参数,因此,addr值被赋值为3。

对象的创建和销毁:
class word
byte nb[];
function new(int n);
nb = new[n]; //动态数组空间开辟
endfunction
endclass
initial begin : initial_1
word wd;
for(int i=1;i<=4;i++) wd = new(i); //创建了4个对象
end
ini

本文详细解析了Systemverilog中使用new()创建对象的过程,包括如何根据类变量分配内存,参数传递对对象地址的影响。同时阐述了对象的创建和销毁机制,特别是new()在无参数传递时的默认赋值行为以及static变量在initial块中的持久性。
612

被折叠的 条评论
为什么被折叠?



