首页 百科知识 数组类型不是c的基本数据类型

数组类型不是c的基本数据类型

时间:2022-10-10 百科知识 版权反馈
【摘要】:在VHDL语言中,信号、变量、常数都是需要指定其数据类型的,VHDL提供的数据类型有:整型、实数、记录、数组等。标准逻辑矢量是定义在STD_LOGIC_1164程序包中的标准一维数组,数组中的每一个元素的数据类型都是STD_LOGIC。在使用上,向STD_LOGIC _VECTOR数据类型的数据对象赋值时,位宽、数据类型必须相同才能进行赋值。VHDL语言是一种强数据类型的语言,在编译过程中要严格地检查类型匹配,不同类型数据是不能进行运算和直接赋值的。

2.5.2 VHDL语言的数据类型

1.数据类型的种类

在VHDL语言中,信号、变量、常数都是需要指定其数据类型的,VHDL提供的数据类型有:整型、实数、记录、数组等。

在上述数据类型中,有标准的,也有用户自己定义的。当用户自己定义时,其具体的格式如下:

TYPE 数据类型名 数据类型的定义;

下面对常用的几种数据类型作一些说明。

(1)标准逻辑位数据类型(STD_LOGIC)

标准逻辑位(STD_LOGIC)是标准BIT数据类型的扩展,共定义了9种值(′U′——初始值,′X′——不定,′0′——逻辑0,′1′——逻辑1,′Z′——高阻,′W′——弱信号不定,′L′——弱信号0,′H′——弱信号1,′—′——不可能情况),这意味着其取值的可能性已非传统的BIT那样只有逻辑0和1两种取值,在编程时应当特别注意。因为在条件语句中,如果未考虑到STD _LOGIC所有可能的取值情况,有的综合器可能会插入不希望的锁存器。

(2)标准逻辑矢量数据类型(STD_LOGIC_VECTOR)

标准逻辑矢量(STD_LOGIC_VECTOR)是定义在STD_LOGIC_1164程序包中的标准一维数组,数组中的每一个元素的数据类型都是STD_LOGIC。在使用上,向STD_LOGIC _VECTOR数据类型的数据对象赋值时,位宽、数据类型必须相同才能进行赋值。

(3)整型(Integer)

VHDL中的整型与数学中的整形定义相似,可以使用加、减、乘、除等运算符。整数的最大范围从-2147483647到+2147483647,即32位有符号的二进制数。如果定义时不使用range字句限定其取值范围,缺省将使用32位宽度。

(4)实数(Real)

实数即浮点数,有正有负,书写时一定要有小数点。实数的最小范围从-1.0E+38到+1.0E+38。

(5)记录(Record)

记录是异构复合类型,也就是说,记录中的元素可以是不同的类型。记录类型的格式如下:

TYPE记录名IS RECORD

记录中元素的类型说明;

END RECORD

一个具体的实例如下:

img34

(6)数组(Array)

数组用于定义同一类型值的集合。数组可以是一维的(有一个下标),也可以是多维的(有多个下标)。此外,数组还可分为限定性数组和非限定性数组,限定性数组下标的取值范围在该数组类型定义时就被确定;而非限定性数组下标的取值范围随后才确定。其具体格式如下:

TYPE数据类型名IS ARRAY范围OF原数据类型;

举例如下:

TYPE word IS ARRAY(1 TO 8)OF STD_LOGIC;

“STD_LOGIC_VECTOR”也属于数组,因它在程序包“STD_LOGIC_1164”中被定义成数组。

(7)子类型

所谓子类型是用户对定义的数据类型作一些范围限制而形成的一种新的数据类型。子类型定义的一般格式为:

SUBTYPE子类型名IS数据类型名[范围];

子类型可以是对其父类型施加限制条件,也可以是简单地对其父类型重新起个名字,而没有增加任何新的意义。

2.数据类型的转换

VHDL语言是一种强数据类型的语言,在编译过程中要严格地检查类型匹配,不同类型数据是不能进行运算和直接赋值的。为了实现正确的运算和赋值操作,必须将数据进行类型转换。数据类型的转换是由转换函数完成的,VHDL的标准程序包提供了一些常用的转换函数,如:

◇FUNCTION TO_STD_LOGIC(s:STD_ULOGICL;xmap:STD_LOGIC:=′0′)RETURN STD_LOGIC;

◇FUNCTION TO_STD_LOGIC_VECTOR(s:STD_LOGIC_VECTOR;xmap:STD_LOGIC:=′0′)RETURN STD_LOGIC_VECTOR;

等函数。

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

我要反馈