System Verilog 引进的新的数据类型,他们所具有的优点:
1. 双状态数据类型(bit, byte, shortint, int, longint):具有更好的性能,更低的内存消耗。
2. 队列(int a[$]),动态数组(int a[]),关联数组(int a[string]):减少内存消耗,且自带搜索和分类功能。
3. 类(class)和结构(struct):支持抽象的数据结构。
4. 联合结构和合并结构:允许对统一数据有多种视图(view)。
5. 字符串(string):支持内建的字符序列。
6. 枚举类型(enum):方便代码编写,增加代码可读性。(工程实践中经常使用)
1
思维导图
2
思维导图大纲
关联数组
保存稀疏阵列元素
采用树或哈希表存放关联数组
声明
采用在 [] 中放数据类型
[int]
ex: bit [63:0] assoc[bit[63:0]];
内建函数
.first(index)
function int first( ref index );
得到第一个元素的索引,数组为空时返回 0
.next(index)
function int next( ref index );
得到下一个元素的索引
如果存在下一项,则将下一项的索引赋给索引变量,函数返回 1;否则,索引不变,函数返回 0。
.last(index)
function int last( ref index );
得到最后一个元素的索引,数组为空时返回 0
.prev(index)
function int prev( ref index );
得到上一个元素的索引
如果存在前一个条目,则将前一个条目的索引赋给index变量,函数返回 1;否则,索引不变,函数返回 0。
.exists(index)
function int exists( input index );
检查索引是否存在,索引存在返回 1,不存在返回 0
.delete([index])
function void delete( [input index] );
如果指定了索引,则 delete() 方法将删除对应索引的元素
如果没有指定索引,则 delete() 方法将删除数组的所有元素
如果待删除元素的索引不存在,方法并不会发出警告
.size()
.num()
返回数组元素个数
关联数组元素顺序强制按照索引顺序从小到大排列
通配符索引类型
int array[ * ];
数组可以被任何整数表达式索引
非整型索引值是非法的,会导致错误
包含 X 或 Z 的 4 状态索引值无效
字符串字面值索引会自动转换为大小相等的位向量
顺序按照索引数值的大小从小到大排列
实际使用过程中与 int array[ int ] 没有明显差别
3
示例
例1:关联数组的使用
定位第 5、6 行,对关联数组 assoc 赋初始值,这里先赋值索引更大的 5,然后索引依次从 0 至 4 进行赋值,随后的打印结果可以看出,关联数组元素顺序强制按照索引大小从小到大排列而非赋值先后排列。
定位第 8 至 9 行,使用 foreach 循环遍历从头到尾打印关联数组,这里无法使用普通的 for 循环遍历。
定位第 12 至 17 行,使用关联数组的内建子程序 first() 和 next(),从头到尾打印关联数组。
定位第 19 至 24 行,使用关联数组的内建子程序 last() 和 prev(),从尾到头打印关联数组。
定位第 25 至 26 行,先获取最后一个元素的索引,然后删除该索引对应的元素。
例2:关联数组的赋值
定位第 5 行,初始时为空数组,此时访问得到缺省值为0。
定位第 6,7 行,对数组 assoc1 进行初始化,设置默认值,此时再次访问数组中不存在的值时将返回设置的默认值。
定位第 8 行,将数组 assoc1 赋值给数组 assoc2,随后第 10 行比较两个数组是否相等,这里将打印相等信息。
定位第 16 行,数组 assoc1 将清空并存放赋值的值,但此时默认值依然为第 6 行设置的32'hbeef_feed。
定位第 18 行,数组 assoc1 将删除所有元素,但是默认值依然为第 6 行设置的32'hbeef_feed。
定位第 21 行,语句无效,并不会清空像期望的一样清空整个数组。
定位第 23 行,仅仅修改了数组 assoc2 的默认值,并不会删除数组中的元素。
例3:通配符索引关联数组
定位第 8 行,使用字符串作为索引表达式将被自动转化为整型数。
定位第 9 行,取消注释时将报如下错,即表明通配符索引只支持不支持浮点型。
定位第 11,12 行,从打印的结果分析,foreach 循环中自动声明的 i 变量其类型为无符号整数。
定位第 20 行,通配符索引的关联数组同样支持关联数组的内建子程序。
领取专属 10元无门槛券
私享最新 技术干货