第四章 VHDL的语言要素
- 格式:doc
- 大小:66.00 KB
- 文档页数:5
VHDL语言的基本要素一、数据对象VHDL语言的主要数据对象有信号,变量,常量。
信号—信号是电路中的物理量,对应于电路的连线、节点;信号说明全局量,用于描述中的构造体(Architecture), 实体(Intity),程序包(package)。
变量—变量是程序运算中的中间量,并不对应电路中的物理量。
变量说明局部量,用于进程语句(process), 函数(Function), 过程(procedure)。
常量—常数也不对应电路中的物理量,当常量说明全局量,在构造体(Architecture), 实体(Intity),程序包(package),进程语句(process), 函数(Function), 过程(procedure)中均可使用。
数据对象的定义格式:signal 信号名:数据类型,约束条件,表达式Variable 变量名:数据类型,约束条件:=表达式Constant 常量名:数据类型,约束条件:=表达式例如:Variable count:INTEGER RANGE 0 TO 255:=10Constant Daly:Time:=100ns信号代入和变量赋值的区别:两者形式不同,操作过程也不相同。
变量赋值符“:=”,信号的代入符“<=”。
在变量的赋值语句中,该语句一当执行,其值立即将赋予变量;而信号的代入,其语句执行后不会立即使信号发生代入,在下条语句执行时,仍使用原来的信号值,如进程语句中的敏感表的信号代入就是如此。
二、数据类型VHDL语言中的数据类型,一般而言可分为:标量类型和组合类型。
在实际使用中,也可分成予定义类型和用户定义类型。
VHDL语言是强类型的语言,主要可按如下分类和变换处理。
①标准数据类型⑴整数⑵实数(浮点数)-1.0E+38~+1.0E38 ⑶位bit(0,1)⑷位矢量⑸布尔量,“假”,“真”⑹字符(ASCⅡ)字符⑺时间⑻错误等级⑼自然数(大于等于0的整数)⑽字符串(字符矢量)②用户定义的数据类型TYPE 数据类型名{数据类型名} 数据类型定义⑴枚举类型⑵整数类型⑶实数类型⑷数组类型⑸存取类型⑹文件类型⑺记录类型⑻时间类型③用户定义子类型SUBTUPE 子类型名IS 数据类型名[范围]例:SUBTYPE digit is INTEGER RANGE 0 TO 9④数据类型转换数据类型的变换函数通常由“STD_LOGIC_1164”,“STD_LOGIC_ARITH”,“STD_LOGIC_UNSIGNED”的程序包提供例如,在STD_LOGIC_1164程序包中,TO_STD LOGIC VECTOR(A) 由BIT_VECTOR转换为STD_LOGIC_VECTORTO_BITVECTOR(A) 由STO_LOGIC_VECTOR转为BIT_VECTORTO_STDLOGIC(A) 由BIT转换为STD_LOGICTO_BIT(A) 由STD_LOGIC转换成BIT signal a: BIT_VECTOR(11 DOWNTO 0)signal b: STD_LOGIC_VECTOR(11 DOWNTO 0)a<=X”A8” 十六进制值可赋予位矢量b<=X”A8” 语法错,十六进制不能赋予.STD 矢量b<=TO_STDLOGICVECTOR(X“AF7”)b<=TO_STDLOGICVECTOR(O“5177”)八进制变换b<=TO_STDLOGICVECTCR(B“1010_1111_0111”)下表中也给出一些典型的类型变换函数三、运算符运算符的优先级如下表所示:运算符的优先级例如,并置运算符的使用:tmp_b<=b AND (en&en&en&en) y <= a & tmp_b第一个语句表示b 的4位位矢量由en 进行选择 得到一个4位位矢量输出第二个语句表示4位位矢量a 和4位位矢量b 再 次连接(并置)构成8位的位矢量y 输出 右图所示为并置运算符操作的电路示意。
第四章VHDL的语言要素
4.1 VHDL的数据对象
与其他高级语言一样,VHDL中把用来承载数据的容器叫做VHDL的数据对象,VHDL的数据对象主要有信号、常量和变量三类。
1 常量
在VHDL中,常量是一种不变的量,它只能在对它定义时进行赋值,并在整个程序中保持该值不变。
常量的功能一方面可以在电路中代表电源、地线等,另一方面可提高程序的可读性,也便于修改程序。
常量定义的格式为:
CONSTANT 常量名:数据类型:=表达式;
[例3.4] 常量定义举例
CONSTANT V: INTEGER:=8;
2 变量
变量是临时数据的容器,它没有物理意义,并且只能在进程和子程序中定义,也只能在进程和子程序中使用。
变量一旦赋值立即生效。
变量定义的描述格式为:VARIABLE 变量名:数据类型[:=表达式];
[例3.5]变量定义举例
VARIABLE y: INTEGER;
3 信号
信号是VHDL的一种重要数据对象,它定义了电路中的连线和元件的端口。
其中端口和内部信号定义的差别是在端口定义中多了一个端口模式的定义。
信号是一个全局量,可以用来进行各模块之间的通信。
信号定义的格式为:
SIGNAL 信号名:数据类型;
[例3.6]信号定义举例
SIGNAL A: STD_LOGIC;
4.2 VHDL的数据类型
VHDL是一种强类型的语言,每一个数据对象都必须具有确定的数据类型定义,并且只有在相同数据类型的数据对象之间,才能进行数据交换。
VHDL预定义了大量的数据类型,下面介绍几种最常用的数据类型。
1 整数数据类型(INTEGER)
整数类型的数有正整数负整数和零,在VHDL中其取值范围是:
-2147483547---2147483646 。
2 实数数据类型(REAL)
VHDL的实数与数学中的实数或浮点数相似,只是范围被限定为:-1.0E38---1.0E38,并且在书写时一定要有小数。
3 位数据类型(BIT)
在数字系统中,信号经常用位数据类型表示,位数据类型属于枚举类型,其值是用带单引号的‘1’和‘0’表示。
4 位矢量数据类型(BIT_VECTOR)
位矢量是用双引号括起来的一组位数据,例如“010101”,通常用来表示数据总线。
5 布尔量数据类型(BOOLEAN)
布尔量数据类型也属于枚举类型,其值只有“TRUE”和“FALSE”两种状态,通常用来表示关系运算和关系运算结果。
6 字符数据类型(CHARACTER)
VHDL的字符数据类型表示ASCII码的128个字符,书写时要求用单引号括起来,并且要区分大小写。
例如:‘A’,‘a’等。
7 字符串数据类型(STRING)
字符串是双引号括起来的一串字符。
例如:“laksdklakld”
8 STD_LOGIC数据类型
与位数据类型相似,STD_LOGIC数据类型也属于枚举类型,但它的取值有下面的九种:‘U’初始值
‘X’不定
‘0’0
‘1’1
‘Z’高阻
‘W’弱信号不定
‘L’弱信号0
‘H’弱信号1
‘-’不可能情况。
9 STD_LOGIC_VECTOR数据类型
STD_LOGIC_VECTOR数据类型,表示的是用双引号括起来的一组STD_LOGIC数据“10101101”,通常用来表示数据总线。
由于STD_LOGIC的九种取值,更能反映电路的实际情况,所以在VHDL描述中一般用STD_LOGIC和STD_LOGIC_VECTOR,取代BIT和BIT_VECTOR等数据类型。
因为STD_LOGIC数据类型,是在IEEE库的STD_LOGIC_1164程序包中说明的,所以当在设计中要使用这种数据类型时,必须在VHDL的库、程序包说明语区,加入下列库、程序包说明语句:
[例3.7]库、程序包说明举例
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
4.3 VHDL语言的操作符和表达式
VHDL中大量的设计思想是用表达式配合实现的。
与其他高级软件编程语言相似,VHDL的表达式由操作数和操作符组成。
操作数由前面介绍的具有确定数据类型的数据对象担任。
操作符用来连接操作数,以完成所要求的数据的处理和转换。
VHDL具有丰富的预定义操作符,由这些操作符可以完成各种形式的表达式的功能。
预定义操作符可分为四种类型:算术操作符,关系操作符,逻辑操作符和连接操作符。
下面分别介绍四种类型的操作符和对应的简单的表达式,关于表达式的综合表示形式将在后面的具体实例中进行介绍。
1 逻辑操作符和逻辑表达式
逻辑操作符在逻辑表达式中,用来完成逻辑类型数据对象的逻辑操作。
VHDL的逻辑操作符如表3.2所示。
表3.2 逻辑操作符
[例3.8]简单逻辑表达式举例
A and B
not Z
注意,逻辑操作符左右的数据类型必须相同
2 算数操作符和算数表达式
VHDL提供的完成算数运算的操作符如表3.3所示。
表3.3 算数操作符
[例3.9]简单算数表达式举例
A +
B –C
3 关系操作符和关系表达式
关系操作符在关系表达式中,用于进行相同数据类型数据对象间的比较,关系表达式的结果是布尔类型,VHDL提供的关系操作符如表3.4所示。
表3.4 关系操作符
[例3.10]简单关系表达举例
Y >= G
注意,小于等于符号和信号赋值符号的形式完全相同,只能从程序上下文中进行区别。
4 并置操作符和并置表达式
VHDL提供的并置操作符是”&”。
它主要用来将普通操作数或数组组合起来,以形成新的操作数。
例如”HE”&”LLO”的结果为”HELLO”;‘0’& …1‟ & “010110”的结果为”01010110”。