SystemVerilog Associative array

Associative arrays

动态数组用于处理数量动态变化的连续变量集合。当集合的大小未知或数据空间稀疏时,关联数组是更好的选择。关联数组在使用之前不分配任何存储,索引表达式不限于整型表达式,可以是任何类型的。关联数组实现了声明其类型元素的查找表。作为索引的数据类型会被强制排序并用于查找的关键词。
声明关联数组的语法如下:

data_type array_id [ index_type ];
//其中,data_type 为数组元素的数据类型。可以允许使用任何类型固定大小的数组
//     array_id为要声明的数组的名称
//	   index_type是要用作索引的数据类型,或者是*。如果指定了*,
//	   则数组被任意大小的整数表达式索引。索引类型将索引表达式限制为特定类型。index_type声明类型是非法的。

关联数组声明的例子如下:

integer i_array[*];			 // associative array of integer (unspecified
							// index)
bit [20:0] array_b[string]; // associative array of 21-bit vector, 
							// indexed by string
event ev_array[myClass]; 	// associative array of event indexed by class
							// myClass

1.声明
通过方括号中放置数据类型实现 int data_as[bit [31:0]] : int为存储数据类型,bit[63:0]为寻址的类型.
2.初始化
关联数组初始化时使用 : '{
   
   };在大括号内写入键值对的信息,键值对用:连接;
data_as = '{
   
   1:20,2:21,3:22};

关联数组中的数组元素是动态分配的。当一个不存在的关联数组元素被用作赋值的目标或通过引用传递的实参的实参时,它应该被分配。关联数组根据索引数据类型维护已赋值的项及其相对顺序。关联数组元素被解包。换句话说,除了用于复制或比较数组之外,必须先从数组中选择单个元素,然后才能在大多数表达式中使用该元素。

1、通配符索引类型

例如:

int array_name [*]; 

指定通配符索引类型的关联数组具有以下属性:

  • 数组可以用任何整数表达式建立索引。因为索引表达式的大小可能不同,所以相同的数值可以有多个表示,每个表示的大小不同。SystemVerilog通过删除前导零并计算最小长度并使用该值表示来解决这种模糊性。
  • 非整数索引值是非法的,会导致错误。
  • 包含X或Z的4状态索引值无效
  • 自定索引表达式被视为无符号类型。
  • 字符串索引会自动转换为大小相等的位向量。
  • 排序是数字的(从最小到最大)。
  • 对于返回索引值或值数组的数组操作方法,不应在foreach循环中使用指定通配符索引类型的关联数组。指定通配符索引类型的关联数组不应在foreach循环中使用,也不应与返回索引值或值数组的数组操作方法一起使用。

2、字符串索引

例如:


                
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值