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,携带了多少种颜色,将其所携带的颜色都打印了出来,类似这种用法在工程实践中很常用。
领取专属 10元无门槛券
私享最新 技术干货