联合数组
7.8 Associative arrays
动态数组适用于处理数量动态变化的连续变量集合。当集合的大小未知或数据空间稀疏时,关联数组是更好的选择。关联数组在使用之前不会分配任何存储空间,且索引表达式不限于整数表达式,可以是任意类型。
关联数组实现了一个其声明类型元素的查找表。用作索引的数据类型充当查找键,并引入了排序规则。
声明关联数组的语法如下:
data_type array_id [ index_type ];
其中
data_type 是数组元素的数据类型,可以是固定大小数组允许的任何类型。
array_id 是正在声明的数组的名称。
index_type 是用作索引的数据类型,或为 。如果指定了 ,则数组将使用任意大小的整数表达式进行索引。索引类型会限制索引表达式的类型,使其限定于特定类型。index_type 不能声明一个类型,这是不允许的。
关联数组声明的示例如下:
integer i_array[]; //整数的关联数组(未指定索引)
bit [20:0] array_b[string];// 21位向量的关联数组,按字符串索引
event ev_array[myClass];//按类 myClass 指向事件的关联数组
关联数组中的元素是动态分配的。当一个不存在的关联数组元素被用作赋值的目标,或作为引用传递参数的实际值时,应为其分配空间。关联数组会保留已赋值的条目,并根据索引数据类型保持其相对顺序。关联数组元素是按位解包的。换句话说,除了数组复制或比较的情况外,在大多数表达式中使用数组元素之前,必须先从数组中选择出单个元素。
7.8.1 Wildcard index type
例如
int array_name [];
指定通配符索引类型的关联数组具有以下特性:
数组可以由任意整数表达式进行索引。由于索引表达式的大小可能不同,同一个数值可能有多个表示形式,且每个表示形式的长度各不相同。SystemVerilog 通过去除前导零、计算最小长度,并使用该长度作为数值的表示方式来解决这种歧义。
非整数索引值是非法的,会导致错误。
包含 X 或 Z 的 4 状态索引值无效
索引表达式是自定的,并被视为无符号。
字符串字面量索引会自动转换为大小相同的位向量。
排序为数字顺序(从小到大)。
指定通配符索引类型的关联数组不得用于 foreach foreach 循环(参见 12.7.3)或与返回索引值或值数组的数组操作方法(参见 7.12)一起使用。
浙公网安备 33010602011771号