首页 百科知识 4.3.2用户自定义数据类型

4.3.2用户自定义数据类型

时间:2022-10-15 百科知识 版权反馈
【摘要】:可由用户自定义的数据类型有:枚举类型、数组类型、存取类型、文件类型、记录类型、时间类型。下面我们对常用的自定义数据类型举例作简单介绍。数组定义中的范围和原数据类型除了可以用标准数据类型外,也可以使用用户自定义的数据类型,如例4-7所示。无论是运算还是赋值,数据的类型必须完全匹配。

4.3.2 用户自定义数据类型

在VHDL中用户还可以自己定义所需的数据类型,自定义数据类型的语法格式为:

img86

可由用户自定义的数据类型有:枚举类型、数组类型、存取类型、文件类型、记录类型、时间类型。下面我们对常用的自定义数据类型举例作简单介绍。

(1)枚举类型

在数字电路中,所有的数据都是以“1”、“0”或它们的组合矢量来表示的,但数字有时候用起来并不是很方便,例如,在交通信号灯状态监测电路中,若用“00”表示绿灯亮,“01”表示红灯亮,“10”表示黄灯亮,“00”、“01”、“10”这种书写方法阅读起来比较麻烦,为了阅读起来简单明了,可以定义一个名为“light”的枚举型数据类型。

例如:

img87

定义枚举型的数据类型,就是通过枚举某个数据类型的所有可能值来定义这个数据类型,其定义的基本格式为:

img88

枚举型数据类型的应用是很广泛的,在第二章中我们介绍IEEE库时,曾经介绍过IEEE内有四个包:STD_LOGIC_1164、STD_LOGIC_ARITH、STD_LOGIC_SIGNED、STD_LOGIC_UNSIGNED,其中STD_LOGIC_1164中对STD_LOGIC数据类型的定义如下:

img89

STD_LOGIC对BIT的二值系统作了扩展,扩展成9值系统。这9种取值的含义如下:

'U' —— 初始状态;

'X' —— 不定态;

'0' —— 强‘0’态;

'1' —— 强‘1’态;

'Z' —— 高阻态;

'W' —— 弱不定态;

'L' —— 弱‘0’态;

'H' —— 弱‘1’态;

'-' —— 无关态,表示系统不会出现的状态。

这9种取值与真实的数字电路状态十分接近,比用BIT类型更加结合实际,所以STD_LOGIC类型是非常重要的常用数据类型。与BIT类型可以扩展成多位的矢量BIT_VECTOR一样,STD_LOGIC类型也可以扩展成矢量STD_LOGIC_VECTOR,如:

img90

(2)数组类型

数组是将相同类型的数据集合在一起所形成的新的数据类型。数组类型可以是一维或多维的。

数组型数据类型定义的语法格式如下:

img91

关键字ARRAY说明要定义数组类型的数据类型,范围和数组元素的原数据类型决定了数组的维数。如:

img92

此例表示,数据word被定义为数组类型的数据,该数组包含16个BIT类型的元素,即下标范围从15往下数到0,该数组元素的类型被定义为了BIT数据类型,BIT类型只能取二进制的“0”或“1”,故可以为该数组类型的byte进行如下赋值

img93

数组定义中的“范围”也可以定义为不定,即数组中元素的个数可以不定,如预定义包STANDARD中,标准数据类型BIT_VECTOR的定义如下:

img94

BIT_VECTOR是以数据类型BIT为元素组成的数组类型。其数组范围以“NATURAL RANGE<>”表示,也就是说该数组类型的元素个数不定,但只要是自然数个元素就可以。

数组定义中的范围和原数据类型除了可以用标准数据类型外,也可以使用用户自定义的数据类型,如例4-7所示。

【例4-7】数组型数据类型的定义

img95

img96

mem数据类型的元素是自定义数据类型——word类型,若使用INTEGER类型限定范围,可以忽略关键字INTEGER,如语句2所示,若要标明INTEGER则必须使用关键字RANGE 限定范围,如语句1所示。

对于mem还可以采用以下方法定义为二维数组:若要定义三维数组,可以如下定义:

img97

由上可以看出,数组的维数主要和“范围”约束相关。

对数组数据的访问,可以对整个数组进行访问,也可以只对数组中的某个元素进行访问、操作。如例4-8所示。

【例4-8】数组型数据类型的应用

img98

“rom<=bit_rom”是对数组整体的访问,“r_byte<=byte_rom(addr)”和“r_bit<=rom(addr,bit_addr)”是对数组元素的访问。无论是运算还是赋值,数据的类型必须完全匹配。r_byte的数据类型必须和mem1的元素类型一样,即必须是BIT_VECTOR(0 TO 1)类型,不能是BIT类型,不能读取元素中的某一位;同理,r_bit必须是BIT类型,与mem2元素的数据类型一致。

(3)记录类型

记录是一种复合型的数据类型。上面讲到的数组类型是由同一类的数据组织在一起而形成的,而记录类型是由不同类型的数据组织在一起而形成的数据类型。

记录型数据类型定义的语法格式为:

img99

对记录类型数据的访问,可以访问记录的整体,也可以访问记录的某个元素,从记录中提取元素需要使用“.”作分隔符。如例4-9所示。

【例4-9】记录型数据类型的应用

img100

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈