首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

贰 | 数据类型4 —— 队列

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

思维导图大纲

队列

结合了数组和链表的优点

可以在队列的任何位置增加或删除元素

性能上损失比动态数组小

可以像数组一样通过索引访问元素

声明

[$]

元素编号从 0 至 $

队列的常量只有大括号,无单引号 ‘

队列的内建函数

insert

push_front

pop_back

pop_front

push_back

delete

注意队列中是否有元素

$ 放在范围表达式左边,则表示最小值;放在范围表达式右边,则表示最大值

对于 synopsis 的仿真器 $ 始终表示最大值

队列中的元素是连续存放的,故而在队列的前面和后面插入删除元素效率高;在队列中间增加删除元素需要对元素进行搬移,所耗费的时间开销随队列大小线性增加。

定宽数组或动态数组可以赋值给队列

注:连续删除元素,size变化

3

示例

例1:定宽数组、动态数组和队列赋值操作。

定位第 2 行,使用常量对队列进行赋值时,使用 { } 而不像定宽数组和动态数组使用 '{ }。

定位第 12 行,可以用定宽数组直接给队列赋值。

定位第 14 行,当队列的 size 和定宽数组一样时,可以用队列直接给定宽数组赋值。

定位第 16 行和 18 行,无论队列和动态数组的 size 是否相同,队列和动态数组之间都可以相互赋值。

例2:队列的操作1

定位第 11 行在队列中插入另一个队列,例中使用的仿真器是 synopsis 家的,其不允许这种操作。

定位第 9 行,使用 insert(index, value) 内建子程序在 'h1 之前插入 'ha。

定位第 12 行,使用 delete(index) 内建子程序删除索引为 3 的元素('h2)。

定位第 14 行,16 行,18 行,20 行分别是在队列 q1 前面插入元素 'hb,后面删除元素 'h3,后面插入元素 'hc,前面删除元素 'hb。

定位第 22 行,使用 delete() 内建子程序删除队列中所有元素。

注:定位第 24 行和 26 行,如果队列中没有任何元素,此时再向队列中使用pop_front/pop_back 内建子程序时,仿真器并不会报错,而是返回 0。

例3:队列的操作2

等价于所在行行尾的注释;

像第 23 行所示的多元素赋值是无效的,该行只会在队列 q1 前面加上一个 9 而并非期望的 5 个 9。

例4:队列的操作3

定位第 6 行,对索引不连续的分片队列赋值操作将被忽略,例中对队列 bytes[5:7] 赋值,由于 [5:7] 与 [0:1] 不连续,所以赋值操作将被忽略。

定位第 8 行,常量对队列进行赋值可以只用 { },但另一方面使用 '{ } 对队列赋值亦不会报错。

定位第 10 行和第 12 行,$ 符号始终代表队列的最大索引,即 bytes.size() - 1;

定位第 13 行,由于 [7:10] 和 [0:7] 之间没有空隙,可以进行赋值,赋值后 size 大小为 11。

例5:队列的操作5

定位第 4 行,多个重复元素赋值,只能使用 '{ num{  value } } 格式,第 5 行将会报以下错误:

定位第 13 行,对于队列来说,可以将变量及变量表达式放在 : 左右两侧进行分片操作。

定位第 15行,对于动态数组来说,只能将常量放在 :左右两侧进行分片操作,否则将会报以下错误:

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O0ZFvRdsht3lKPMXC40WKpnQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券