systemverilog中new()和new[]的区别


在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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM