打造IC人才
科技生态圈

数字ic验证|SystemVerilog中的枚举类型

发布时间:2022-10-14

来源:IC修真院

枚举类型定义了一组具有名称的值,在没有指定值时默认是int型数值。

enum {red, green, blue} light1, light2;

在上面的例子中,没有指定任何数据类型,因此使用默认的“int”数据类型。所以枚举类型light1和light2被定义为默认类型int的变量,其中包括三个成员:red, green, blue。由于没有指定各个含义的值,所以

red= 0,green= 1,blue= 2

再举一个例子

enum integer {IDLE, XX='x, S1='b01, S2='b10} state, next;

这里的数据类型是“integer”,这意味着可以将“x”和“z”值分配给枚举成员。

enum {bronze=3, silver, gold} medal;

以bronze = 3作为初始值。因此,silver等于4,gold等于5

enum {a=3, b=7, c} alphabet;

显式de为“a”和“b”赋值,因此,c将取b = 7后的值。所以c等于8,也就是说

enum {a=0, b=7, c, d=8} alphabet;image

上面这种写法就会导致编译错误,因为c和d的值都等于8。

enum {a, b=7, c} alphabet;

“a”是第一个成员,它没有值。所以,a等于0。因此,

a = 0, b = 7, c = 8

enum bit [3:0] {red=‘h13, green, blue} color;

image

the base type of the declared enum, which is 4 bit unsigned.

上面这个示例也会导致编译错误,因为red=‘h13超出了 bit[3:0]所能够表示的最大值('hF) 。修改成下面的写法就没有问题了。

enum bit [3:0] {red=‘d13, green, blue} color;

此时

red = 13, green = 14, and blue = 15

枚举类型在设计有限状态机时特别有用。例如,

你可以定义一个枚举类型来描述状态机的状态:

image

因为类型是“logic”,所以可以将未知的('x)值分配给enum成员。这样的'x赋值对于仿真比较非常有用,而对于综合工具而言就进行合适的优化。该枚举可以在状态机编码中使用,如下所示:

image

Enumerated-Type Methods

枚举类型的变量提供了很多内建的方法,方便提取

枚举类型成员的值。

Enumerated-Type Methods

imageSimulation log:

image

在这个例子中,我们定义了一个

image

Colors有四个成员,image

我们首先使用“num()”方法显示枚举中的成员数量。

枚举中有四名成员。所以,显示日志显示image

然后使用方法“frst()”获取第一个成员的值。第一个成员是值为0的“red”,因此打印显示image

然后我们使用“next(2)”,会获取后面第2个值2.

接下来,我们通过last()获得枚举类型最后一个成员的值3image

下面是另一个简单的例子:

image

Simulation log:

image

Enumerated Type with Ranges

枚举类型的成员可以指定范围

枚举类型

image

定义一个包含三个成员的枚举类型“cycle”。第一个“read”;然后是一系列

5个writes,分别是“write0”、“write1”、“write2”、“write3”、“write4”;然后是

三个“intr”的,即“intr6”、“intr7”和“intr8”。

类似的,

image

定义一个包含两个成员:

readreg0和readreg1,

writereg2, writereg3和writereg4。

下面是仿真logimage

相关推荐:

关于美国这次制裁的四点思考

美国芯片法案对中国有什么影响?全面封锁!

MCU芯片是什么?一文快速了解MCU

立即下载

推荐阅读

换一换