system verilog-枚举类型enum

学习中,感觉绿皮书中对枚举的介绍不是很详细,有很多疑惑,因此在此对细节总结一下。
枚举类型enum是System Verilog中使用频率极高的数据类型之一,验证中作内置判断类型。

enum的语法

使用typedef便于用户自定义枚举类型的共享使用,可以用一个枚举类型来声明多个变量,
如果枚举类型没有伴随typedef,那么该枚举类型是一个匿名枚举类型。

1.如果枚举没有初始化,默认是int 型,则从第一个标识符开始,顺次赋给标识符0、1、2 …

initial begin
	typedef enum {st1, st2, st3} state_s;
	//state_s是一个枚举类型变量
	//st1,st2,st3是枚举常量
	state_s state, next_state;
	$display("state -> %0d, %0d, %0d", st1, st2, st3);
end
输出:
state -> 0, 1, 2

数组形式

typedef enum {st1, st2[2], st3} state_s;//定义枚举类型变量
state_s state1; //实例化枚举变量
$display("%0d, %0d, %0d", st20,st21,st22);
输出:
1,2,3

注意:定义的枚举值st1、st2、st3类似于parameter,在当前命名空间域具有独占性,
不能被定义过也不能重新用于枚举。

例如:
parameter str1;
typedef enum {st1, st2} state_s;

2.枚举变量可以取枚举以外的的值,用枚举类型state_s做强制类型转换

typedef enum {st1, st2, st3} state_s;//定义枚举类型变量
state_s state1; //实例化枚举变量
state1 = st1;
$display("state1 = %0d", state1);
state1 = state_s'(5);
$display("state1 = %0d", state1);
输出:
state1 = 0
state1 = 5

3.枚举类型的转换

  • 枚举类型的缺省类型为双状态int
  • 可以将枚举类型赋值给非枚举变量,即 int = enum
  • 不可将整形变量直接赋给枚举变量,必须做类型转化,即 enum = T’(int);

4.设置枚举类型

typedf enmu logic[1:0] {str0 = 2'b00, str1 = 2'b01, str2 = 2'b10} state_s;
state_s state, state1;
state1 = st1;
$diaplay("state1 = %0d, state = %0d",state1, state);
state1 = state_s'(5);
#display("state1 = %0d", state1);
输出:
state1 = 1, state = x
state1 = 5

logic是四值逻辑变量类型,因为state没有初始化,所以state是默认的x状态。

5.枚举类型函数

函数含义
first()返回第一个枚举常量
last()返回最后一个枚举常量
next()返回下一个枚举常量
next(N)返回以后第N个枚举常量
prev()返回前一个枚举变量
pre(N)返回以前第N个枚举变量
num()枚举常量的个数
name()枚举常量的名字
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值