• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SOC/IP验证工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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

posted on 2021-10-27 22:14  SOC验证工程师  阅读(926)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3