Loading... ## VHDL数据类型 ### VHDL数据类型可以分为四大类 #### 标量型 最基本的数据类型。 - 实数类型 - 整数类型 - 枚举类型 - 时间类型 #### 复合类型 可由标量型复合而成。 - 数组型(Array) - 记录型(Record) #### 存取类型 #### 文件类型 以上的数据类型都已在VHDL的标准程序包STANDARD(使用时不需使用use引入)和STD_LOGIC_1164及其他的标准可中做了定义,可调用。 需要注意的是,虽然VHDL仿真器支持上述所有的数据类型,但VHDL综合器并不支持所有的预定义数据类型,如REAL、TIME、FILE等类型。 ### VHDL预定义数据类型 VHDL预定义数据类型都在标准可STADARD中定义,在实际使用中无需使用USE显式调用,而是自动包含进VHDL源文件中。 #### 布尔型(BOOLEAN) `取值为FALSE或者TRUE` #### 位(BIT) 取值为`'0'`或`'1'` #### 位矢量(BIT_VECTOR) 使用位矢量必须注明位宽 ``` SIGNAL a : BIT_VECTOR(7 DOWNTO 0) ``` #### 字符(CHARACTER) #### 整数(INTEGER) 整数包括整数、负数和零。可以使用加减乘除运算。在使用整数时,VHDL综合器要求使用`RANGE`给定义的整数限定范围,否则无法综合。 `SINGAL i : INTEGER RANGE 0 TO 15;` #### 实数(REAL) #### 字符串(STRING) #### 时间(TIME) ### IEEE预定义标准逻辑位与矢量 IEEE库的程序包STD_LOGIC_1164中包含了两个非常重要的数据类型,即`STD_LOGIC`和`STD_LOGIC_VECTOR`。 #### 标准逻辑位STD_LOGIC STD_LOGIC在程序包中的定义为: ``` TYPE STD_LOGIC IS( 'U', ---- 未初始化 ‘X', ---- 强未知的 ’0', ---- 强0 ‘1’, ---- 强1 ‘Z’, ---- 高阻态 ‘W’, ---- 弱未知的 ‘L’, ---- 弱0 ‘H’, ---- 弱1 '-', ---- 忽略 ); ``` 在程序中使用此数据类型前需先声明 ``` LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ``` 由定义可见,STD_LOGIC时标准BIT的扩展,它是九值逻辑。目前在设计中通常使用STD_LOGIC,而BIT则很少使用。 注意:对于综合器而言,只有 '-'忽略态、‘Z’高阻态、0、1可用,其余五种值都不存在。当时这九种值对于VHDL的行为仿真都有重要意义。 #### 标准逻辑矢量(STD_LOGIC_VECTOR) `STD_LOGIC_VECTOR`是标准的一维数组,数组中每一个元素的数据类型都是`STD_LOGIC`。 ``` SIGNAL t_data : STD_LOGIC_VECTOR(0 TO 7); ``` ### 整数类型 虽然VHDL的标准程序包中已经对`INTEGER`做了定义。但是在综合时,由于这章数据类型的定义范围太大,综合其无法进行综合。因此,定义为整数的数据对象具体的数据类型必须由用户重新定义,并限定其取值范围,以便能为综合器所接受。 ``` TYPE num1 IS RANGE 0 TO 100; -- 7位二进制源码 TYPE num2 IS RANGE -100 TO 100 --8位二进制补码 ``` ### 数组类型 数组类型属于复合类型,时将一组具有相同数据类型的元素集合在一起,作为一个数据对象来处理的数据类型。 定义方法:`TYPE array_name IS ARRAY (数组范围) OF 数据类型` ``` TYPE INT_VECTOR IS ARRAY(INTEGER RANGE <>) OF INTEGER; VARIABLE v1 : INT_VECTOR(1 TO 6); ``` Last modification:May 26th, 2020 at 07:46 pm © 允许规范转载