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

贰 | 数据类型9 —— 枚举类型

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

思维导图大纲

枚举类型的声明

匿名枚举类型

enum {red, green, bule} color;

搭配 typedef 进行声明

typedef enum {red, green, bule} color_e;

"_e" 后缀标识

枚举类型默认被视作 int 类型存储,且枚举值缺省从 0 开始递增

子程序

first()

返回第一个枚举常量

next()

返回当前枚举常量的下一个枚举常量

next(N)

返回当前枚举常量之后第 N 个枚举常量

prev()

返回当前枚举常量的前一个枚举常量

prev(N)

返回当前枚举常量之前第 N 个枚举常量

last()

返回最后一个枚举常量

name()

得到枚举变量值对应的字符串

枚举类型转换

枚举类型可以直接赋值给非枚举变量如 int

整型变量需要进行显示类型转换才可赋值给枚举类型(?书中 P47 页,实际仿真运行阶段并不会报错)

3

示例

例1:枚举类型的使用

第 3 行所声明是匿名的枚举类型,并未定义新的类型。

可以直接将 int 类型数值直接赋值给枚举类型变量,打印时可以直接使用 %s 输出枚举类型变量对应的字符串。

可以直接将枚举类型字符串赋值给枚举类型变量。

整型变量并不需要进行显示类型转换就可以赋值给枚举类型。

例2:枚举类型的子程序

枚举类型默认被视作 int 类型,所以枚举类型缺省值为 0,如第 7 行和第 8 行,枚举变量 color 和 state 初始都为 0,区别在于 state 为 0 时并不是一个合法的 fsm_e 类型变量。因此初始打印 state 时,其字符串为空。因此将 0 指定一个枚举常量可以避免出现错误。

第 14 行至第 19 行测试了枚举类型内建子程序的用法,值得注意的是,当到达枚举常量列表的头或尾时,函数 next 和 prev 会自动以环形方式绕回,如第 16 行位于 YELLOW 之前 3 个的枚举常量是 PURPLE(16) 即绕到了枚举常量列表尾部。

第 21 行至 第 26 行显示了如何打印枚举常量列表中的所有枚举常量。

例3:枚举类型的转换

第 9 行显示 c = 3 时其不是一个合法的 color_e,此时使用 $cast(dst, src) 函数进行动态转换会失败。

第 17 行至第 23 行显示了变量 multi_clr = 5'h00111,携带了多少种颜色,将其所携带的颜色都打印了出来,类似这种用法在工程实践中很常用。

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券