当前课程知识点:EDA技术与应用 > 第四章 VHDL语言概述 > 4.6 VHDL预定义数据类型 > 4.6.2 VHDL预定义数据类型 教学视频
同学们好
本讲我们来学习VHDL的数据类型
VHDL语言具有很强的数据类型
对数据类型的使用和要求十分严格
正是由于VHDL强类型语言的这种特征
才使得VHDL编译或综合工具
能够很容易地找出设计中各种常见的错误
为了用好VHDL语言
我们必须深入了解VHDL的数据类型
前面讲到
VHDL对数据类型的要求很严格
这主要体现在以下几个方面
首先
每一个数据对象只能有唯一的数据类型
并且只能具有那个类型的值
第二点,作用于某个数据对象的操作类型
必须和该数据对象的数据类型相匹配
第三点
具有不同数据类型的数据对象之间
是不能够直接进行赋值操作的
为了更有效地编写VHDL代码
必须知道哪些数据类型是可用的
在设计中怎样使用这些数据类型
VHDL的数据类型可以分为
已经在程序包里定义好的
可以直接使用的预定义数据类型
和用户自定义的数据类型两种
其中预定义的数据类型是最常用
也是最基本的数据类型
预定义的数据类型大体上可以分为三类
第一类是VHDL标准的预定义数据类型
第二类
是IEEE预定义标准逻辑位与位矢量类型
第三类是其它预定义标准数据类型
VHDL标准预定义数据类型
是在标准程序包STANDARD中定义的
常用的主要有八种
下面我们来分别学习这些数据类型
布尔类型
布尔类型只有
TRUE(真)和FALSE(假)两种取值
是一种二值枚举类型
布尔类型的数据不属于数值
因此它不能用于算术运算
只能通过关系运算来得到
位类型
位类型也属于二值枚举类型
取值只能是1和0这两个数值
位矢量类型
位矢量类型是基于位类型的数组
使用位矢量类型的时候
必须要注明矢量的宽度
以及数组中元素的个数和排列方式
例如,我们定义一个信号A
SIGNAL a: BIT_VECTOR(7 DOWNTO 0)
再定一个信号B
SIGNAL b: BIT_VECTOR(0 TO 7)
这里这两个信号A和B都是位矢量类型
位宽也都是8位
数组中的元素都是8个
但是它们的排列方式不一样
A的最左边一位是最高位
自左向右依次降低
B的最右边一位是最高位
自左向右依次升高
字符类型
字符类型主要包括单个ASCII码
通常用单引号引起来,例如‘A’
那么需要注意的是
字符类型是区分大小写的
大写的‘B’和小写的‘b’是不一样的
而一般VHDL的标识符
比如实体名、变量名、信号名等等
是不用区分大小写的
所以我们一定要记住
用单引号括起来的字符
是要区分大小写的就可以了
字符串类型是字符型数据的一个组合
字符串类型的数据必须用双引号括起来
同样字符串类型数据
也是要区分字母的大小写
整数类型
整数类型包括正整数、负整数和零
可以用预定义的算术运算符进行算术运算
例如加、减、乘、除等等
整数类型的取值范围是从
-2147483647到+2147483647
那么,这可以用
32位有符号的二进制数来表示
实数类型
实数类型也称浮点数
取值范围是从
-1.0×10的38次方到+1.0×10的38次方
通常实数类型只能用在VHDL仿真器当中
它是不能被综合的
时间类型
时间类型是VHDL中唯一的预定义物理类型
时间类型的数据
包括整数和物理量两个部分
它们之间至少要留一个空格
比如50 ns
同样时间类型也只用于VHDL仿真器
不能被综合
这一类预定义的数据类型
是符合IEEE工业标准的数据类型
是对VHDL标准数据类型的拓展
常用的有两种
一种是标准逻辑位类型:STD_LOGIC
STD_LOGIC类型是对BIT位类型的拓展
它一共定义了八种取值
也就是说如果一个数据对象
被定义为STD_LOGIC类型
那么它可能的取值就不像BIT类型那样
只有逻辑0和逻辑1两种可能
另一种是标准逻辑位矢量类型:
STD_LOGIC_VECTOR
这种类型是STD_LOGIC类型的一维数组
数组中每一个元素的数据类型
都是STD_LOGIC类型
在使用STD_LOGIC_VECTOR类型时
必须严格考虑位矢量的宽度、排序等问题
需要注意的是
STD_LOGIC类型
和STD_LOGIC_VECTOR类型
都是在IEEE库的
STD_LOGIC_1164程序包中预定义的
因此在使用的时候
必须做相应的库声明和程序包声明
否则就不能正常使用这两种数据类型
随着VHDL库和程序包的不断丰富
以及第三方综合工具对VHDL程序包的扩展
VHDL预定义的数据类型
也在不断的丰富和拓展
除了前面讲到的那些预定义的数据类型之外
还有一些数据类型
也可以在设计中来加以使用
例如
在STD_LOGIC_ARITH程序包中定义的
无符号数UNSIGNED类型
和有符号数SIGNED类型
和小整形等数据类型
那么从外观上看
它们和STD_LOGIC_VECTOR相同
但是
它们能够支持与整数类型类似的算术运算
关于这些类型
我们在此暂时不做详细讨论
VHDL
是一种对数据类型要求严格的设计语言
在设计中每一个常量、变量、信号、函数
以及设定的各种参量
都必须具有确定的数据类型
只有相同类型的数据
才可以互相传递和作用
VHDL的各种运算操作和赋值操作
也对数据类型有严格要求
使用时必须注意这一点
预定义的数据类型已经在程序包中定义
可以直接使用
掌握这些数据类型的特点和应用
对编写VHDL代码非常重要
好,本讲到这里就结束了
同学们,再见
-1.1 EDA技术概述
--1.1.3 EDA技术概述 单元测验
-2.1 可编程逻辑器件(PLD)概述
--2.1.3 可编程逻辑器件概述 单元测验
-2.2 CPLD的结构和原理
--2.2.3 CPLD的结构和原理 单元测验
-2.3 FPGA的结构和原理
--2.3.3 FPGA的结构和原理 单元测验
-2.4 FPGA和CPLD的选用
--2.4.3 FPGA和CPLD的选用 单元测验
-2.5 FPGA与CPLD的编程和配置
--2.5.3 FPGA与CPLD的编程与配置 单元测验
-3.1 QuartusII概述
--3.1.3 Quartus Ⅱ概述 单元测验
-3.2 新建工程
--3.2.3 新建工程 单元测验
-3.3 设计输入
--3.3.3 设计输入 单元测验
-3.4 设计编译
--3.4.3 设计编译 单元测验
-3.5 仿真验证
--3.5.3 仿真验证 单元测验
-3.6 器件编程
--3.6.4 器件编程 单元测验
-3.7层次化设计
--3.7.3 层次化设计 单元测验
-3.8 宏功能模块的使用
--3.8.3 宏功能模块的使用 单元测验
-4.1 VHDL语言概述
--4.1.3 VHDL语言概述 单元测验
-4.2 VHDL代码的结构
--4.2.3 VHDL代码的结构 单元测验
-4.3 库和库声明
--4.3.3 库和库声明 单元测验
-4.4 实体说明
--4.4.3 实体说明 单元测验
-4.5 结构体
--4.5.3 结构体 单元测验
-4.6 VHDL预定义数据类型
--4.6.3 VHDL预定义数据类型 单元测验
-4.7 常量、变量和信号
--4.7.3 常量、变量和信号 单元测验
-4.8 运算操作符和属性
--4.8.3 运算操作符和属性 单元测验
-4.9 IF语句和WAIT语句
--4.9.3 IF语句和WAIT语句 单元测验
-4.10 CASE语句
--4.10.3 CASE语句 单元测验
-4.11 LOOP循环语句
--4.11.3 LOOP循环语句 单元测验
-4.12 进程
--4.12.3 进程 单元测验
-4.13 条件信号赋值语句
--4.13.3 条件信号赋值语句 单元测验
-4.14 选择信号赋值语句
--4.14.3 选择信号赋值语句 单元测验
-4.15 元件例化语句
--4.15.3 元件例化语句 单元测验
-4.16 VHDL模块化设计
--4.16.3 VHDL模块化设计 单元测验
-5.1 设计方法概述
--5.1.3 设计方法概述 单元测验
-5.2 EDA综合设计案例(1)— 数字钟的设计
--5.2.2 EDA综合设计设计案例1— 数字钟的设计 教学视频
--5.2.3 EDA综合设计案例1 单元测验
-5.3 EDA综合设计案例(2)—16×16点阵控制器设计
--5.3.2 EDA综合设计案例2—16×16点阵控制器设计 教学视频
--5.3.3 EDA综合设计案例2 单元测验