SystemVerilog枚举

1 枚举类型的声明

1.1 匿名的枚举类型

最简单枚举类型声明包含了一个常量名称列表以及一个或多个变量。

enum {RED,BLUE,GREEN} color;

通过这种方式创建的是一个匿名的枚举类型,它只能用于这个例子中声明的变量。

1.2 署名的枚举类型

创建一个署名的枚举类型有利于声明更多新变量,尤其是当这些变量被用作子程序参数或模块端口时。需要首先创建枚举类型,然后创建相应的变量。使用内建的name()函数,可以得到枚举变量值对应的字符串。

typedef enum {INIT,DECODE,IDLE} fsmstate_e;   //声明一个自定义的枚举类型
fsmstate_e pstate,nstate;        //声明自定义类型变量

2 定义枚举值

枚举值缺省为从0开始递增的整数。可以自己定义枚举值。下例中使用INIT代表缺省值0,DECODE代表2,IDLE代表3.

typedef enum {INIT,DECODE=2,IDLE} fsmtype_e;

注意:常量名称列表中的枚举常量名(如INIT)作用范围规则和变量是一样的。因此,若将INIT用于不同的状态机中,那么必须在不同的作用域里声明它们,例如模块、程序块、函数和类。

BUG点:

如果没有特别,枚举类型会被当成int类型存储(缺省类型为双状态int)。由于int类型的缺省值是0,所以在给枚举常量赋值时务必小心。在下例中,position会被初始化为0,这并不是一个合法的ordinal_e变量。这种情况是语言本身所规定的,而非工具上的缺陷。因此,把0指定给一个枚举常量可以避免这个错误。

// 指定枚举值:不正确
typedef enum {FIRST=1,SECOND,THRID} ordinal_e;
ordinal_e position;
// 指定枚举值:正确
typedef enum {BAD_O=0,FIRST=1,SECOND,THRID} ordinal_e;
ordinal_e position;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值