c和verilog的enum枚举类型

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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)定义时引用

e num 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、引用

request_fsm_trequest_ps;//present state

request_fsm_trequest_ns;//next state

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

例子

`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

输出

1

2

3

4

5

6

7

相关文档
最新文档