枚举类型enum——systemverilog

enum的基础语法

enum提供方法来描述抽象变量的合法值范围,其每个值都需要提供一个用户自定义的名字

enum{red,green.blue} RGB;  
// RGB是一个枚举类型变量
// red,green.blue是枚举常量

枚举数据默认(缺省类型)的存储类型为int型(32位有符号二值逻辑),且数值从0开始递增 。

枚举类型也可以直接赋初值

enum logic [2:0] {WAITE = 3'b001,LOAD = 3'b010,READY = 3'b100} state_t;

枚举类型是四值逻辑,直接对枚举值赋值X 、Z也是合法的

​ 如:enum logic {ON = 1’b1,OFF = 1’bz } out;

enum和typedef搭配使用

便于用户自定义枚举类型的共享使用,可以用同一个枚举类型来声明多个变量或线网

typedef enum  {INIT,DECODE,IDLE}  fsmstatae_e;  
//fsmstatae_e 表示是 enum  {INIT,DECODE,IDLE} 这个**类型**
//INIT,DECODE,IDLE的整型分别是 0,1,2
fsmstatae_e  pstate, nstate;  //声明2个变量
  case (pstate)
	IDLE: nstate = INIT;  
	INIT:nstate = DECODE;
	default:nstate = IDLE;
  endcase

$display ("Next state is %s", nstate.name()); //显示状态名 ;%s是以字符串形式

【注意】:

  • 如果给nstate直接用整数赋值,那么这种赋值方法不合法
  • 如果右侧是枚举类型,可以直接赋值给整型,即int = enum 型式成立
  • 如果右侧是整型,不可以直接赋值给枚举 ,即enum = int 不成立;必须要做类型转换 enum = T’(int);
  • 如果枚举类型没有伴随typedef,那么该枚举类型是一个匿名枚举类型
//例子1:

typedef enum  {WAITE,LOAD ,READY }  state_t;
state_t state ,next_state;
int foo;

state = next_state; //合法
foo =  state + 1;      // 合法  ,枚举类型可以转化成整型
state = foo + 1 ;     //不合法 ,整型不能隐式的转化成枚举类型
state = state +1;    //不合法
state++;				  // 不合法,内部包含一个state= state +1

//例子2:

typedef enum  {WAITE,LOAD ,READY } state_t;
int sum = WAITE + LOAD + READY;    // sum的结果为 3  
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小verifier

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值