在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