第四章VHDL语言程序设计2.ppt

上传人(卖家):hyngb9260 文档编号:5791271 上传时间:2023-05-09 格式:PPT 页数:53 大小:148.50KB
下载 相关 举报
第四章VHDL语言程序设计2.ppt_第1页
第1页 / 共53页
第四章VHDL语言程序设计2.ppt_第2页
第2页 / 共53页
第四章VHDL语言程序设计2.ppt_第3页
第3页 / 共53页
第四章VHDL语言程序设计2.ppt_第4页
第4页 / 共53页
第四章VHDL语言程序设计2.ppt_第5页
第5页 / 共53页
点击查看更多>>
资源描述

1、一、一、VHDLVHDL语言的基本语法语言的基本语法1 1、VHDLVHDL语言的标识符语言的标识符VHDL中的标识符可以是常数、变量、信号、端口、子程序或参中的标识符可以是常数、变量、信号、端口、子程序或参数的名字。使用标识符要遵守如下规则:数的名字。使用标识符要遵守如下规则:标识符由字母(标识符由字母(AZ,az)、)、数字和下划线字符组成数字和下划线字符组成;任何标识符必须以英文字母开头任何标识符必须以英文字母开头;末字符不能为下划线末字符不能为下划线;不允许出现两个连续下划线不允许出现两个连续下划线;标识符中不区分大小写字母标识符中不区分大小写字母;VHDL定义的保留字或称关键字,不能

2、用作标识符定义的保留字或称关键字,不能用作标识符;VHDL中的注释由两个连续的虚线(中的注释由两个连续的虚线(-)开始,直到行尾)开始,直到行尾;例例_Decoder_1-起始为非英文字母起始为非英文字母3DOP-起始为数字起始为数字Large#number-“#”不能成为标识符的构成符号不能成为标识符的构成符号Date_ _bus-不能有双下划线不能有双下划线Copper_-最后字符不能为下划线最后字符不能为下划线on-关键字关键字2 2、VHDLVHDL语言的数字语言的数字2.1 数字型文字的值有多种表达方式,现列举如下:数字型文字的值有多种表达方式,现列举如下:(1)整数文字:整数文字:

3、整数文字都是十进制的数,如:整数文字都是十进制的数,如:5,678,0,156E2(=15600),45_234_287(=45234287)(2)实数文字:实数文字:实数文字也都是十进制的数,但必实数文字也都是十进制的数,但必须带有小数点,如:须带有小数点,如:188.993,88_670_551.453_909(=88670551.453909),1.0,44.99E-2(=0.4499),1.335,0.0数字前可加数字前可加0 0,数字中间不能有空格,数字中间不能有空格2.2 以数制基数表示的文字:以数制基数表示的文字:数制数制#基数基数#指数指数数制和指数部分是用十进制数表示的数。指

4、数部分数制和指数部分是用十进制数表示的数。指数部分的数如果是的数如果是0可以省去不写。现举例如下:可以省去不写。现举例如下:l10#170#-(十进制数表示,等于十进制数表示,等于170)l2#1111_1110#-(二进制数表示,等于二进制数表示,等于254)l16#E#E1 -(十六进制数表示,等于十六进制数表示,等于2#11100000#,等于,等于224)l16#F.01#E+2 -(十六进制数表示,等于十六进制数表示,等于3841.00)l8#377#l -(与(与16#FF#,016#0FF#,2#11111111都为都为255)3 3、字符串型文字、字符串型文字 字符是用字符是用

5、单引号单引号引起来的引起来的ASCII字符,可字符,可以是数值,也可以是符号或字母,如:以是数值,也可以是符号或字母,如:R,A,*,Z。而字符串则是一维的字符数组,须放在而字符串则是一维的字符数组,须放在双双引号引号中。中。VHDL中有两种类型的字符串:文字中有两种类型的字符串:文字字符串和数位字符串。字符串和数位字符串。文字字符串是用双引号引起来的一串文字,文字字符串是用双引号引起来的一串文字,如:如:“ERROR”,“BOTH S AND Q EQUA TO L”,“X”,“BB$CC”进制基数符号进制基数符号“数位字符串数位字符串”(1)文字字符串)文字字符串(2)数位字符串)数位字符

6、串也称数值字符串、位矢量,是预定义的数据也称数值字符串、位矢量,是预定义的数据类型类型BIT的一维数组,它们所代表的是二进制、的一维数组,它们所代表的是二进制、八进制或十六进制的数组,其位矢量的长度八进制或十六进制的数组,其位矢量的长度即为等值的二进制数的位数。即为等值的二进制数的位数。例如:例如:B“1_1101_1110”B“1_1101_1110”-二进制数数组,位矢数组长度是二进制数数组,位矢数组长度是9 9 X“AD0”X“AD0”-十六进制数数组,位矢数组长度是十六进制数数组,位矢数组长度是1212B B:二进制基数符号,表示二进制数位二进制基数符号,表示二进制数位0 0或或1 1

7、。O O:八进制基数符号。八进制基数符号。X X:十六进制基数符号十六进制基数符号(0(0F)F)。4 4、下标名及下标段名、下标名及下标段名 下标名下标名用于指示数组型变量或信号的某一用于指示数组型变量或信号的某一元素,如:元素,如:a(2),b(n)下标段名下标段名则用于指示数组型变量或信号的则用于指示数组型变量或信号的某一段元素,其语句格式如下:某一段元素,其语句格式如下:数组类型信号名或变量名数组类型信号名或变量名(表达式表达式1 TO/DOWNTO 表达式表达式2);SIGNAL A,B,C:BIT_VECTOR(0 TO 7);SIGNAL M:INTEGER RANGE 0 TO

8、 3;SIGNAL Y,Z:BIT;Y=A(M);-M是不可计算型下标表示是不可计算型下标表示Z=B(3);-3是可计算型下标表示是可计算型下标表示C(0 TO 3)=A(4 TO 7);-以段的方式进行赋值以段的方式进行赋值C(4 TO 7)=A(0 TO 3);-以段的方式进行赋值以段的方式进行赋值如下是下标名及下标段名使用示例:如下是下标名及下标段名使用示例:1 1、常数(、常数(ConstantConstant)常数是一个固定的值,主要是为了使设计实体中的常数更容常数是一个固定的值,主要是为了使设计实体中的常数更容易阅读和修改。常数一旦被赋值就不能再改变。一般格式:易阅读和修改。常数一

9、旦被赋值就不能再改变。一般格式:CONSTANT 常数名:数据类型:常数名:数据类型:=表达式;表达式;例例:CONSTANT fbus:BIT_VECTOR:=“01011001”;-总线上数总线上数据设备向量据设备向量CONSTANT dely:TIME:=25 ns;-输入输入/输出的延迟时间输出的延迟时间 常数所赋的值应与定义的数据类型一致。常数所赋的值应与定义的数据类型一致。二、二、VHDLVHDL语言的数据对象语言的数据对象常量的使用范围取决于它被定义的位置常量的使用范围取决于它被定义的位置:(1)程序包中定义的常量具有最大的全局化特性,可以用在调程序包中定义的常量具有最大的全局化

10、特性,可以用在调用此程序包的所有设计实体中;用此程序包的所有设计实体中;(2)设计实体中定义的常量,其有效范围为这个实体定义的所设计实体中定义的常量,其有效范围为这个实体定义的所有的结构体;有的结构体;(3)设计实体中某一结构体中定义的常量只能用于此结构体;设计实体中某一结构体中定义的常量只能用于此结构体;(4)结构体中某一单元定义的常量,如一个进程中,这个常量结构体中某一单元定义的常量,如一个进程中,这个常量只能用在这一进程中。只能用在这一进程中。2 2、变量、变量(Variable)Variable)变量是一个局部变量,它只能在进程语句、函数语句和过程变量是一个局部变量,它只能在进程语句、

11、函数语句和过程语句结构中使用,用作局部数据存储。变量常用在实现某种算语句结构中使用,用作局部数据存储。变量常用在实现某种算法的赋值语句中。法的赋值语句中。VARIABLE 变量名:数据类型变量名:数据类型 约束条件:约束条件:=表达式;表达式;例例:VARIABLE x,y:INTEGER;-定义定义x,y为整数变量为整数变量VARIABLE count:INTEGER RANGE 0 TO 255:=10;-定义计数变量范围定义计数变量范围一般格式:一般格式:变量赋值语句的语法格式如下:变量赋值语句的语法格式如下:目标变量:目标变量:=表达式;表达式;(1)赋值语句右方的表达式必须是一个与目

12、标变量有相同赋值语句右方的表达式必须是一个与目标变量有相同数据类型的数值。数据类型的数值。(4)若将变量用于进程之外,必须将该值赋给一个相同的若将变量用于进程之外,必须将该值赋给一个相同的类型的信号,即进程之间传递数据靠的是信号。类型的信号,即进程之间传递数据靠的是信号。(2)变量不能用于硬件连线和存储元件。变量不能用于硬件连线和存储元件。(3)变量的适用范围仅限于定义了变量的进程或子程序中。变量的适用范围仅限于定义了变量的进程或子程序中。例例VARIABLE x,y:REAL;VARIABLE a,b:BIT_VECTOR(0 TO 7);x:=100.0;-实数赋值,实数赋值,x是实数变量

13、是实数变量y:=1.5+x;-运算表达式赋值,运算表达式赋值,y也是实数变量也是实数变量a:=b;a:=”1010101”;-位矢量赋值,位矢量赋值,a的数据类型是位矢量的数据类型是位矢量a(3 TO 6):=(1,1,0,1);-段赋值段赋值a(0 TO 5):=b(2 TO 7);a(7):=0;-位赋值位赋值3 3、信号(、信号(SignalSignal)信号是描述硬件系统的基本数据对象,它类似于连接线。它信号是描述硬件系统的基本数据对象,它类似于连接线。它除了没有数据流动方向说明以外,其他性质与实体的端口(除了没有数据流动方向说明以外,其他性质与实体的端口(Port)概念一致。概念一致

14、。信号说明格式为:信号说明格式为:SIGNAL 信号名:数据类型信号名:数据类型 约束条件:约束条件:=初始值;初始值;信号初始值的设置不是必需的,而且初始值仅在信号初始值的设置不是必需的,而且初始值仅在VHDL的行的行为仿真中有效。为仿真中有效。例例:SIGNAL temp:STD_LOGIC:=0;SIGNAL flaga,flagb:BIT;SIGNAL date:STD_LOGIC_VECTOR(15 DOWNTO 0);信号的使用和定义范围是实体、结构体和程序包信号的使用和定义范围是实体、结构体和程序包.在程序中在程序中:(1)信号值的代入采用信号值的代入采用“=”代入符,而且信号代

15、入符,而且信号代入时可以附加延时。代入时可以附加延时。(2)变量赋值时用变量赋值时用“:=”,不可附加延时。,不可附加延时。(3)信号的初始赋值符号仍是信号的初始赋值符号仍是“:=”。例:例:X=Y AFTER 10 ns;-X,Y都是信号,且都是信号,且Y的值经过的值经过10ns延延时以后才被代入时以后才被代入X。信号是一个全局量,它可以用来进行进程之间的通信。信号是一个全局量,它可以用来进行进程之间的通信。例例 进程进程1:PROCESS(A,B,C,D)BEGIN D=A;X=B+D;D=C;Y=B+D;END PROCESS;D中最初代入的值是中最初代入的值是A,接接着又代入着又代入C

16、值。尽管值。尽管D中先代中先代入入A值,后代入值,后代入C值,在时间值,在时间上有一个的延时,但是,在上有一个的延时,但是,在代入时由于不进行处理,因此代入时由于不进行处理,因此仿真时认为是时间仿真时认为是时间0值延时。值延时。所以所以D的最终值应为的最终值应为C,这样这样执行的结果:执行的结果:X,Y的内容都的内容都为为B+C。进程进程2:PROCESS(A,B,C)VARIABLE D:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN D:=A;X=B+D;D:=C;Y=B+D;END PROCESS;在执行在执行“D:=A;”语句后,语句后,A的值就被的值就被赋给赋给

17、D,所以所以X为为B+A。此后又执行此后又执行“D:=C;”,从而使从而使Y为为B+C。由此可看出,信由此可看出,信号的值将进程语句最后所代入的值作为最终号的值将进程语句最后所代入的值作为最终代入值。而变量的值一经赋值就变成新的值。代入值。而变量的值一经赋值就变成新的值。在仿真过程中,信号到了规定的仿真时间才进行赋值,变量在仿真过程中,信号到了规定的仿真时间才进行赋值,变量的赋值是立即生效的。的赋值是立即生效的。(2)赋值符不同)赋值符不同信号信号 signal count:std_logic_vector(7 downto 0);变量变量 variable tema:std_logic_ve

18、ctor(3 downto 0);信号在结构体中声明;变量在进程中声明信号在结构体中声明;变量在进程中声明(1)声明的形式与位置不同)声明的形式与位置不同count=“00000000”,count=“ZZZZZZZZ”count=tema;tema:=0000;(3)赋值生效的时间不同)赋值生效的时间不同信号:进程结束时信号:进程结束时变量:立即生效变量:立即生效(4)进程对信号敏感,对变量不敏感)进程对信号敏感,对变量不敏感(5)作用域不同)作用域不同信号可以是多个进程的全局信号,信号可以是多个进程的全局信号,变量只在定义后的顺序域可见变量只在定义后的顺序域可见三、三、VHDLVHDL语言

19、的数据类型语言的数据类型标量型标量型(Scalar Type)复合类型复合类型(Composite Type)Composite Type)存取类型存取类型(Access Type)文件类型文件类型(Files Type)lVHDL中的数据类型可以分成四大类。中的数据类型可以分成四大类。标量型标量型(SCALAR TYPE):属单元素的最基本的数据属单元素的最基本的数据类型,通常用于描述一个单值数据对象,它包括实类型,通常用于描述一个单值数据对象,它包括实数类型、整数类型、枚举类型和时间类型。数类型、整数类型、枚举类型和时间类型。复合类型复合类型(COMPOSITE TYPE):可以由细小的数

20、据可以由细小的数据类型复合而成,如可由标量复合而成。复合类型主类型复合而成,如可由标量复合而成。复合类型主要有数组型要有数组型(ARRAY)和记录型和记录型(RECORD)。存取类型存取类型(ACCESS TYPE):为给定的数据类型的数为给定的数据类型的数据对象提供存取方式。据对象提供存取方式。文件类型文件类型(FILES TYPE):用于提供多值存取类型。用于提供多值存取类型。1 1VHDLVHDL的预定义数据类型的预定义数据类型 VHDL的预定义数据类型都是在的预定义数据类型都是在VHDL标准程序标准程序包包STANDARD中定义的,在实际使用中,已自动包中定义的,在实际使用中,已自动包

21、含进含进VHDL的源文件中,因而不必通过的源文件中,因而不必通过USE语句以显语句以显式调用。式调用。1).1).布尔布尔(BOOLEAN)BOOLEAN)数据类型数据类型2).2).位位(BIT)BIT)数据类型数据类型3).3).位矢量位矢量(BIT_VECTOR)BIT_VECTOR)数据类型数据类型4).4).字符字符(CHARACTER)CHARACTER)数据类型数据类型5).5).整数整数(INTEGER)INTEGER)数据类型数据类型6).6).实数实数(REAL)REAL)数据类型数据类型7).7).字符串字符串(STRING)STRING)数据类型数据类型8).8).时间

22、时间(TIME)TIME)数据类型数据类型9).9).错误等级错误等级(SEVERITY_LEVEL)SEVERITY_LEVEL)1)布尔布尔(BOOLEAN)数据类型数据类型 程序包程序包STANDARD中定义布尔数据类型中定义布尔数据类型的源代码如下:的源代码如下:TYPE BOOLEAN IS(FALSE,TRUE);布尔数据类型实际上是一个二值枚举型布尔数据类型实际上是一个二值枚举型数据类型,它的取值有数据类型,它的取值有FALSE和和TRUE两种。两种。位数据类型也属于枚举型,取值只能是位数据类型也属于枚举型,取值只能是1或或0。位数据类型的数据对象,如变量、。位数据类型的数据对象

23、,如变量、信号等,可以参与逻辑运算,运算结果仍信号等,可以参与逻辑运算,运算结果仍是位的数据类型。是位的数据类型。VHDL综合器用一个二综合器用一个二进制位表示进制位表示BIT。在程序包在程序包STANDARD中中定义的源代码是:定义的源代码是:TYPE BIT IS(0,1);2)位位(BIT)数据类型数据类型 位矢量只是基于位矢量只是基于BIT数据类型的数组,数据类型的数组,在程序包在程序包STANDARD中定义的源代码是:中定义的源代码是:TYPE BIT _VECTOR IS ARRAY(NATURAL RANGE)OF BIT;3)位矢量位矢量(BIT_VECTOR)数据类型数据类型

24、4)字符字符(CHARACTER)数据类型数据类型 字符类型通常用单引号引起来,如字符类型通常用单引号引起来,如A。字符类型区分大小写,如字符类型区分大小写,如B不同于不同于b。字符类型已在字符类型已在STANDARD程序包中作程序包中作了定义。了定义。整数类型的数代表正整数、负整数和零。整数类型的数代表正整数、负整数和零。5)整数整数(INTEGER)数据类型数据类型l常用整数常量的书写方式示例如下:常用整数常量的书写方式示例如下:l2 -十进制整数十进制整数l10E4 -十进制整数十进制整数l16#D2#-十六进制整数十六进制整数l2#11011010#-二进制整数二进制整数 自然数和正整

25、数是整数的一个子类型。自然数和正整数是整数的一个子类型。在在STANDARD程序包中定义的源代码如下:程序包中定义的源代码如下:SUBTYPE NATURAL IS INTEGER RANGE 0 TO INTEGER HIGH;SUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGER HIGH;自然数自然数(NATURAL)和正整数和正整数(POSITIVE)数据类型数据类型l实数常量的书写方式举例如下:实数常量的书写方式举例如下:l65971.333333 -十进制浮点数十进制浮点数l8#43.6#E+4 -八进制浮点数八进制浮点数l43.6E-4 -十

26、进制浮点数十进制浮点数6)实数实数(REAL)数据类型数据类型 VHDL的实数类型类似于数学上的实数,或称浮的实数类型类似于数学上的实数,或称浮点数。实数的取值范围为点数。实数的取值范围为-1.0E38+1.0E38。通常情通常情况下,实数类型仅能在况下,实数类型仅能在VHDL仿真器中使用,仿真器中使用,VHDL综合器不支持实数,因为实数类型的实现相当复杂,综合器不支持实数,因为实数类型的实现相当复杂,目前在电路规模上难以承受。目前在电路规模上难以承受。字符串数据类型是字符数据类型的一字符串数据类型是字符数据类型的一个非约束型数组,或称为字符串数组。字个非约束型数组,或称为字符串数组。字符串必

27、须用双引号标明。如:符串必须用双引号标明。如:7)字符串字符串(STRING)数据类型数据类型VARIABLE string_var:STRING(1 TO 7);string_var:=a b c d;VHDL中唯一的预定义物理类型是时间。完整中唯一的预定义物理类型是时间。完整的时间类型包括整数和物理量单位两部分,整数的时间类型包括整数和物理量单位两部分,整数和单位之间至少留一个空格,如和单位之间至少留一个空格,如55 ms,20 ns。8)时间时间(TIME)数据类型数据类型TYPE time IS RANGE 2147483647 TO 2147483647 units fs;-飞秒,飞

28、秒,VHDL中的最小时间单位中的最小时间单位 ps=1000 fs;-皮秒皮秒 ns=1000 ps;-纳秒纳秒 us=1000 ns;-微秒微秒 ms=1000 us;-毫秒毫秒 sec=1000 ms;-秒秒 min=60 sec;-分分 hr=60 min;-时时end units;STANDARD 程序包中定义时间如下:程序包中定义时间如下:在在VHDL仿真器中,错误等级用来指示设计仿真器中,错误等级用来指示设计系统的工作状态,共有四种可能的状态值:系统的工作状态,共有四种可能的状态值:NOTE(注意注意)、WARNING(警告警告)、ERROR(出错出错)、FAILURE(失败失败)

29、。在仿真过程中,可输出这四种值来提示被仿在仿真过程中,可输出这四种值来提示被仿真系统当前的工作情况。真系统当前的工作情况。STANDARD 程序包中程序包中定义如下:定义如下:TYPE SEVERITY_LEVEL IS(NOTE,WARNING,ERROR,FAILURE);9)错误等级错误等级(SEVERITY_LEVEL)在在IEEE库的程序包库的程序包STD_LOGIC_1164中,定中,定义了两个非常重要的数据类型,即义了两个非常重要的数据类型,即:标准逻辑位标准逻辑位STD_LOGIC 标准逻辑矢量标准逻辑矢量STD_LOGIC_VECTOR1)标准逻辑位标准逻辑位STD_LOGI

30、C数据类型数据类型2.2.IEEEIEEE预定义标准逻辑位与矢量预定义标准逻辑位与矢量TYPE STD_LOGIC IS(U,X,0,1,Z,W,L,H,-);在在IEEE库程序包库程序包STD_LOGIC_1164中的数据类中的数据类型型STD_LOGIC的定义如下所示:的定义如下所示:“U”未初始化未初始化 “X”强不定强不定“0”0 “1”1“Z”高阻高阻 “W”弱信号不弱信号不定定“L”弱信号弱信号0 “H”弱信号弱信号1“_”忽略忽略(或不可能情况或不可能情况)注意在使用该类型数据时,在程序中必须写出库说注意在使用该类型数据时,在程序中必须写出库说明语句和使用包集合的说明语句。明语句

31、和使用包集合的说明语句。lLIBRARY IEEE;lUSE IEEE.STD_LOGIC_1164.ALL;STD_LOGIC_VECTOR类型定义如下:类型定义如下:TYPE STD_LOGIC_VECTOR IS ARRAY(NATURAL RANGE)OF STD_LOGIC;2)标准逻辑矢量标准逻辑矢量(STD_LOGIC_VECTOR)VHDL综合工具配带的扩展程序包中,定义了综合工具配带的扩展程序包中,定义了一些有用的类型。如一些有用的类型。如Synopsys公司在公司在IEEE库中加库中加入的程序包入的程序包STD_LOGIC_ARITH中定义了如下的中定义了如下的数据类型:数

32、据类型:无符号型无符号型(UNSIGNED)有符号型有符号型(SIGNED)小整型小整型(SMALL_INT)3.3.其他预定义标准数据类型其他预定义标准数据类型TYPE UNSIGNED IS ARRAY(NATURAL RANGE)OF STD_LOGIC;TYPE SIGNED IS ARRAY(NATURAL RANGE)OF STD_LOGIC;SUBTYPE SMALL_INT IS INTEGER RANGE 0 TO 1;如果将信号或变量定义为这几个数据类型,就可如果将信号或变量定义为这几个数据类型,就可以使用本程序包中定义的运算符。在使用之前,请以使用本程序包中定义的运算符。

33、在使用之前,请注意必须加入下面的语句:注意必须加入下面的语句:在程序包在程序包STD_LOGIC_ARITH中的类型定义如下:中的类型定义如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_ARITH.ALL;1)无符号数据类型无符号数据类型(UNSIGNED TYPE)UNSIGNED数据类型代表一个无符号的数据类型代表一个无符号的数值,在综合器中,这个数值被解释为一个二数值,在综合器中,这个数值被解释为一个二进制数,这个二进制数的最左位是其最高位。进制数,这个二进制数的最左位是其最高位。2)有符号数据类型有符号数据类型(SIGNED TYPE)SIGNED数据类型表示一个

34、有符号的数值,数据类型表示一个有符号的数值,综合器将其解释为补码,此数的最高位是符号综合器将其解释为补码,此数的最高位是符号位,例如:位,例如:SIGNED(“0101”)代表代表+5,5;SIGNED(“1101”)代表代表-5。VHDL允许用户自行定义新的数据类型,允许用户自行定义新的数据类型,它们可以有多种,如它们可以有多种,如:4.4.用户自定义数据类型方式用户自定义数据类型方式可由用户定义的数据类型常见的有可由用户定义的数据类型常见的有8种:种:枚举(枚举(Enumerated)类型;类型;整数(整数(Integer)类型类型 实数(实数(Real),),浮点数(浮点数(Floati

35、ng)类型;类型;数组(数组(Array)类型;类型;存取(存取(Access)类型;类型;文件(文件(File)类型;类型;记录(记录(Recode)类型;类型;时间(时间(Time)类型。类型。语法结构如下:语法结构如下:1)TYPE语句用法语句用法TYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义 OF 基本数据类型基本数据类型;TYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义 OF 基本数据类型基本数据类型 约束范围约束范围;TYPE current IS REAL RANGE -1E4 TO 1E4;TYPE digit IS INTEGER;TYPE di

36、git1 IS INTEGER RANGE 0 TO 9;例如:例如:数据类型如果没有被指定,则默认为整数类型。数据类型如果没有被指定,则默认为整数类型。子类型子类型SUBTYPE只是由只是由TYPE所定义所定义的原数据类型的一个子集。的原数据类型的一个子集。子类型子类型SUBTYPE的语句格式如下:的语句格式如下:2)SUBTYPE语句用法语句用法SUBTYPE 子类型名子类型名 IS 基本数据类型基本数据类型 RANGE 约束范围;约束范围;SUBTYPE N1 IS INTEGER RANGE 10 TO 100;例如:例如:VHDL中的枚举数据类型是用文字符号中的枚举数据类型是用文字符

37、号来表示一组实际的二进制数的类型来表示一组实际的二进制数的类型(若直接若直接用数值来定义,则必须使用单引号用数值来定义,则必须使用单引号)。【例】【例】TYPE M_STATE IS(STATE1,STATE2,STATE3,STATE4,STATE5);3)枚举类型4)数组类型数组类型 数组类型属复合类型,它是将一组具有相数组类型属复合类型,它是将一组具有相同数据类型的元素集合在一起,作为一个数同数据类型的元素集合在一起,作为一个数据对象来处理的数据类型。数组可以是一维据对象来处理的数据类型。数组可以是一维(每个元素只有一个下标每个元素只有一个下标)数组或多维数组数组或多维数组(每每个元素有

38、多个下标个元素有多个下标)。VHDL仿真器支持多维仿真器支持多维数组,但数组,但VHDL综合器只支持一维数组。综合器只支持一维数组。数组的元素可以是任何一种数据类型,用数组的元素可以是任何一种数据类型,用以定义数组元素的下标范围子句决定了数组以定义数组元素的下标范围子句决定了数组中元素的个数以及元素的排序方向,即下标中元素的个数以及元素的排序方向,即下标数是由低到高,或是由高到低。数是由低到高,或是由高到低。限定性数组限定性数组定义语句格式如下:定义语句格式如下:TYPE 数组名数组名 IS ARRAY(数组范围数组范围)OF 数据类型;数据类型;【例】【例】TYPE STB IS ARRAY

39、(7 DOWNTO 0)OF STD_LOGIC;【例】【例】TYPE X IS(LOW,HIGH);TYPE DATA_BUS IS ARRAY(0 TO 7,X)OF BIT;首先定义首先定义X为两元素的枚举数据类型,然后将为两元素的枚举数据类型,然后将DATA_BUS定义为一个数组类型,其中每一元素的数据类型是定义为一个数组类型,其中每一元素的数据类型是BIT。非限制性数组非限制性数组的定义语句格式如下:的定义语句格式如下:TYPE 数组名数组名 IS ARRAY(数组下标名数组下标名 RANGE)OF 数据类型;数据类型;其中,数组名是定义的非限制性数组其中,数组名是定义的非限制性数组

40、类型的取名;数组下标名是以整数类型设类型的取名;数组下标名是以整数类型设定的一个数组下标名称;符号定的一个数组下标名称;符号“”是下是下标范围待定符号,用到该数组类型时,再标范围待定符号,用到该数组类型时,再填入具体的数值范围;数据类型是数组中填入具体的数值范围;数据类型是数组中每一元素的数据类型。每一元素的数据类型。【例】【例】TYPE BIT_VECTOR IS ARRAY(NATURAL RANE)OF BIT;VARIABLE VA:BIT_VECTOR(1 TO 6);-将数组取值范围定在将数组取值范围定在16【例】【例】TYPE LOGIC_VECTOR IS ARRAY(NATU

41、RAL RANGE,POSITIVE RANGE)OF LOGIC;VARIABLE L16_OBJECT:LOGIC_VECTOR(0 TO 7,1 TO 2);-限定范围限定范围 由已定义的、数据类型不同的对象元素由已定义的、数据类型不同的对象元素构成的数组称为记录类型的对象。定义记录构成的数组称为记录类型的对象。定义记录类型的语句格式如下:类型的语句格式如下:TYPE 记录类型名记录类型名 IS RECORD 元素名元素名 :元素数据类型;元素数据类型;元素名元素名 :元素数据类型;元素数据类型;END RECORD 记录类型名记录类型名;5)记录类型记录类型【例】【例】TYPE REC

42、DATA IS RECORD element1 TIME;element2 TIME;element3 STD_LOGIC;END RECORD RECDATA;【例】【例】利用记录类型定义的一个微处理器命令信息表。利用记录类型定义的一个微处理器命令信息表。TYPE REGNAME IS(AX,BX,CX,DX);TYPE OPERATION IS RECORD OPSTRSTRING(1 TO 10);OPCODEBIT_VECTOR(3 DOWNTO 0);OP1,OP2,RES:REGNAME;END RECORD OPERATION;由于由于VHDL是一种强类型语言,这就意味着即是一种

43、强类型语言,这就意味着即使对于非常接近的数据类型的数据对象,在相互使对于非常接近的数据类型的数据对象,在相互操作时,也需要进行数据类型转换。操作时,也需要进行数据类型转换。a)类型转换函数方式类型转换函数方式 类型转换函数的作用就是将一种属于某种数类型转换函数的作用就是将一种属于某种数据类型的数据对象转换成属于另一种数据类型的据类型的数据对象转换成属于另一种数据类型的数据对象。数据对象。6)数据类型转换数据类型转换 DATAIO库中的程序包库中的程序包STD_LOGIC_OPS中的中的两个数据类型转换函数:两个数据类型转换函数:TO_VECTOR 将将INTEGER 转换成转换成STD_LOG

44、IC_VECTORTO_INTEGER 将将STD_LOGIC_VECTOR转转换成换成INTEGERb)直接类型转换方式直接类型转换方式 直接类型转换的一般语句格式是:直接类型转换的一般语句格式是:数据类型标识符数据类型标识符(表达式表达式);一般情况下,直接类型转换仅限于非常关一般情况下,直接类型转换仅限于非常关联联(数据类型相互间的关联性非常大数据类型相互间的关联性非常大)的数据的数据类型之间,必须遵循以下规则:类型之间,必须遵循以下规则:(1)所有的抽象数字类型是非常关联的所有的抽象数字类型是非常关联的类型类型(如整型、浮点型如整型、浮点型),如果浮点数转换为,如果浮点数转换为整数,则

45、转换结果是最接近的一个整型数。整数,则转换结果是最接近的一个整型数。(2)如果两个数组有相同的维数,且两如果两个数组有相同的维数,且两个数组的元素是同一类型,并且在各处的下个数组的元素是同一类型,并且在各处的下标范围内索引是同一类型或非常接近的类型,标范围内索引是同一类型或非常接近的类型,那么这两个数组是非常关联类型。那么这两个数组是非常关联类型。(3)枚举型不能被转换。枚举型不能被转换。如果类型标识符所指的是非限定数组,如果类型标识符所指的是非限定数组,则结果会将被转换的数组的下标范围去掉,则结果会将被转换的数组的下标范围去掉,即成为非限定数组。即成为非限定数组。【例】【例】VARIABLE

46、 DATAC,PARAMC:INTEGER;DATAC:=INTEGER(74.94*REAL(PARAMC);在类型与其子类型之间无需类型转换。在类型与其子类型之间无需类型转换。即使两个数组的下标索引方向不同,这两即使两个数组的下标索引方向不同,这两个数组仍有可能是非常关联类型的。个数组仍有可能是非常关联类型的。整数和实数的数据类型在标准的程序包中已作整数和实数的数据类型在标准的程序包中已作了定义,但在实际应用中,特别在综合中,由于这两了定义,但在实际应用中,特别在综合中,由于这两种非枚举型的数据类型的取值定义范围太大,综合器种非枚举型的数据类型的取值定义范围太大,综合器无法进行综合。无法进行综合。实际应用中,实际应用中,VHDL仿真器通常将整数或实数类仿真器通常将整数或实数类型作为有符号数处理,型作为有符号数处理,VHDL综合器对整数或实数的综合器对整数或实数的编码方法是:编码方法是:对用户已定义的数据类型和子类型中的负数,编对用户已定义的数据类型和子类型中的负数,编码为二进制补码;码为二进制补码;对用户已定义的数据类型和子类型中的正数,编对用户已定义的数据类型和子类型中的正数,编码为二进制原码。码为二进制原码。整数和实数说明整数和实数说明

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第四章VHDL语言程序设计2.ppt)为本站会员(hyngb9260)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|