1、VHDL语言的基本要素一、 数据对象VHDL语言的主要数据对象有信号,变量,常量。信号信号是电路中的物理量,对应于电路的连线、节点;信号说明全局量,用于描述中的构造体(Architecture), 实体(Intity),程序包(package)。变量变量是程序运算中的中间量,并不对应电路中的物理量。变量说明局部量,用于进程语句(process), 函数(Function), 过程(procedure)。常量常数也不对应电路中的物理量,当常量说明全局量,在构造体(Architecture), 实体(Intity),程序包(package),进程语句(process), 函数(Function),
2、 过程(procedure)中均可使用。数据对象的定义格式:signal 信号名:数据类型,约束条件,表达式Variable 变量名:数据类型,约束条件:=表达式Constant 常量名:数据类型,约束条件:=表达式例如:Variable count:INTEGER RANGE 0 TO 255:=10Constant Daly:Time:=100ns信号代入和变量赋值的区别:两者形式不同,操作过程也不相同。变量赋值符“:=”,信号的代入符“=”。在变量的赋值语句中,该语句一当执行,其值立即将赋予变量;而信号的代入,其语句执行后不会立即使信号发生代入,在下条语句执行时,仍使用原来的信号值,如进
3、程语句中的敏感表的信号代入就是如此。二、 数据类型VHDL语言中的数据类型,一般而言可分为:标量类型和组合类型。在实际使用中,也可分成予定义类型和用户定义类型。VHDL语言是强类型的语言,主要可按如下分类和变换处理。 标准数据类型整数实数(浮点数)-1.0E+38+1.0E38位bit(0,1)位矢量布尔量,“假”,“真”字符(ASC)字符时间错误等级自然数(大于等于0的整数)字符串(字符矢量) 用户定义的数据类型TYPE 数据类型名 数据类型名 数据类型定义 枚举类型 整数类型实数类型数组类型 存取类型文件类型记录类型时间类型 用户定义子类型SUBTUPE 子类型名 IS 数据类型名 范围例
4、: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转换成BITsig
5、nal 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”)下表中也给出一些典型的类型变换函数函数名功能STD_LOGIC_1164包集合 TO_STDLOGICVECTOR(A) TO_BITVECTOR(A) TO_STDLOGI
6、C(A) TO_BIT(A)由BIT.VECTOR转换为STD_LOGIC_VECTOR由STD_LOGIC_VECTOR转换为BIT_VECTOR由BIT转换成STD_LOGIC由STD_LOGIC转换成BITSTD_LOGIC_ARITH包集合 CONV_STD_LOGIC_VECTOR(A,位长) CONV_INTEGER(A)由INTEGER,UNSDGNED,SIGNED转换成SED_LOGIC_VECTOR由UNSIGNED,SIGNED转换成INTFGERSTD_LOGIC_UNSIGNED包集合 CONV_INTGER(A)由STD_LOGIC_VECTOR转换乘INTEGER
7、三、 运算符运算符的优先级如下表所示:运算符的优先级优先级顺序运算操作类型操作符功能低高逻辑运算符LogicalAND逻辑与OR逻辑或NAND逻辑与非NOR逻辑或非XOR逻辑异或关系运算符Relational=等号/=不等号大于=大于等于加、减、Arithmetic并置Concatenation运算符+加-减&并置正、负运算符+正-负乘法运算符*乘/除MOD求模REM取余* *指数ABS取绝对值NOT取反y(4)enb(0)b(1)b(2)b(3)y(0)y(2)y(3)y(5)y(6)y(7)y(1)a(0)a(1)a(2)a(3)例如,并置运算符的使用:tmp_b=b AND (en&en
8、&en&en)y = a & tmp_b第一个语句表示b的4位位矢量由en进行选择得到一个4位位矢量输出第二个语句表示4位位矢量a和4位位矢量b再次连接(并置)构成8位的位矢量y输出 右图所示为并置运算符操作的电路示意。VHDL语言程序的基本结构 实体(Entity) 实体主要由实体说明和构造体组成;实体说明描述电路的外部特征,构造体描述的是电路内部的逻辑。实体说明主要包括类属参数说明端口说明构造体主要包括 名称命名 定义语句 并行处理语句等 定义语句是对其内部使用的信号、常数、数据类型、函数定义 构造体的子结构 构造体的子结构主要可由如下语句结构组成Block语句结构 Process语句结构
9、 过程(procedure) SUBPROGRAMS结构 函数(Function) 程序包、库、配置 库IEEE库、STD库、WORK库、用户定义库、面向ASIC库例如:LEBRARY IEEE Use IEEE STD_LOGIC_1164.ALL 程序包:是一个可编译的设计单元,也是库结构中的一个层次,用来单位罗列所要用到的信号定义、常数定义、数据类型、元件结构、函数定义、过程定义 程序包标题 集程序包体配置描述层与层之间的连接关系以及实体与结构之间的连接关系 设计者可以利用配置语句来选择不同的构造体,使其与要设计的实体相对应。在仿真某个实体时,可利用配置来选择不同的构造体,进行性能对比试
10、验以得到性能最佳的实体。 例如:CONTIGURATION配置名 OF 实体名 IS 语句说明 END 配置名 最简单的缺省配置格式: CONFIGURATION 配置名 OF 实体名 IS FOR 选配构造体名 END FOR END 配置名重载运算符(overloaded operators):和其他运算符一样,关系运算符也可以重载。重载运算符允许多种类型使用运算符(这些运算符不是由IEEE1076标准预定义的)。运算符可能由用户定义函数重载,但很多重载运算符是由IEEE1164和IEEE1076.3标准所定义。例如,IEEE 1076标准定义了为类型signed和integer以及unsigned和natural重载=运算符的函数。此重载运算符允许以下的代码段被执行。