EAD课程-第4章VHDL语言要素_第1页
EAD课程-第4章VHDL语言要素_第2页
EAD课程-第4章VHDL语言要素_第3页
EAD课程-第4章VHDL语言要素_第4页
EAD课程-第4章VHDL语言要素_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 VHDLVHDL语言除了具有一定的语法规则外,还定义语言除了具有一定的语法规则外,还定义了可以接受不同数据类型赋值的数据对象。了可以接受不同数据类型赋值的数据对象。 4.1 VHDL语言的数据对象语言的数据对象 常量常量(CONSTANT)(CONSTANT) 变量变量(VARIABLE)(VARIABLE) 信号信号(SIGNAL)(SIGNAL) 文件(文件(FILEFILE) 数据对象主要有四种类型:数据对象主要有四种类型:2 常量为全局量,常量为全局量,是指在设计描述过程中保持某一规定类是指在设计描述过程中保持某一规定类型特定值不变的量。型特定值不变的量。 1.1. 常量常量(CO

2、NSTANT)(CONSTANT) 定义格式:定义格式: 规则:规则: 常量的定义应在程序开始前进行;常量的定义应在程序开始前进行; 常量一旦被赋值就不能再改变;常量一旦被赋值就不能再改变; 常量所赋的值应和定义的数据类型一致;常量所赋的值应和定义的数据类型一致; 定义在程序包中的常量,定义在程序包中的常量,可在调用此程序包的所有可在调用此程序包的所有设计实体中使用;设计实体中使用; 定义在设计实体内的常量,仅在该实体内使用;定义在设计实体内的常量,仅在该实体内使用; 定义在某结构体中的常量,只能在该结构体使用;定义在某结构体中的常量,只能在该结构体使用; 定义在结构体中某单元的常量,只能用于

3、该单元。定义在结构体中某单元的常量,只能用于该单元。 CONSTANT 常量名:数据类型:常量名:数据类型:= =表达式;表达式; 3 1.1. 常量常量(CONSTANT)(CONSTANT) 例如:例如: CONSTANT CONSTANT width: INTEGER:=16 width: INTEGER:=16; CONSTANT CONSTANT delay: TIME:=20ns delay: TIME:=20ns; CONSTANT CONSTANT fbus: BIT_VECTOR:= fbus: BIT_VECTOR:=“1101011111010111”; CONSTANT

4、 CONSTANT Vcc: REAL:=5.0 Vcc: REAL:=5.0; -width-width是整数类型常量,值为是整数类型常量,值为1616-delay-delay是时间型常量,值为是时间型常量,值为20ns20ns-fbus-fbus是位矢量型常数是位矢量型常数 其值为其值为1101011111010111 -Vcc-Vcc是实数型常量,其值为是实数型常量,其值为5.05.0 4 变量为局部量,常用来存储中间数据,以便实变量为局部量,常用来存储中间数据,以便实现程序的算法。它只能在进程语句、函数语句和过现程序的算法。它只能在进程语句、函数语句和过程语句的结构中使用。程语句的结构

5、中使用。 变量的赋值是一种理想化的数据传输,即赋值变量的赋值是一种理想化的数据传输,即赋值是立即生效的,不存在任何延时的行为。是立即生效的,不存在任何延时的行为。 2.2.变量变量(VARIABLE) 定义格式:定义格式: VARIABLE 变量名变量名1 , 变量名变量名2, : 数据类型数据类型 := 初始值初始值 ; 例如:例如:VARIABLEVARIABLE b: INTEGERb: INTEGER; VARIABLEVARIABLE a: INTEGER:=2a: INTEGER:=2 ;- 定义定义b b为整数型变量为整数型变量- 定义定义a a为整数型变量,为整数型变量, 初值

6、为初值为2 2 5 2.2.变量变量(VARIABLE) 变量的使用规则:变量的使用规则: 变量不能用于硬件连线和存储元件;变量不能用于硬件连线和存储元件; 变量赋值和初始化赋值都用变量赋值和初始化赋值都用“:=”:=”表示;表示; 变量的初值不是预设的,某一时刻只能有变量的初值不是预设的,某一时刻只能有一个值;一个值; 变量不能用于在进程间传递数据;变量不能用于在进程间传递数据; 仿真时,变量用于建模;仿真时,变量用于建模; 综合时,变量充当数据的暂存。综合时,变量充当数据的暂存。6 2.2.变量变量(VARIABLE) 变量数值的改变是通过变量赋值来实现。变量数值的改变是通过变量赋值来实现

7、。 变量赋值语句的格式:变量赋值语句的格式: 目标变量名:目标变量名:= =表达式;表达式; 例如:例如:VARIABLEVARIABLE x x,y y:REALREAL; VARIABLEVARIABLE a a,b b:BITBIT VECTORVECTOR(7 7 DOWNTODOWNTO 0 0 );); x x:=100.0=100.0; y y:=1.5+x=1.5+x; a a:=“1011101”=“1011101” a a(4 4 TOTO 7 7):=:=(11,00,11,00);); b b(0 0 TOTO 5 5):= a:= a(2 2 TOTO 7 7););

8、7 信号是描述硬件系统的基本数据对象,它是电子电路内信号是描述硬件系统的基本数据对象,它是电子电路内部硬件连接的抽象,可以作为设计实体中并行语句模块间的部硬件连接的抽象,可以作为设计实体中并行语句模块间的信息交流通道。信息交流通道。 信号是一个全局量,只有定义后才能使用,通常用于在信号是一个全局量,只有定义后才能使用,通常用于在结构体、程序包和实体说明中。结构体、程序包和实体说明中。 3.3.信号信号(SIGNAL) 信号定义格式:信号定义格式: SIGNAL 信号名:数据类型信号名:数据类型 := =初值初值 ; 例如:例如:SIGNALSIGNAL S0: S0: STDSTD LOGIC

9、:=0LOGIC:=0; SIGNALSIGNAL FA FA,FB:FB: BITBIT; SIGNAL SIGNAL D: D: STDSTD LOOGICLOOGIC VECTORVECTOR(0 0 TOTO 1515);); - - 定义一个标准逻辑位信定义一个标准逻辑位信号号S0S0,初值为,初值为0 0 - - 定义两个定义两个BITBIT位信号位信号FAFA和和FBFB -定义标准逻辑定义标准逻辑1616位矢量信号位矢量信号D D 8 3.3.信号信号(SIGNAL) 信号赋值语句:信号赋值语句: 目标信号名目标信号名= =表达式;表达式; 例如:例如: x x=9=9; y

10、y=x=x; z z=x =x AFTERAFTER 5ns 5ns; 9 3.3.信号信号(SIGNAL) 信号与变量的区别:信号与变量的区别: 使用场合不同使用场合不同 变量在进程、函数和过程中说明;变量在进程、函数和过程中说明; 信号在结构体中说明。信号在结构体中说明。 赋值符号不同赋值符号不同 变量用变量用“:=”=”号赋值号赋值, , 其值被立即使用其值被立即使用( (无时间延时无时间延时) ); 信号用信号用“=”=”赋值,其值可以附加延时。赋值,其值可以附加延时。 10 VHDLVHDL是一种强类型语言,编程时非常注重数据是一种强类型语言,编程时非常注重数据类型的匹配问题,要求设

11、计实体中的数据对象必须类型的匹配问题,要求设计实体中的数据对象必须具有确定的数据类型,并且相同数据类型的量才能具有确定的数据类型,并且相同数据类型的量才能进行相互传递或赋值。进行相互传递或赋值。 4.2 VHDL数据类型数据类型 标量型(标量型(Scalar TypeScalar Type) 复合型(复合型(Composite TypeComposite Type) 存取型(存取型(Access TypeAccess Type) 文件型(文件型(Files TypeFiles Type) 1.1. 数据类型的分类数据类型的分类 VHDLVHDL语言与其他硬件描述语言相比有较多的数语言与其他硬件

12、描述语言相比有较多的数据类型据类型, ,因此它能够创建高层次的系统和算法模型。因此它能够创建高层次的系统和算法模型。 根据数据用途的不同,根据数据用途的不同,VHDLVHDL中的数据类型可分中的数据类型可分为四大类:为四大类: 11 标量型标量型 1.1. 数据类型的分类数据类型的分类 是单元素的最基本数据类型,通常用于描述是单元素的最基本数据类型,通常用于描述一个单值数据对象。包括:一个单值数据对象。包括: 实数类型实数类型 整数类型整数类型 枚举类型枚举类型 时间类型时间类型12 复合型复合型 1.1. 数据类型的分类数据类型的分类 可以由最基本的数据类型复合而成,如可由标可以由最基本的数

13、据类型复合而成,如可由标量复合而成。分为:量复合而成。分为: 数组型(数组型(ArrayArray) 记录型(记录型(RecordRecord) 存取型存取型 为给定的数据对象提供存取方式。为给定的数据对象提供存取方式。 文件型文件型 用于提供多值存取类型。用于提供多值存取类型。 13 1.1. 数据类型的分类数据类型的分类 上述的四种数据类型又可分为两大类:上述的四种数据类型又可分为两大类: 预定义数据类型预定义数据类型 用户自定义数据类型用户自定义数据类型 是是VHDLVHDL中最常用、最基本的数据类型,这些数中最常用、最基本的数据类型,这些数据类型都已在据类型都已在VHDLVHDL的标准

14、库中作了定义,用户可在的标准库中作了定义,用户可在设计中随时调用。设计中随时调用。 由用户根据需要而自定义的数据类型。由用户根据需要而自定义的数据类型。14 是一种已在标准程序包(是一种已在标准程序包(STANDARDSTANDARD)中预先定)中预先定义的数据类型,在实际使用中能自动包含在义的数据类型,在实际使用中能自动包含在VHDLVHDL的的源文件中。源文件中。 2.2. VHDL的预定义数据类型的预定义数据类型 分为:分为:布尔数据类型布尔数据类型 位数据类型位数据类型 位矢量数据类型位矢量数据类型 字符数据类型字符数据类型 整数数据类型整数数据类型 自然数数据类型自然数数据类型正整数

15、数据类型正整数数据类型实数数据类型实数数据类型字符串数据类型字符串数据类型时间数据类型时间数据类型 错误等级数据类型错误等级数据类型15 (1 1)布尔()布尔(BOOLEANBOOLEAN)数据类型)数据类型 是一个二值枚举型数据类型,常用于关系运算是一个二值枚举型数据类型,常用于关系运算和逻辑判断。和逻辑判断。 布尔数据量包括逻辑布尔数据量包括逻辑“假(假(FALSEFALSE)”和逻辑和逻辑“真(真(TRUETRUE)”两种取值。两种取值。 例如,在例如,在IF AIF AB B语句中,若语句中,若A AB B成立,则布尔成立,则布尔数据量为数据量为TRUETRUE,否则布尔数据量为,否

16、则布尔数据量为FALSEFALSE。 定义格式:定义格式: TYPE BOOLEAN IS (FALSE,TRUE);); 若某个信号或变量被定义为布尔数据,则在仿若某个信号或变量被定义为布尔数据,则在仿真中将自动对其赋值进行核查。真中将自动对其赋值进行核查。 布尔数据没有数值的含义布尔数据没有数值的含义 ,不能进行算术运,不能进行算术运算,只能用于关系运算和逻辑判断。算,只能用于关系运算和逻辑判断。16 (2 2)位(位(BIT)数据类型)数据类型 位数据类型也属于二值枚举型,通常用来表示位数据类型也属于二值枚举型,通常用来表示信号的取值。信号的取值。 它的取值只有它的取值只有“0”0”和和

17、“1”1”。 定义格式:定义格式:TYPE BIT IS (0,1);); 位数据类型的数据对象为信号和变量,可以进位数据类型的数据对象为信号和变量,可以进行逻辑运算,其结果仍为位数据类型。行逻辑运算,其结果仍为位数据类型。 17 (3 3)位矢量(位矢量(BIT_VECTOR)数据类型)数据类型 定义格式:定义格式:TYPE BITTYPE BIT VECTOR IS ARRAY (NATURAL RANGEVECTOR IS ARRAY (NATURAL RANGE ) OF BIT) OF BIT; 位矢量是基于位数据类型的数组,常用来表位矢量是基于位数据类型的数组,常用来表示总线的状态

18、。示总线的状态。 位矢量是用双引号括起来的数字序列,如位矢量是用双引号括起来的数字序列,如“1011”1011”,X“00EA”X“00EA”。 其中,其中,“”表示数据范围未定界。表示数据范围未定界。 规则:规则:使用位矢量必须注明位宽,即数组中的元素使用位矢量必须注明位宽,即数组中的元素个数和排列。个数和排列。 例如:例如:SIGNALSIGNAL b: BIT b: BIT VECTORVECTOR(0 0 TOTO 7 7);); 定义定义b b由由b(0)b(0)b(7)b(7)构成的矢量,左为构成的矢量,左为b(0)b(0),右为,右为b(7)b(7); 18 (4)字符()字符(

19、CHARACTER)数据类型)数据类型 定义格式:定义格式:TYPE CHARACTER IS(ASCII码字符表中的全部字符);码字符表中的全部字符); 字符数据类型是用单引号括起来的字符数据类型是用单引号括起来的ASCIIASCII码字码字符,如符,如XX、yy、66、33等。等。 规则:规则: 字符型数据用单引号括起来;字符型数据用单引号括起来; 字符型数据的字母有大小写之分;字符型数据的字母有大小写之分; 字符型数据仅包括字符型数据仅包括ASCIIASCII码字符表中的全码字符表中的全部字符。部字符。19 (5)字符串()字符串(STRING)数据类型)数据类型 定义格式:定义格式:T

20、YPETYPE STRINGSTRING ISIS ARRAY(POSITIVEARRAY(POSITIVE RANGERANGE ) ) OFOF CHARACTERCHARACTER; 字符串数据类型是用双引号括起来的字符序字符串数据类型是用双引号括起来的字符序列,是由字符型数据组成的数组,也称字符矢量列,是由字符型数据组成的数组,也称字符矢量或字符串数组。或字符串数组。 常用于程序的提示和说明。常用于程序的提示和说明。 例如:例如:“A BOY.”A BOY.”,“10101011”10101011”。20 (6)整数()整数(INTEGER)数据类型)数据类型 定义格式:定义格式:TY

21、PE INTEGER IS RANGE -2147483647 TO +2147483647TYPE INTEGER IS RANGE -2147483647 TO +2147483647; 整数数据类型与数学中的整数定义相同。整数数据类型与数学中的整数定义相同。 包括:正整数、负整数和零。包括:正整数、负整数和零。 取值范围:取值范围:3232位带符号数原码,位带符号数原码,-(2-(23131-1)-1)+(2+(23131-1)-1) 即即 -2147483647-2147483647 +2147483647+2147483647。 规则:规则: 整数不能作为矢量,不能单独对某一位进行操

22、作;整数不能作为矢量,不能单独对某一位进行操作; 整数不能用于逻辑运算,只能用于算术运算。整数不能用于逻辑运算,只能用于算术运算。 如:如:1515,10E310E3,16#D5#16#D5#,2#11011010#2#11011010#,8#653#8#653#。 整数可以用进制来表示。整数可以用进制来表示。 整数可以用来抽象地表达总线的状态。整数可以用来抽象地表达总线的状态。21(7)正整数()正整数(POSITIVE)数据类型)数据类型 定义格式:定义格式: SUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGERHIGH SUBTYPE POSITI

23、VE IS INTEGER RANGE 1 TO INTEGERHIGH; 正整数数据类型是整数数据类型的子类型,是正整数数据类型是整数数据类型的子类型,是不包括不包括0 0的正整数。的正整数。 取值范围:取值范围:3232位带符号数原码,位带符号数原码,1 1(2(23131-1)-1), 即即 1 121474836472147483647 其中,其中,INTEGERHIGHINTEGERHIGH是数值类属性是数值类属性, , 表示整数的上限值表示整数的上限值2 23131-1-1。 22(8)自然数()自然数(NATURAL)数据类型)数据类型 定义格式:定义格式: SUBTYPE NA

24、TURAL IS INTEGER RANGE 0 TO INTEGERHIGHSUBTYPE NATURAL IS INTEGER RANGE 0 TO INTEGERHIGH; 是整数数据类型的子类型,即非负的整数。是整数数据类型的子类型,即非负的整数。 包括:包括:0 0和正整数。和正整数。23(9)实数()实数(REAL)数据类型)数据类型 定义格式:定义格式: TYPE REAL IS RANGE -1.0E38 TO +1.0E38; 实数数据类型类似于数学中的实数,也称为浮点实数数据类型类似于数学中的实数,也称为浮点数数据类型,只能在仿真中使用。数数据类型,只能在仿真中使用。 取值

25、范围:取值范围:-1.0E+38-1.0E+38 +1.0E+38+1.0E+38 由正号、负号、小数点和数字组成。由正号、负号、小数点和数字组成。 例如:例如:-2.5-2.5、-1.0E8-1.0E8。 24(10)时间()时间(TIME)数据类型)数据类型 定义格式:定义格式: TYPE TIME IS RANGE 2147483647 TO 2147483647 用来表示时间的数据类型,由整数数据和单位用来表示时间的数据类型,由整数数据和单位两部分组成,取值范围是整数所定义的范围,两部分组成,取值范围是整数所定义的范围,仅在仅在系统仿真时,用来表示信号延时的时间,不能用于系统仿真时,用

26、来表示信号延时的时间,不能用于逻辑综合。逻辑综合。 例如:例如:55 ms55 ms,20 ns20 ns。25(10)时间()时间(TIME)数据类型)数据类型 unitsunits fs fs; -飞秒(飞秒(1010-15-15S S) ps=1000fs ps=1000fs; -皮秒皮秒ns=1000psns=1000ps; -纳秒纳秒us=1000nsus=1000ns; -微秒微秒ms=1000usms=1000us; -毫秒毫秒sec=1000mssec=1000ms;-秒秒min=60secmin=60sec; -分分hr=60minhr=60min; -时时 ENDEND u

27、nits units; 26(11)错误等级()错误等级(SEVERITY_LEVEL) 定义格式:定义格式:TYPETYPE severity_levelseverity_level ISIS(notenote,warningwarning,errorerror,failurefailure);); 错误等级数据用于表征系统的工作状态。错误等级数据用于表征系统的工作状态。 包括:包括:NOTENOTE(注意),(注意),WARNINGWARNING(警告),(警告), ERRORERROR(出错),(出错),FAILUREFAILURE(失败)。(失败)。 在仿真过程中,可输出这在仿真过程中

28、,可输出这4 4种值来提示被仿真系种值来提示被仿真系统当前的工作状态。统当前的工作状态。 27 3.3. IEEEIEEE预定义的标准逻辑位和标准逻辑矢量预定义的标准逻辑位和标准逻辑矢量 在在IEEEIEEE库的程序包库的程序包STD_LOGIC_1164STD_LOGIC_1164中,定义了中,定义了两个非常重要的数据类型:两个非常重要的数据类型: 标准逻辑位标准逻辑位STD_LOGICSTD_LOGIC 标准逻辑矢量标准逻辑矢量STD_LOGIC_VECTORSTD_LOGIC_VECTOR 使用时可打开使用时可打开IEEEIEEE库,调用库,调用STD_LOGIC_1164STD_LOG

29、IC_1164程程序包。如:序包。如: LIBRARY LIBRARY IEEE IEEE; USEUSE IEEE.STD_LOGIC_1164. IEEE.STD_LOGIC_1164.ALLALL; 28 (1 1)STD_LOGIC(标准逻辑位)数据类型(标准逻辑位)数据类型 是用是用IEEE1164IEEE1164标准定义的一种常用的标准定义的一种常用的9 9值逻辑位数据类值逻辑位数据类型,是位(型,是位(BITBIT)数据类型的扩展。)数据类型的扩展。 STD_LOGICSTD_LOGIC的的9 9种逻辑值:种逻辑值: U-U-未初始化的;未初始化的;X-X-强未知的;强未知的;

30、0-0-强强0 0; 1-1-强强1 1; Z-Z-高阻态;高阻态; W-W-弱未知的;弱未知的; L-L-弱弱0 0; H-H-弱弱1 1; -忽略忽略 定义格式:定义格式:TYPE STDTYPE STD LOGIC ISLOGIC IS(UU,XX,00,11,ZZ, WW,LL,HH,-); 注意:注意:逻辑值的字母必须用大写。逻辑值的字母必须用大写。29 (2 2)STD_LOGIC_VECTORSTD_LOGIC_VECTOR(标准逻辑矢量)数据类型(标准逻辑矢量)数据类型 是基于是基于STD_LOGICSTD_LOGIC数据类型的一维标准逻辑数组,数据类型的一维标准逻辑数组,常用

31、于描述数字系统中的总线。常用于描述数字系统中的总线。 数组中每一个元素的数据类型都应是数组中每一个元素的数据类型都应是STD_LOGICSTD_LOGIC中定义的逻辑值。中定义的逻辑值。 定义格式:定义格式:TYPETYPE STDSTD LOGICLOGIC VECTOR IS ARRAYVECTOR IS ARRAY(NATURAL RANGENATURAL RANGE)OF STDOF STD LOGICLOGIC; 赋值原则:赋值原则:同位宽、同类型矢量间才能进行赋值。同位宽、同类型矢量间才能进行赋值。30 4. 其他预定义的标准数据类型其他预定义的标准数据类型 在在IEEEIEEE库

32、的库的STD_LOGIC_ARITHSTD_LOGIC_ARITH程序包中,包含有两个符程序包中,包含有两个符合合IEEEIEEE标准的数据类型,分别为:标准的数据类型,分别为: 无符号型(无符号型(UNSIGNEDUNSIGNED) 有符号型(有符号型(SIGNEDSIGNED) 这两种数据类型主要用于算术运算,使用时可打开这两种数据类型主要用于算术运算,使用时可打开IEEEIEEE库,调用库,调用STD_LOGIC_ARITHSTD_LOGIC_ARITH程序包。如:程序包。如: LIBRARY LIBRARY IEEE IEEE; USEUSE IEEE.STD_LOGIC_ARITH.

33、 IEEE.STD_LOGIC_ARITH.ALLALL; 定义格式:定义格式: TYPE TYPE UNSIGNEDUNSIGNED ISIS ARRAYARRAY(NATURAL RANGENATURAL RANGE)OFOF STDSTD LOGICLOGIC; TYPE TYPE SIGNEDSIGNED ISIS ARRAYARRAY(NATURAL RANGENATURAL RANGE)OFOF STDSTD LOGICLOGIC; 31 用于程序中无符号数的运算,是由用于程序中无符号数的运算,是由STD_LOGICSTD_LOGIC数数据类型构成的一维数组,代表一个无符号的数值,

34、据类型构成的一维数组,代表一个无符号的数值,即一个二进制数。即一个二进制数。 当一个数据除了执行算术运算外,还要执行逻当一个数据除了执行算术运算外,还要执行逻辑运算时,就必须将该数据定义为无符号数据类型,辑运算时,就必须将该数据定义为无符号数据类型,而不是而不是SIGNEDSIGNED或或INTEGERINTEGER类型。例如:类型。例如: SIGNAL SIGNAL DATA DATA: UNSIGNED( 3 : UNSIGNED( 3 DOWNTODOWNTO 0) 0); DATA=“1000” DATA=“1000”; 如十进制数的如十进制数的9 9, ,可以表示为可以表示为UNSI

35、GNED(“1001”)UNSIGNED(“1001”)。 (1)无符号()无符号(UNSIGNED)数据类型数据类型 定义信号定义信号DATADATA是无符号数据,其数值为是无符号数据,其数值为8 8。 32 用于程序中有符号数的运算,表示一个有符号用于程序中有符号数的运算,表示一个有符号二进制整数。二进制整数。 例如:例如: VARIABLE VARIABLE DATA1,DATA2: SIGNED (3DATA1,DATA2: SIGNED (3 DOWNTO DOWNTO 0)0); DATA1=“1001”DATA1=“1001”; DATA2=“0111” DATA2=“0111”

36、; 定义变量定义变量DATA1DATA1和和DATA2DATA2分别为分别为-7-7和和7 7。 有符号数的最高位为符号位,其余位代表数值有符号数的最高位为符号位,其余位代表数值大小,并用补码表示。大小,并用补码表示。 (2 2)有符号()有符号(SIGNED)数据类型数据类型 33 5.5. 用户自定义的数据类型用户自定义的数据类型 除了一些标准的预定义数据类型外除了一些标准的预定义数据类型外, , 用户还可以用户还可以根据设计需要根据设计需要, , 自己定义新的数据类型自己定义新的数据类型, , 称为用户自称为用户自定义的数据类型。定义的数据类型。 用户自定义数据有多种类型:用户自定义数据

37、有多种类型: 枚举型(枚举型(ENUMERATIONENUMERATION) 整数型(整数型(INTEGERINTEGER) 数组型(数组型(ARRAYARRAY) 记录型(记录型(RECORDRECORD) 时间型(时间型(TIMETIME) 实数型(实数型(REALREAL) 34 是用文字、符号表示的一组实际的二进制数。是用文字、符号表示的一组实际的二进制数。 例如:例如: TYPE TYPE BITBIT IS IS (00,11);); 定义定义BITBIT数据类型为枚举型,取值为数据类型为枚举型,取值为0 0和和1 1。 (1)枚举型枚举型 定义格式:定义格式: TYPE 数据类型

38、名数据类型名 IS(取值取值1 1,取值,取值2 2,);); 又如:又如: TYPETYPE S S ISIS (S0S0,S1S1,S2S2,S3S3);); 定义定义S S数据类型为状态变量数据类型为状态变量S0S0,S1S1,S2S2,S3S3。 这四个状态变量分别代表四种不同的状态取值,这四个状态变量分别代表四种不同的状态取值,即即0000,0101,1010,1111。 35 数组是一组具有相同数据类型的元素组合。数组是一组具有相同数据类型的元素组合。 数组型属于复合类型,是将相同类型的单个数数组型属于复合类型,是将相同类型的单个数据组合在一起而形成的数据类型。可以是一维数组据组合

39、在一起而形成的数据类型。可以是一维数组(一个下标)和多维数组(多个下标)。(一个下标)和多维数组(多个下标)。 根据数组元素下标的范围是否被指定,可分为根据数组元素下标的范围是否被指定,可分为限定性数组和非限定性数组。限定性数组和非限定性数组。 限定性数组下标的取值范围在数组定义时就已限定性数组下标的取值范围在数组定义时就已确定,并用整数指定,排列顺序可以由低到高确定,并用整数指定,排列顺序可以由低到高( (如:如:0 0 TOTO 7)7),也可以由高到低也可以由高到低( (如:如:7 7 DOWNTODOWNTO 0)0)。 (2)数组型数组型 非限定性数组不具体指明下标的取值范围,当非限

40、定性数组不具体指明下标的取值范围,当用到该数组时,再进行定义。用到该数组时,再进行定义。36 限定性数组定义格式:限定性数组定义格式: 例如:例如:TYPETYPE DATA_BUSDATA_BUS IS ARRAYIS ARRAY(7(7 DOWNTODOWNTO 0)0) OF OF STD_LOGICSTD_LOGIC; 定义八位数据总线定义八位数据总线DATA_BUSDATA_BUS,下标由高到低排列。下标由高到低排列。 (2)数组型数组型 非限定性数组定义格式:非限定性数组定义格式: TYPE TYPE 数组名数组名 ISIS ARRAYARRAY(数组范围)数组范围)OFOF 基本

41、数据类型;基本数据类型; TYPE TYPE 数组名数组名 ISIS ARRAY(ARRAY(数组下标名数组下标名 RANGERANGE) OFOF 基本数据类型;基本数据类型; 例如:例如:TYPETYPE BIT_VECTORBIT_VECTOR ISIS ARRAYARRAY (NATURAL (NATURAL RANGERANGE) ) OFOF BITBIT; VARABLEVARABLE DATA: BIT_VECTOR (1DATA: BIT_VECTOR (1 TOTO 6)6); 数组数组DATADATA是是BIT_VECTORBIT_VECTOR的子集,其下标取值按自然数的

42、子集,其下标取值按自然数1 16 6排列排列。 37 记录型是一个数组,由已定义的、不同的数据记录型是一个数组,由已定义的、不同的数据类型元素构成。类型元素构成。 (3)记录型记录型 定义格式:定义格式: 记录型也是一种多值的数据类型。但是记录型记录型也是一种多值的数据类型。但是记录型是由多个不同类型的元素集合而成的。是由多个不同类型的元素集合而成的。 TYPE 记录类型名记录类型名 IS RECORD 元素名元素名: : 元素数据类型;元素数据类型; 元素名元素名: : 元素数据类型;元素数据类型; END RECORD 记录类型名记录类型名 ; 38 (3)记录型记录型 例如:例如:将将D

43、ATADATA定义为四元素的记录类型。定义为四元素的记录类型。 TYPE TYPE DATA DATA ISIS RECORD RECORD D0: TIME D0: TIME; D1: TIME D1: TIME; D2: STD_LOGIC D2: STD_LOGIC; D3: STD_LOGIC D3: STD_LOGIC;END RECORDEND RECORD DATA DATA; - - 定义定义DATADATA为四元素的记录类型为四元素的记录类型 - - 定义定义D0D0为时间类型为时间类型 - - 定义定义D1D1为时间类型为时间类型 - - 定义定义D2D2为标准位类型为标准

44、位类型 - - 定义定义D3D3为标准位类型为标准位类型39 6.6. 数据类型的转换数据类型的转换 在在IEEEIEEE库中,有三个程序包为库中,有三个程序包为VHDLVHDL语言提供了语言提供了多条数据类型转换函数,用户使用这些函数,可以多条数据类型转换函数,用户使用这些函数,可以完成数据类型的转换。完成数据类型的转换。 程序包程序包 函数名称函数名称 功功 能能 STD_LOGIC_1164 STD_LOGIC_1164 TO_BIT TO_BIT 由由STD_LOGICSTD_LOGIC转换为转换为BIT BIT TO_BIT VECTOR TO_BIT VECTOR 由由STD_LO

45、GIC_VECTORSTD_LOGIC_VECTOR转换为转换为BIT_VECTOR BIT_VECTOR TO_STD ULOGIC TO_STD ULOGIC 由由BITBIT转换为转换为STD_LOGIC STD_LOGIC TO_ STD ULOGIC VECTOR TO_ STD ULOGIC VECTOR 由由BIT_VECTORBIT_VECTOR转换为转换为STD_LOGIC_VECTOR STD_LOGIC_VECTOR STD_LOGIC_ARITHSTD_LOGIC_ARITHCONV_INTEGER CONV_INTEGER 由由UNSIGNEDUNSIGNED、SIG

46、NEDSIGNED转换为转换为INTEGER INTEGER CONV_UNSIGNED CONV_UNSIGNED 由由INTEGERINTEGER、SIGNEDSIGNED转换为转换为UNSIGNED UNSIGNED CONV_ STD_LOGIC_VECTOR CONV_ STD_LOGIC_VECTOR 由由INTEGERINTEGER、UNSIGNEDUNSIGNED、SIGNEDSIGNED转换为转换为STD_LOGIC_VECTOR STD_LOGIC_VECTOR STD_LOGIC_UNSIGNED STD_LOGIC_UNSIGNED CONV_INTEGER CONV_

47、INTEGER 由由STD_LOGIC_VECTORSTD_LOGIC_VECTOR转换为转换为INTEGER INTEGER 40 6.6. 数据类型的转换数据类型的转换 例如例如: :将将INTEGERINTEGER类型转换为类型转换为STD_LOGIC_VECTORSTD_LOGIC_VECTOR类型。类型。 SIGNAL SIGNAL A: INTEGER A: INTEGER RANGERRANGER 0 0 TOTO 15 15; SIGNAL SIGNAL B: STD_LOGIC_VECTORB: STD_LOGIC_VECTOR(3 3 DOWNTODOWNTO 0 0);)

48、; B B = CONV_STD_LOGIC_VECTOR ( A )= CONV_STD_LOGIC_VECTOR ( A );第第1 1条语句,将信号条语句,将信号A A定义为定义为INTEGERINTEGER类型。类型。第第2 2条语句,将信号条语句,将信号B B定义为定义为STD_LOGIC_VECTORSTD_LOGIC_VECTOR类型。类型。第第3 3条语句,将信号条语句,将信号A A的数据类型转换为的数据类型转换为 STD_LOGIC_VECTOR STD_LOGIC_VECTOR类型,并赋值给类型,并赋值给B B。 41 3.3. 标识符标识符 标识符是设计人员为书写程序所规

49、定的一些标识符是设计人员为书写程序所规定的一些词,用来给常数、变量、信号、端口、子程序、词,用来给常数、变量、信号、端口、子程序、实体和结构体等定义的名称。实体和结构体等定义的名称。 VHDLVHDL语言的标准版本分为语言的标准版本分为VHDL87VHDL87版和版和VHDL93VHDL93版。版。 VHDL87VHDL87版的标识符称为短标识符或标识符。版的标识符称为短标识符或标识符。 VHDL93VHDL93版的标识符是基于版的标识符是基于VHDL87VHDL87标准扩展标准扩展后形成的,故称作扩展标识符。后形成的,故称作扩展标识符。 42 3.3. 标识符标识符 短标识符为短标识符为VH

50、DL87VHDL87版规定的标识符,但版规定的标识符,但VHDL93VHDL93版版同样支持短标识符。同样支持短标识符。 (1 1)短标识符)短标识符 规则:规则: 以字母开头以字母开头, , 后跟若干字母、数字或下划线构成;后跟若干字母、数字或下划线构成; 标识符不能以下划线结尾;标识符不能以下划线结尾; 标识符中的下划线不能连续使用;标识符中的下划线不能连续使用; 标识符中的字母不分大小写;标识符中的字母不分大小写; VHDLVHDL的保留字不能用作标识符。的保留字不能用作标识符。 例如:例如:h_adder,h_adder, mux21,mux21, exampleexample 为合法

51、标识符为合法标识符 2adder,2adder, _mux21,_mux21, ful_adder,ful_adder, adder_adder_ 为非法标识符为非法标识符43 3.3. 标识符标识符 满足满足VHDL93VHDL93版标准的标识符。版标准的标识符。 (2 2)扩展标识符)扩展标识符规则:规则: 扩展标识符用反斜杠扩展标识符用反斜杠“”定界,如:定界,如:A BOY.A BOY.; 扩展标识符允许以数字开头,如:扩展标识符允许以数字开头,如:74LS19374LS193; 扩展标识符允许使用空格符、图形符号及两个以扩展标识符允许使用空格符、图形符号及两个以上的下划线,如:上的下

52、划线,如:SIG_ _&NSIG_ _&N; 扩展标识符仍区分大小写字母,如:扩展标识符仍区分大小写字母,如:ENDEND不同于不同于endend; 扩展标识符允许使用保留字,如:扩展标识符允许使用保留字,如:ENDEND; 扩展标识符与同名的短标识符不同,如:扩展标识符与同名的短标识符不同,如:CADCAD不不同于同于CADCAD。 44 3.3. 标识符标识符 (3 3)下标名)下标名 用于指示数组型变量或信号的某一元素。用于指示数组型变量或信号的某一元素。 格式:格式: 标识符(表达式)标识符(表达式) 注意:注意:表达式的数值必须在数组元素下标号范表达式的数值必须在数组

53、元素下标号范围以内,并且必须是可计算的。围以内,并且必须是可计算的。 例如:例如:a a(2 2),),b b(n n) 45 3.3. 标识符标识符 (4 4)段名)段名 多个下标名的组合,用于指示数组型变量或信多个下标名的组合,用于指示数组型变量或信号的某一段元素。号的某一段元素。 格式:格式: 标识符(表达式标识符(表达式 方向方向 表达式)表达式) 标识符:标识符:数组类型信号或变量数组类型信号或变量 方向:方向:TOTO数组下标序号由低到高数组下标序号由低到高 DOWNTODOWNTO数组下标序号由高到低数组下标序号由高到低 例如:例如:D D(7 DOWNTO 07 DOWNTO

54、0););表示数据总线表示数据总线D7D7D0D0 D D(0 TO 7 0 TO 7 );); 表示数据总线表示数据总线D0D0D7D7 D D(4 TO 64 TO 6);); 表示数据总线表示数据总线D4D4D6D646 3.3. 标识符标识符 (5 5)保留字)保留字 保留字又称关键字,是具有特殊含义的标识符,保留字又称关键字,是具有特殊含义的标识符,只能作为固定的用途,不能直接作为标识符(扩展只能作为固定的用途,不能直接作为标识符(扩展标识符除外)。标识符除外)。 47 3.3. 标识符标识符 (5 5)保留字)保留字48 4.4. 注释注释 VHDLVHDL语言与其他程序设计语言一

55、样,为了便于语言与其他程序设计语言一样,为了便于理解和阅读,常在编写的程序中加上注释。理解和阅读,常在编写的程序中加上注释。 VHDL VHDL语言的注释符用双减号语言的注释符用双减号“-”-”表示。表示。 注释语句以注释符引导,到行尾结束。注释语句以注释符引导,到行尾结束。 注释可以加在程序语句结束符注释可以加在程序语句结束符“;”之后,也之后,也可以加在空行处。可以加在空行处。 49 VHDLVHDL语言中的各种表达式都是由操作符和操作语言中的各种表达式都是由操作符和操作数组成的,操作数是表达式中各种运算的对象,而数组成的,操作数是表达式中各种运算的对象,而操作符(又称操作符)则规定操作数

56、的运算方式。操作符(又称操作符)则规定操作数的运算方式。 VHDLVHDL语言预定义了五种操作符:语言预定义了五种操作符: 逻辑操作符逻辑操作符 算术操作符算术操作符 关系操作符关系操作符 符号操作符符号操作符 移位操作符移位操作符 4.3 VHDL语言的操作符语言的操作符 50 1 1. . 逻辑操作符逻辑操作符 用于完成逻辑运算,包括用于完成逻辑运算,包括逻辑与、逻辑或、逻逻辑与、逻辑或、逻辑非、逻辑与非、逻辑或非、运算逻辑异或、逻辑辑非、逻辑与非、逻辑或非、运算逻辑异或、逻辑异或非异或非(同或同或)等运算。等运算。类类 型型操作符操作符 功功 能能 操作数数据类型操作数数据类型 逻逻辑辑

57、操操作作符符 ANDAND 逻辑与运算逻辑与运算 BITBIT,BOOLEANBOOLEAN,STD_LOGICSTD_LOGIC OROR 逻辑或运算逻辑或运算 BITBIT,BOOLEANBOOLEAN,STD_LOGICSTD_LOGIC NANDNAND 逻辑与非运算逻辑与非运算 BITBIT,BOOLEANBOOLEAN,STD_LOGICSTD_LOGIC NORNOR 逻辑或非运算逻辑或非运算 BITBIT,BOOLEANBOOLEAN,STD_LOGICSTD_LOGIC XORXOR 逻辑异或运算逻辑异或运算 BITBIT,BOOLEANBOOLEAN,STD_LOGICST

58、D_LOGIC XNORXNOR 逻辑同或运算逻辑同或运算 BITBIT,BOOLEANBOOLEAN,STD_LOGICSTD_LOGIC NOTNOT 逻辑非运算逻辑非运算 BITBIT,BOOLEANBOOLEAN,STD_LOGICSTD_LOGIC 51 1 1. . 逻辑操作符逻辑操作符 逻辑运算的操作数可以是逻辑运算的操作数可以是BITBIT、BOOLEANBOOLEAN和和STD_LOGICSTD_LOGIC数据数据类型,以及一位数组类型,以及一位数组BIT_VECTORBIT_VECTOR和和STD_LOGIC_VECTORSTD_LOGIC_VECTOR类型。类型。 要求运

59、算符两边操作数的数据类型相同、位宽相同。要求运算符两边操作数的数据类型相同、位宽相同。 逻辑运算按位进行操作,运算结果的数据类型与操作数逻辑运算按位进行操作,运算结果的数据类型与操作数的数据类型相同。的数据类型相同。 一个表达式中有两种以上逻辑运算符时,应用括号对这一个表达式中有两种以上逻辑运算符时,应用括号对这些运算进行分组。些运算进行分组。 如果一个表达式中只有如果一个表达式中只有ANDAND、OROR和和XORXOR三种运算符中的一三种运算符中的一种,则改变运算顺序不会影响电路的逻辑关系。种,则改变运算顺序不会影响电路的逻辑关系。 逻辑运算符逻辑运算符NOTNOT处于最高优先级,而其余的

60、逻辑运算符处处于最高优先级,而其余的逻辑运算符处于最低优先级。于最低优先级。 例如:例如:Y1Y1= ( ( A ANDA AND B B ) ) OROR ( ( C C ANDAND D D ) ); Y2 Y2= ( ( A A OROR B B ) ) ANDAND C C;52 2 2. . 算术操作符算术操作符 是完成算术运算的最基本的操作符,包括是完成算术运算的最基本的操作符,包括加法加法运算、减法运算、并置运算、乘法运算、除法运算、运算、减法运算、并置运算、乘法运算、除法运算、取模运算、求余运算、乘方运算和取绝对值等。取模运算、求余运算、乘方运算和取绝对值等。类型类型操作符操作符 功能功能 操作数数据类型操作数数据类型 算算术术操操作作符符 + + 加法运算加法运算 整数整数 - - 减法运算减法运算 整数整数 & 并

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论