VHDL语言的基本语法_第1页
VHDL语言的基本语法_第2页
VHDL语言的基本语法_第3页
VHDL语言的基本语法_第4页
VHDL语言的基本语法_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

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

2、母; VHDL定义的保留字或称关键字,不能用作标识符定义的保留字或称关键字,不能用作标识符; VHDL中的注释由两个连续的虚线(中的注释由两个连续的虚线(-)开始,直到行尾)开始,直到行尾; VHDL语言的基本语法 例例 _Decoder_1 -起始为非英文字母起始为非英文字母 3DOP -起始为数字起始为数字 Large # number-“#”不能成为标识符的构成符号不能成为标识符的构成符号 Date_ _bus -不能有双下划线不能有双下划线 Copper_-最后字符不能为下划线最后字符不能为下划线 on-关键字关键字 VHDL语言的基本语法 2 2、VHDLVHDL语言的数字语言的数字

3、 2.1 数字型文字的值有多种表达方式,现列举如下:数字型文字的值有多种表达方式,现列举如下: (1) 整数文字:整数文字都是十进制的数,如:整数文字:整数文字都是十进制的数,如: 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,数字中间不能有

4、空格,数字中间不能有空格 VHDL语言的基本语法 2.2 以数制基数表示的文字:以数制基数表示的文字: 数制数制# #基数基数# #指数指数 数制和指数部分是用十进制数表示的数。指数部分数制和指数部分是用十进制数表示的数。指数部分 的数如果是的数如果是0可以省去不写。现举例如下:可以省去不写。现举例如下: l10#170# -(十进制数表示,等于十进制数表示,等于170) l2#1111_1110# -(二进制数表示,等于二进制数表示,等于254) l16#E#E1 -(十六进制数表示,等于十六进制数表示,等于2#11100000#,等于,等于224) l16#F.01#E+2 -(十六进制数

5、表示,等于十六进制数表示,等于3841.00) l8#377# l -(与(与16#FF#,016#0FF#,2#11111111都为都为255) VHDL语言的基本语法 3 3、字符串型文字、字符串型文字 字符是用字符是用单引号单引号引起来的引起来的ASCII字符,可字符,可 以是数值,也可以是符号或字母,如:以是数值,也可以是符号或字母,如:R, A,*,Z。 而字符串则是一维的字符数组,须放在而字符串则是一维的字符数组,须放在双双 引号引号中。中。VHDL中有两种类型的字符串:文字中有两种类型的字符串:文字 字符串和数位字符串。字符串和数位字符串。 VHDL语言的基本语法 文字字符串是用

6、双引号引起来的一串文字,文字字符串是用双引号引起来的一串文字, 如:如: “ERROR”,“BOTH S AND Q EQUA TO L”,“X”,“BB$CC” 进制基数符号进制基数符号“数位字符串数位字符串” (1)文字字符串)文字字符串 (2)数位字符串)数位字符串 也称数值字符串、位矢量,是预定义的数据也称数值字符串、位矢量,是预定义的数据 类型类型BIT的一维数组,它们所代表的是二进制、的一维数组,它们所代表的是二进制、 八进制或十六进制的数组,其位矢量的长度八进制或十六进制的数组,其位矢量的长度 即为等值的二进制数的位数。即为等值的二进制数的位数。 VHDL语言的基本语法 例如:例

7、如:B“1_1101_1110” B“1_1101_1110” - -二进制数数组,位矢数组长度是二进制数数组,位矢数组长度是9 9 X“AD0” X“AD0” - -十六进制数数组,位矢数组长度是十六进制数数组,位矢数组长度是1212 B B:二进制基数符号,表示二进制数位二进制基数符号,表示二进制数位0 0或或1 1。 O O:八进制基数符号。八进制基数符号。 X X:十六进制基数符号十六进制基数符号(0(0F) F) 。 VHDL语言的基本语法 4 4、下标名及下标段名、下标名及下标段名 下标名下标名用于指示数组型变量或信号的某一用于指示数组型变量或信号的某一 元素,如:元素,如:a(2

8、) , b(n) 下标段名下标段名则用于指示数组型变量或信号的则用于指示数组型变量或信号的 某一段元素,其语句格式如下:某一段元素,其语句格式如下: 数组类型信号名或变量名数组类型信号名或变量名(表达式表达式1 TO/DOWNTO 表达式表达式2); VHDL语言的基本语法 SIGNAL A,B,C:BIT_VECTOR(0 TO 7); SIGNAL M:INTEGER RANGE 0 TO 3; SIGNAL Y,Z :BIT; Y=A(M); -M是不可计算型下标表示是不可计算型下标表示 Z=B(3); -3是可计算型下标表示是可计算型下标表示 C (0 TO 3)=A (4 TO 7)

9、; -以段的方式进行赋值以段的方式进行赋值 C (4 TO 7)=A (0 TO 3); -以段的方式进行赋值以段的方式进行赋值 如下是下标名及下标段名使用示例:如下是下标名及下标段名使用示例: VHDL语言的基本语法 1 1、常数(、常数(ConstantConstant) 常数是一个固定的值,主要是为了使设计实体中的常数更容常数是一个固定的值,主要是为了使设计实体中的常数更容 易阅读和修改。常数一旦被赋值就不能再改变。一般格式:易阅读和修改。常数一旦被赋值就不能再改变。一般格式: CONSTANT 常数名:数据类型:常数名:数据类型:= 表达式;表达式; 例例 : CONSTANT fbu

10、s: BIT_VECTOR: = “01011001”; -总线上数总线上数 据设备向量据设备向量 CONSTANT dely: TIME: =25 ns; -输入输入/输出的延迟时间输出的延迟时间 常数所赋的值应与定义的数据类型一致。常数所赋的值应与定义的数据类型一致。 二、二、VHDLVHDL语言的数据对象语言的数据对象 VHDL语言的基本语法 常量的使用范围取决于它被定义的位置常量的使用范围取决于它被定义的位置: (1)程序包中定义的常量具有最大的全局化特性,可以用在调程序包中定义的常量具有最大的全局化特性,可以用在调 用此程序包的所有设计实体中;用此程序包的所有设计实体中; (2)设计

11、实体中定义的常量,其有效范围为这个实体定义的所设计实体中定义的常量,其有效范围为这个实体定义的所 有的结构体;有的结构体; (3)设计实体中某一结构体中定义的常量只能用于此结构体;设计实体中某一结构体中定义的常量只能用于此结构体; (4)结构体中某一单元定义的常量,如一个进程中,这个常量结构体中某一单元定义的常量,如一个进程中,这个常量 只能用在这一进程中。只能用在这一进程中。 VHDL语言的基本语法 2 2、变量、变量( ( Variable )Variable ) 变量是一个局部变量,它只能在进程语句、函数语句和过程变量是一个局部变量,它只能在进程语句、函数语句和过程 语句结构中使用,用作

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

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

14、TOR(0 TO 7); x:=100.0; -实数赋值,实数赋值,x是实数变量是实数变量 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; -位赋值位赋值 VHDL语言的基本语法 3 3、信号(、信号(SignalSignal) 信号是描述硬件系统的基本数据对象,它类似于连接线。它信号是描述硬件系统的基本数据对象,它类似于连接线。它 除

15、了没有数据流动方向说明以外,其他性质与实体的端口(除了没有数据流动方向说明以外,其他性质与实体的端口(Port) 概念一致。概念一致。 信号说明格式为:信号说明格式为: SIGNAL 信号名:数据类型信号名:数据类型 约束条件:约束条件:= 初始值;初始值; 信号初始值的设置不是必需的,而且初始值仅在信号初始值的设置不是必需的,而且初始值仅在VHDL的行的行 为仿真中有效。为仿真中有效。 例例:SIGNAL temp: STD_LOGIC:=0; SIGNAL flaga, flagb: BIT; SIGNAL date: STD_LOGIC_VECTOR (15 DOWNTO 0); 信号的

16、使用和定义范围是实体、结构体和程序包信号的使用和定义范围是实体、结构体和程序包. VHDL语言的基本语法 在程序中在程序中: (1) 信号值的代入采用信号值的代入采用“=”代入符,而且信号代入符,而且信号 代入时可以附加延时。代入时可以附加延时。 (2) 变量赋值时用变量赋值时用“:=”,不可附加延时。,不可附加延时。 (3) 信号的初始赋值符号仍是信号的初始赋值符号仍是“:=”。 例:例: X=Y AFTER 10 ns; -X,Y都是信号,且都是信号,且Y的值经过的值经过10ns延延 时以后才被代入时以后才被代入X。 信号是一个全局量,它可以用来进行进程之间的通信。信号是一个全局量,它可以

17、用来进行进程之间的通信。 VHDL语言的基本语法 例例 进程进程1: PROCESS(A,B,C,D) BEGIN D=A; X=B+D; D=C; Y=B+D; END PROCESS; D中最初代入的值是中最初代入的值是A,接接 着又代入着又代入C值。尽管值。尽管D中先代中先代 入入A值,后代入值,后代入C值,在时间值,在时间 上有一个的延时,但是,在上有一个的延时,但是,在 代入时由于不进行处理,因此代入时由于不进行处理,因此 仿真时认为是时间仿真时认为是时间0值延时。值延时。 所以所以D的最终值应为的最终值应为C,这样这样 执行的结果:执行的结果:X,Y的内容都的内容都 为为B+C。

18、进程进程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的值就被的值就被 赋给赋给D,所以所以X为为B+A。此后又执行此后又执行“D: =C;”,从而使从而使Y为为B+C。由此可看出,信由此可看出,信 号的值将进程语句最后所代入的值作为最终号的值将进程语句最后所代入的值作为最终 代入值。而变量的值一经赋值就变成新的值。代入值。而变量的值一经赋值就变成新的值。 在仿真过程中,信号到了规定的仿真时

19、间才进行赋值,变量在仿真过程中,信号到了规定的仿真时间才进行赋值,变量 的赋值是立即生效的。的赋值是立即生效的。 VHDL语言的基本语法 (2)赋值符不同)赋值符不同 信号信号 signal count : std_logic_vector(7 downto 0); 变量变量 variable tema:std_logic_vector(3 downto 0); 信号在结构体中声明;变量在进程中声明信号在结构体中声明;变量在进程中声明 (1)声明的形式与位置不同)声明的形式与位置不同 count=“00000000”, count=“ZZZZZZZZ” count=tema; tema:=00

20、00; VHDL语言的基本语法 (3)赋值生效的时间不同)赋值生效的时间不同 信号:进程结束时信号:进程结束时 变量:立即生效变量:立即生效 (4)进程对信号敏感,对变量不敏感)进程对信号敏感,对变量不敏感 (5)作用域不同)作用域不同 信号可以是多个进程的全局信号,信号可以是多个进程的全局信号, 变量只在定义后的顺序域可见变量只在定义后的顺序域可见 VHDL语言的基本语法 三、三、VHDLVHDL语言的数据类型语言的数据类型 标量型标量型(Scalar Type) 复合类型复合类型( (Composite Type)Composite Type) 存取类型存取类型(Access Type)

21、文件类型文件类型(Files Type) lVHDL中的数据类型可以分成四大类。中的数据类型可以分成四大类。 VHDL语言的基本语法 标量型标量型(SCALAR TYPE):属单元素的最基本的数据属单元素的最基本的数据 类型,通常用于描述一个单值数据对象,它包括实类型,通常用于描述一个单值数据对象,它包括实 数类型、整数类型、枚举类型和时间类型。数类型、整数类型、枚举类型和时间类型。 复合类型复合类型(COMPOSITE TYPE):可以由细小的数据可以由细小的数据 类型复合而成,如可由标量复合而成。复合类型主类型复合而成,如可由标量复合而成。复合类型主 要有数组型要有数组型(ARRAY)和记

22、录型和记录型(RECORD)。 存取类型存取类型(ACCESS TYPE):为给定的数据类型的数为给定的数据类型的数 据对象提供存取方式。据对象提供存取方式。 文件类型文件类型(FILES TYPE):用于提供多值存取类型。用于提供多值存取类型。 VHDL语言的基本语法 1 1VHDLVHDL的预定义数据类型的预定义数据类型 VHDL的预定义数据类型都是在的预定义数据类型都是在VHDL标准程序标准程序 包包STANDARD中定义的,在实际使用中,已自动包中定义的,在实际使用中,已自动包 含进含进VHDL的源文件中,因而不必通过的源文件中,因而不必通过USE语句以显语句以显 式调用。式调用。 1

23、). 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). 时间时间( (TIME)TIME)

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

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

26、URAL RANGE)OF BIT; 3) 位矢量位矢量(BIT_VECTOR)数据类型数据类型 4) 字符字符(CHARACTER)数据类型数据类型 字符类型通常用单引号引起来,如字符类型通常用单引号引起来,如 A。字符类型区分大小写,如字符类型区分大小写,如B不同于不同于 b。字符类型已在字符类型已在STANDARD程序包中作程序包中作 了定义。了定义。 VHDL语言的基本语法 整数类型的数代表正整数、负整数和零。整数类型的数代表正整数、负整数和零。 5) 整数整数(INTEGER)数据类型数据类型 l常用整数常量的书写方式示例如下:常用整数常量的书写方式示例如下: l2 -十进制整数十进

27、制整数 l10E4 -十进制整数十进制整数 l16#D2# -十六进制整数十六进制整数 l2#11011010# -二进制整数二进制整数 VHDL语言的基本语法 自然数和正整数是整数的一个子类型。自然数和正整数是整数的一个子类型。 在在STANDARD程序包中定义的源代码如下:程序包中定义的源代码如下: SUBTYPE NATURAL IS INTEGER RANGE 0 TO INTEGER HIGH; SUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGER HIGH; 自然数自然数(NATURAL)和正整数和正整数 (POSITIVE)数据类型数据类型

28、 VHDL语言的基本语法 l实数常量的书写方式举例如下:实数常量的书写方式举例如下: l65971.333333 -十进制浮点数十进制浮点数 l8#43.6#E+4 -八进制浮点数八进制浮点数 l43.6E-4 -十进制浮点数十进制浮点数 6) 实数实数(REAL)数据类型数据类型 VHDL的实数类型类似于数学上的实数,或称浮的实数类型类似于数学上的实数,或称浮 点数。实数的取值范围为点数。实数的取值范围为-1.0E38+1.0E38。通常情通常情 况下,实数类型仅能在况下,实数类型仅能在VHDL仿真器中使用,仿真器中使用,VHDL 综合器不支持实数,因为实数类型的实现相当复杂,综合器不支持实

29、数,因为实数类型的实现相当复杂, 目前在电路规模上难以承受。目前在电路规模上难以承受。 VHDL语言的基本语法 字符串数据类型是字符数据类型的一字符串数据类型是字符数据类型的一 个非约束型数组,或称为字符串数组。字个非约束型数组,或称为字符串数组。字 符串必须用双引号标明。如:符串必须用双引号标明。如: 7) 字符串字符串(STRING)数据类型数据类型 VARIABLE string_var : STRING (1 TO 7 ) ; string_var := a b c d ; VHDL语言的基本语法 VHDL中唯一的预定义物理类型是时间。完整中唯一的预定义物理类型是时间。完整 的时间类型

30、包括整数和物理量单位两部分,整数的时间类型包括整数和物理量单位两部分,整数 和单位之间至少留一个空格,如和单位之间至少留一个空格,如55 ms,20 ns。 8) 时间时间(TIME)数据类型数据类型 TYPE time IS RANGE 2147483647 TO 2147483647 units fs ; - 飞秒,飞秒,VHDL中的最小时间单位中的最小时间单位 ps = 1000 fs ; - 皮秒皮秒 ns = 1000 ps ; - 纳秒纳秒 us = 1000 ns ; - 微秒微秒 ms = 1000 us ; - 毫秒毫秒 sec = 1000 ms ; - 秒秒 min =

31、60 sec ; - 分分 hr = 60 min ; - 时时 end units ; STANDARD 程序包中定义时间如下:程序包中定义时间如下: VHDL语言的基本语法 在在VHDL仿真器中,错误等级用来指示设计仿真器中,错误等级用来指示设计 系统的工作状态,共有四种可能的状态值:系统的工作状态,共有四种可能的状态值: NOTE(注意注意)、WARNING(警告警告)、 ERROR(出错出错)、FAILURE(失败失败)。 在仿真过程中,可输出这四种值来提示被仿在仿真过程中,可输出这四种值来提示被仿 真系统当前的工作情况。真系统当前的工作情况。 STANDARD 程序包中程序包中 定义

32、如下:定义如下: TYPE SEVERITY_LEVEL IS (NOTE, WARNING,ERROR,FAILURE); 9) 错误等级错误等级(SEVERITY_LEVEL) VHDL语言的基本语法 在在IEEE库的程序包库的程序包STD_LOGIC_1164中,定中,定 义了两个非常重要的数据类型,即义了两个非常重要的数据类型,即: 标准逻辑位标准逻辑位STD_LOGIC 标准逻辑矢量标准逻辑矢量STD_LOGIC_VECTOR 1) 标准逻辑位标准逻辑位STD_LOGIC数据类型数据类型 2. 2. IEEEIEEE预定义标准逻辑位与矢量预定义标准逻辑位与矢量 TYPE STD_LO

33、GIC IS (U,X,0,1,Z, W,L,H,-); 在在IEEE库程序包库程序包STD_LOGIC_1164中的数据类中的数据类 型型STD_LOGIC的定义如下所示:的定义如下所示: VHDL语言的基本语法 “U” 未初始化未初始化 “X” 强不定强不定 “0” 0 “1” 1 “Z” 高阻高阻 “W” 弱信号不弱信号不 定定 “L” 弱信号弱信号0 “H” 弱信号弱信号1 “_” 忽略忽略(或不可能情况或不可能情况) 注意在使用该类型数据时,在程序中必须写出库说注意在使用该类型数据时,在程序中必须写出库说 明语句和使用包集合的说明语句。明语句和使用包集合的说明语句。 lLIBRARY

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

35、的中定义了如下的 数据类型:数据类型: 无符号型无符号型(UNSIGNED) 有符号型有符号型(SIGNED) 小整型小整型(SMALL_INT) 3. 3. 其他预定义标准数据类型其他预定义标准数据类型 VHDL语言的基本语法 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; 如果将信号或变量定义为这几个数据类型,就可如果将信号或变量定义为这几个数据

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

37、。进制数,这个二进制数的最左位是其最高位。 2) 有符号数据类型有符号数据类型(SIGNED TYPE) SIGNED数据类型表示一个有符号的数值,数据类型表示一个有符号的数值, 综合器将其解释为补码,此数的最高位是符号综合器将其解释为补码,此数的最高位是符号 位,例如:位,例如:SIGNED(“0101”) 代表代表+5,5; SIGNED(“1101”) 代表代表-5。 VHDL语言的基本语法 VHDL允许用户自行定义新的数据类型,允许用户自行定义新的数据类型, 它们可以有多种,如它们可以有多种,如: 4. 4. 用户自定义数据类型方式用户自定义数据类型方式 可由用户定义的数据类型常见的有

38、可由用户定义的数据类型常见的有8种:种: 枚举(枚举(Enumerated)类型;类型; 整数(整数(Integer)类型类型 实数(实数(Real),),浮点数(浮点数(Floating)类型;类型; 数组(数组(Array)类型;类型; 存取(存取(Access)类型;类型; 文件(文件(File)类型;类型; 记录(记录(Recode)类型;类型; 时间(时间(Time)类型。类型。 VHDL语言的基本语法 语法结构如下:语法结构如下: 1) TYPE语句用法语句用法 TYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义 OF 基本数据类型基本数据类型; TYPE 数据类型名数

39、据类型名 IS 数据类型定义数据类型定义 OF 基本数据类型基本数据类型 约束范围约束范围; TYPE current IS REAL RANGE -1E4 TO 1E4; TYPE digit IS INTEGER ; TYPE digit1 IS INTEGER RANGE 0 TO 9; 例如:例如: 数据类型如果没有被指定,则默认为整数类型。数据类型如果没有被指定,则默认为整数类型。 VHDL语言的基本语法 子类型子类型SUBTYPE只是由只是由TYPE所定义所定义 的原数据类型的一个子集。的原数据类型的一个子集。 子类型子类型SUBTYPE的语句格式如下:的语句格式如下: 2) SU

40、BTYPE语句用法语句用法 SUBTYPE 子类型名子类型名 IS 基本数据类型基本数据类型 RANGE 约束范围;约束范围; SUBTYPE N1 IS INTEGER RANGE 10 TO 100; 例如:例如: VHDL语言的基本语法 VHDL中的枚举数据类型是用文字符号中的枚举数据类型是用文字符号 来表示一组实际的二进制数的类型来表示一组实际的二进制数的类型(若直接若直接 用数值来定义,则必须使用单引号用数值来定义,则必须使用单引号)。 【例】【例】TYPE M_STATE IS( STATE1, STATE2,STATE3,STATE4,STATE5); 3) 枚举类型 VHDL语

41、言的基本语法 4) 数组类型数组类型 数组类型属复合类型,它是将一组具有相数组类型属复合类型,它是将一组具有相 同数据类型的元素集合在一起,作为一个数同数据类型的元素集合在一起,作为一个数 据对象来处理的数据类型。数组可以是一维据对象来处理的数据类型。数组可以是一维 (每个元素只有一个下标每个元素只有一个下标)数组或多维数组数组或多维数组(每每 个元素有多个下标个元素有多个下标)。VHDL仿真器支持多维仿真器支持多维 数组,但数组,但VHDL综合器只支持一维数组。综合器只支持一维数组。 数组的元素可以是任何一种数据类型,用数组的元素可以是任何一种数据类型,用 以定义数组元素的下标范围子句决定了

42、数组以定义数组元素的下标范围子句决定了数组 中元素的个数以及元素的排序方向,即下标中元素的个数以及元素的排序方向,即下标 数是由低到高,或是由高到低。数是由低到高,或是由高到低。 VHDL语言的基本语法 限定性数组限定性数组定义语句格式如下:定义语句格式如下: TYPE 数组名数组名 IS ARRAY (数组范围数组范围) OF 数据类型;数据类型; 【例】【例】 TYPE STB IS ARRAY(7 DOWNTO 0) OF STD_LOGIC; 【例】【例】 TYPE X IS (LOW,HIGH); TYPE DATA_BUS IS ARRAY (0 TO 7,X) OF BIT; 首

43、先定义首先定义X为两元素的枚举数据类型,然后将为两元素的枚举数据类型,然后将DATA_BUS 定义为一个数组类型,其中每一元素的数据类型是定义为一个数组类型,其中每一元素的数据类型是BIT。 VHDL语言的基本语法 非限制性数组非限制性数组的定义语句格式如下:的定义语句格式如下: TYPE 数组名数组名 IS ARRAY (数组下标名数组下标名 RANGE) OF 数据类型;数据类型; 其中,数组名是定义的非限制性数组其中,数组名是定义的非限制性数组 类型的取名;数组下标名是以整数类型设类型的取名;数组下标名是以整数类型设 定的一个数组下标名称;符号定的一个数组下标名称;符号“”是下是下 标范

44、围待定符号,用到该数组类型时,再标范围待定符号,用到该数组类型时,再 填入具体的数值范围;数据类型是数组中填入具体的数值范围;数据类型是数组中 每一元素的数据类型。每一元素的数据类型。 VHDL语言的基本语法 【例】【例】 TYPE BIT_VECTOR IS ARRAY(NATURAL RANE) OF BIT; VARIABLE VA:BIT_VECTOR(1 TO 6); -将数组取值范围定在将数组取值范围定在16 【例】【例】 TYPE LOGIC_VECTOR IS ARRAY(NATURAL RANGE,POSITIVE RANGE) OF LOGIC; VARIABLE L16_OBJECT:LOGIC_VECTOR(0 TO 7,1 TO 2); -限定范围限定范围 VHDL语言的基本语法 由已定义的、数据类型不同的对象元素由已定义的、数据类型不同的对象元素 构成的数组称为记录类型的对象。定义记录构成的数组称为记录类型的对象。定义记录 类型的语句格式如下:类型的语句格式如下: TYPE 记录类型名记录类型名 IS RECORD 元素名元素名 : 元素数据类型;元素数据类型; 元素名元素名 : 元素数据类型;元素数据类型; END RECORD 记录类型名记录类型名; 5) 记录类型记录类型 VH

温馨提示

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

评论

0/150

提交评论