三,VHDL中的数据类型
分为四大类:
1.标量型(Scalar Type)
属于单元素的最基本的数据类型,通常用于描述一个单值数据对象,它包括实数类型,整数类型,枚举类型和时间类型。
2.复合类型(Composite Type)
可以由细小的数据类型复合而成,如可由标量复合而成。复合类型主要有数组型(ARRAY)和记录型(RECORD)。
3.存取类型(Access Type)
为给定的数据类型的数据对象提供存取方式。
4.文件类型(Files Type)
用于提供提供多值存取类型。
1.VHDL的预定义数据类型
在VHDL标准程序包STANDARD中定义的,实际使用中已经自动包含进VHDL的源文件中,因此不用USE语句进行显示调用。
1).布尔(BOOLEAN)数据类型
二值枚举类型数据类型,它的取值有FALSE和TRUE两种。
2).位(BIT)数据类型
属于枚举型,取值有1或0
位数据类型的数据对象,可以参加逻辑运算,运算结果任然是位的数据类型。
3).位矢量(BIT_VECTOR)数据类型
基于BIT数据类型的数组
4).字符(CHARACTER)数据类型
通常用单引号包裹起来,区分大小写
5).整数(INTEGER)数据类型
正整数,负整数和零
自然数和正整数是整数的子类型
6).实数(REAL)数据类型
类似于数学上的实数,或称为浮点数
取值范围为-1.0E38~+1.0E38
重点:
实数类型仅能在VHDL仿真器中使用,VHDL综合器不支持实数,因为实数类型的实现相当复杂,目前在电路规模上难以承受。
7).字符串(STRING)数据类型
字符数据类型的一个非约束型数组,或称为字符串数组。
字符串必须要用" "标明。
8).时间(TIME)数据类型
VHDL中唯一的预定义物理类型是时间。
完整的时间类型包括整数和物理量单位两部分,整数和单位之间至少留一个空格,如55 ms,20 ns。
飞秒 皮秒 纳秒 微秒 毫秒 秒 分 时
9).错误等级(SEVERITY_LEVEL)
仿真器中,错误等级用来指示设计系统的工作状态,共有四种可能的状态值:
NOTE(注意),WARNING(警告),ERROR(出错),FAILURE(失败)。
2.IEEE预定义标准逻辑位与矢量
两个类型:
标准逻辑位STD_LOGIC
标准逻辑矢量STD_LOGIC_VECTOR
2.1标准逻辑位STD_LOGIN数据类型
U 未初始化 X 强不定 0 0 1 1 Z 高阻 W 弱信号不定 L 弱信号0 H 弱信号1 _ 忽略
重点:
在使用该类型数据时,在程序中必须写出库说明语句和使用包集合的说明语句。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
2.2标准逻辑矢量(STD_LOGIC_VECTOR)
2.3其他预定义标准数据类型
重点:想要使用如下的数据类型一定要在使用之前加如下语句
LIBRARY IEEE;
USE IEEE.STD_LOGIC_ARITH.ALL;
在STD_LOGIC_ARITH定义了如下的数据类型:
1.无符号型(UNSIGNED)
一个无符号数值 在综合器中,这个数值被解释为一个二进制数,最左位是其最高位。
2.有符号型(SIGNED)
一个有符号的数值 在综合器中,将它解释为补码,此数最高位为符号位
3.小整型(SMALL_INT)
2.4用户自定义数据类型方式
TYPE语句的用法
TYPE 数据类型名 IS 数据类型定义 [OF 基本数据类型]
TYPE 数据类型名 IS 数据类型定义 [OF 基本数据类型] [约束范围];
数据类型如果没有被指定,则默认为整数类型。
SUBTYPE语句的用法
子类型SUBTYPE只是由TYPE所定义的原数据类型的一个子集
SUBTYPE 子类型名 IS 基本数据类型 RANGE 约束范围;
VHDL允许用户自行定义新的数据类型,它们可以有很多种
下面八种是最为常见的
1.枚举类型;
用文字符号表示一组实际的二进制数的类型。
直接用数值定义,则必须使用单引号。
2.整数类型;
3.实数,浮点数类型;
4.数组类型;
属于复合类型,将一组具有相同数据类型的元素集合在一起,作为一个数据对象来处理的数据类型。
数组可以一维数组或多维数组。
VHDL仿真器支持多维数组,但是VHDL综合器只支持一维数组。
限定性数组定义语句格式如下:
TYPE 数组名 IS ARRAY (数组范围) OF 数组类型;
非限制性数组的定义语句格式如下:
TYPE 数组名 IS ARRAY(数组下标名 RANGE <>) OF 数据类型;
5.存取类型;
6.文件类型;
7.记录类型;
由已定义的,数据类型不同的对象元素构成的数组称为记录类型的对象。定义记录类型的语句格式如下:
TYPE 记录类型名 IS RECORD
元素名 :元素数据类型;
元素名:元素数据类型;
...
END RECORD [记录类型名];
8.时间类型;
数据类型转换
VHDL是一种强类型语言 意味着即使对于非常接近的数据类型的数据对象,在相互操作时,也需要进行数据类型转换。
a)类型转换函数方式
类型转换函数的作用就是将一种属于某种数据类型的数据对象转换成属于另一种数据类型的数据对象。
DATAIO库中的程序包STD_LOGIC_OPS中的两个数据类型转换函数:
重点:
TO_VECTOR 将 INTEGER 转换成 STD_LOGIC_VECTOR
TO_INTEGER 将STD_LOGIC_VECTOR转换成INTEGER
b)直接类型转换方式
仅限于非常关联的数据类型之间
一般的格式:
数据类型标识符(表达式);
必须要的规则:
1.所有的抽象数字类型时非常关联的类型(整型,浮点型)
2.两个数组有相同的维数,且两个数组的元素是同一类型,并且在各处的下标范围内索引是同一类型或非常接近的类型,那么这两个数组是非常关联类型。
3.枚举类型不能被转换。
在类型与其子类型之间无需类型转换。
即使两个数组的下标索引方向不同,这两个数组任然有可能是非常关联类型的。