3.6.4 用户自定义数据类型方式
在VHDL中,可以由用户自己来定义数据类型。由用户定义数据类型的语句格式如下:
其中,数据类型名由设计者自定;数据类型定义部分用来描述所定义的数据类型的表达方式和表达内容;关键词OF后的基本数据类型是指数据类型定义中所定义的元素的基本数据类型,一般都是取已有的预定义数据类型,如BIT、STD_LOGIC或INTEGER等。
这种由用户做的数据类型定义是一种利用其他已定义的说明所进行的“假”定义,因此它不能进行逻辑综合。
可由用户定义的数据类型有:
枚举类型(ENUMERATED TYPE);
整数类型(INTEGER TYPE);
实数类型(REAL TYPE);
数组类型(ARRAY TYPE);
存储类型(ACCESS TYPE);
记录类型(RECORD TYPE);
时间类型(TIME TYPE);
文件类型(FILE TYPE)。
下面对常用的几种用户定义的数据类型进行具体介绍。
1)枚举类型
VHDL中的枚举数据类型是用文字符号来表示一组实际的二进制数的类型(若直接用数值来定义,则必须使用单引号)。例如:在表示一周每一天状态的逻辑电路中,可以假设“000”为星期天,“001”为星期一。这对阅读程序是很不方便的。为此,可以定义一个“week”数据类型。
TYPE week IS(sun,mon,tue,wed,thu,fri,sat);
由于上述的定义,凡是用于代表星期一的日子都可以用mon来代替,这比用代码“001”表示星期一直观多了,使用时也不易出错。
枚举类型数据的定义格式为:
TYPE数据类型名IS(元素,元素,...);
2)整数类型和实数类型
整数和实数的数据类型在标准的程序包中已作了定义,但在实际应用中,特别在综合中,由于这两种非枚举型的数据类型的取值定义范围太大,综合器无法进行综合。因此,定义为整数或实数的数据对象的具体的数据类型必须由用户根据实际的需要重新定义,并限定其取值范围,以便能为综合器所接受,从而提高芯片资源的利用率。实际上这里介绍的是整数的一个子类。
整数或实数用户定义数据类型的格式为:
3)数组类型
数组类型属复合类型,是将一组具有相同数据类型的元素集合在一起,作为一个数据对象来处理的数据类型。数组可以是一维(每个元素只有一个下标)数组或多维数组(每个元素有多个下标)。VHDL仿真器支持多维数组,但VHDL综合器只支持一维数组。
数组的元素可以是任何一种数据类型,用以定义数组元素的下标范围子句决定了数组中元素的个数,以及元素的排序方向,即下标数是由低到高,或是由高到低。如子句“0 TO 7”是由低到高排序的8个元素;“15 DOWNTO 0”是由高到低排序的16个元素。
VHDL允许定义两种不同类型的数组,即限定性数组和非限定性数组。它们的区别是,限定性数组下标的取值范围在数组定义时就被确定了,而非限定性数组下标的取值范围需留待随后根据具体数据对象再确定。
(1)限定性数组
限定性数组定义语句格式如下:
其中,数组名是新定义的限定性数组类型的名称,可以是任何标识符,其类型与数组元素相同;数组范围明确指出数组元素的定义数量和排序方式,以整数来表示其数组的下标;数据类型即指数组各元素的数据类型。
例如:
这个数组类型的名称是data,它有8个元素,它的下标排序是7,6,5,4,3,2,1,0,数组元素是STD_LOGIC型的。
(2)非限定性数组
非限制性数组的定义语句格式如下:
其中,数组名是定义的非限制性数组类型的取名;数组下标名是以整数类型设定的一个数组下标名称;符号“<>”是下标范围待定符号,用到该数组类型时,再填入具体的数值范围;数据类型是数组中每一元素的数据类型。
以下是非限定性数组的例子。
4)记录类型
由已定义的、数据类型不同的对象元素构成的数组称为记录类型的对象。定义记录类型的语句格式如下:
记录用于描述总线,通信协议很方便,记录适用于仿真。从记录中提取元素的数据类型时应使用“.”。例如:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。