c和verilog的enum枚举类型

Verilog中的枚举类型与C语言中一样。

C语言中枚举类型 1、应用场合 
在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作:

#define MON  1 

#define TUE   2

 #define WED  3

 #define THU   4

 #define FRI    5

 #define SAT   6

 #define SUN   7

在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。

 以下代码定义了这种新的数据类型:

enum DAY

 { 
      MON=1, TUE, WED, THU, FRI, SAT, SUN

 };

(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开;

(2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项;

(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1,如果把第一个改为1,

后续成员依次为2,3,4…;

(4)可以在定义枚举类型时初始化各个成员的值,从而自定义某个范围内的整数;

(5) 枚举型是预处理指令#define的替代;

(6) 类型定义以分号;结束。

2、引用方法

(1)定义后引用 enum DAY { 
      MON=1, TUE, WED, THU, FRI, SAT, SUN

 }; 
enum DAY yesterday; 

enum DAY today; 
enum DAY tomorrow; //变量tomorrow的类型为枚举型enum DAY 
enum DAY good_day, bad_day; //变量good_day和bad_day的类型均为枚举型 
其中任何一个枚举数据类型enum DAY都是在所以定义的enum DAY成员范围变化。

(2)定义时引用

enum week { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} days; //变量days的类型为枚举型enum week

(3)用typedef把枚举类型定义为别名

typedefenum workday


    saturday,     

sunday = 0,     

monday,    

 tuesday,    

 wednesday,    

 thursday,     

friday 

} workday; //此处的workday为枚举型enum workday的别名 
workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即enum workday。

同时,enum workday中的workday可以省略。


Verilog中枚举类型


Verilog中的枚举类型应用与c语言一致。如用在状态机的状态定义中。

1、 用枚举类型定义状态机状态 

typedefenum logic[4:0] {REQ_IDLE=5'b00001, REQ_READ, REQ_READ_RETURN, REQ_WRITE1, REQ_WRITE2, REQ_WRITE_WAIT_REQ_RDY, REQ_WRITE_WAIT_DATA_RDY } request_fsm_t; 

这里采用了typedef为enum logic[4:0]定义为别名request_fsm_t

2、 引用

定义状态机当前状态和下一个状态。

例子 
`timescale 1ps/1ps 

moduleenum_test; 
typedefenum logic[4:0] {REQ_IDEL=5'b00001, REQ_READ, REQ_READ_RETURN, REQ_WRITE1, REQ_WRITE2, REQ_WRITE_WAIT_REQ_RDY, REQ_WRITE_WAIT_DATA_RDY} req; 

reqreq_ps;

 reqreq_ns; 

initial

 begin 
$display(REQ_IDEL); 

$display(REQ_READ); 
$display(REQ_READ_RETURN);

 $display(REQ_WRITE1);

 $display(REQ_WRITE2); 
$display(REQ_WRITE_WAIT_REQ_RDY);

$display(REQ_WRITE_WAIT_DATA_RDY);

 end endmodule

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值