本文主要是介绍枚举类型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
这篇关于枚举类型enum——systemverilog的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!