登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Design IC

慢即是快,快即是慢

 
 
 

日志

 
 

Systemverilog枚举类型  

2010-10-31 22:35:00|  分类: SystemVerilog |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

又翻译了一片文章:

来源:http://systemverilog.co/wiki/Enumerations

枚举类型

目录Contents:

 

  • 1 枚举类型的声明
  • 2 将整数强制下转型为枚举类型
  • 3 将枚举强制上转型为整数类型
  • 4 枚举类型的方法
  • 5 参考文献

 

枚举类型的声明

 

类似C/C++,Systemverilog枚举类型提供了一种更严格的整数类型,属于基本整数类型(int)的子类型. 枚举变量的值只能是枚举声明类型的一种。

enum {RED, GREEN, BLUE} color1, color2;

以上声明完成了两件事情。 (*)定义了RED, GREEN和BLUE分别为0,1,2.同时定义了变量color1和color2。这两个变量是强类型,只能取值0,1,2.

另外,Systemverilog允许用户定义枚举类型的基类型是2态或者4态整型。注意在C/C++中,不允许用户定义枚举类型的基类型,永远都是int.

enum bit [1:0] {RED, GREEN, BLUE} color1, color2;

// 4态枚举类型

enum logic [1:0] {IDLE, UNKNOWN=`x, TRISTATE=`z, S1=2`b01, S2=2`b10} state, next;

实际使用中,关键字enum几乎总是和typedef一起使用

typedef enum {RED, GREEN, BLUE} BasicColors;

可以通过name[N]或者name[N:M]自动定义枚举类型的索引范围,下列表格累出了枚举类型的各种格式:

语法 说明
name 此name将和下一个整数值相关联
name = C name的值将和C关联
name[N] name0..nameN的值和之后连续的整数相关联
name[N] = C 和以上相同,不过name0的值和C关联
name[N:M] 枚举值nameN..nameM,N可以大于M;也可以小于M
name[N:M] = C 和以上相同,name0的值和C关联

由于枚举属于整数类型,Systemverilog允许枚举变量声明为rand/randc. 当声明围randc的时候,尽量使用最少的bit数以提高效率[1]

 

将整型向下转型到枚举类型

 

枚举类型是强类型,因此,枚举变量不能够被赋值为另一个整数类型值,除非显示的转型(静态转型或者动态转型)。静态转型不会去检查赋值是否满足枚举取值范围的限制范围,而动态转型会检查,除非很明确知道取值范围满足要求,否则请使用动态转型。

使用类型转换对枚举变量赋值

typedef enum {MON, TUE, WED, THU, FRI, SAT, SUN} Weekday;

Weekday day1 = WED;  // no type conversion required

day1 = 2;            // illegal type conversion

day1 = Weekday’(2);    // OK

day1 = Weekday'(10);   // legal out of range assignment forced by static cast

if (! $cast(day1, 10)) // legal dynamic cast operation that would FAIL

$display("Dynamic cast operation FAILED");

 

将枚举类型向上转型到整形。

 

枚举类型和标准整数类型之间的互操作是合法的,不需要特别的语法。当参与运算的时候,枚举类型变量会自动向上转型成其他整数类型。

 

枚举类型的方法

 

函数名字 说明
first() 返回枚举类型的第一个值
last() 返回枚举类型的最后一个值
next(int N=1) 枚举值加N,如果超过范围,将继续从第一个值开始
prev(int N=1) 枚举值减N,如果超过范围,继续回到最后一个
num() 返回枚举类型的取值个数
name() 返回枚举值对应的字符串


name()方法在打印调试信息时特别有用。

 

参考文献:

  1. Srinivas Venkataraman, VerificationOnWeb (VoW), 2009, "SystemVerilog tip: watch out enum and randc",  08-AUG-2010
  评论这张
 
阅读(2529)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018