ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:38.38KB ,
资源ID:10684136      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10684136.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(vhdl基本语法.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

vhdl基本语法.docx

1、vhdl基本语法vhdl基本语法 VHDL 基础语法篇 VHDL VHDL硬件描述语言 1.1 VHDL概述 1.1.1 VHDL的特点 VHDL语言作为一种标准的硬件描述语言,具有结构严谨、描述能力强的特点,由于 VHDL语言E1 = 14*161 = 224; (3) 位(BIT)数据类型 位数据类型的位值用字符.0.和.1.表示,将值放在单引号中,表示二值逻辑的0和1。这里 的0和1与整数型的0和1不同,可以进行算术运算和逻辑运算,而整数类型只能进行算术运算。 位数据类型的定义格式为: TYPE BIT is ( 0, 1 ); 例如: RESULT : OUT BIT; RESULT=

2、 .1.; 将RESULT引脚设置为高电平。 (4) 位向量(BIT_VECTOR)数据类型 位向量是基于BIT数据类型的数组。VHDL位向量的定义格式为: TYPE BIT_VECTOR is array (* range ) of BIT; 使用位向量必须注明位宽,即数组的个数和排列顺序,位向量的数据要用双引号括起来。 例如 “1010”,X “A8”。其中1010是四位二进制数,用X表示双引号里的数是十六进制数。 例如: SIGNAL A :BIT_VECTOR (3 DOWNTO 0 ); A = “1110” ; 表示A是四个BIT型元素组成的一维数组,数组元素的排列顺序是A3=1,

3、A2=1,A1=1, A0=0。 (5) 布尔(*)数据类型 一个布尔量具有真(TRUE)和假(FALSE)两种状态。布尔量没有数值的含义,不能 用于数值运算,它的数值只能通过关系运算产生。例如,在IF语句中,AB是关系运算,如果A=3,B=2,则AB关系成立,结果是布尔量TRUE,否则结果为FALSE。 VHDL中,布尔数据类型的定义格式为: TYPE * IS (FALSE, TRUE); (6) 字符(*ER)数据类型 在*D程序包中预定义了128个ASCII码字符类型,字符类型用单引号括起来,如.A.,.b.,.1.等,与VHDL标识符不区分大小写不同,字符类型中的字符大小写是不同的,

4、如.B.和.b.不同。 (7) 字符串(STRING) 在*D程序包中,字符串的定义是: TYPE STRING is array (*E range ) of *ER; 字符串数据类型是由字符型数据组成的数组,字符串必须用双引号括起来。 例如: *T STR1 :STRING := “Hellow world”; 定义常数ST1是字符串,初值是“Hellow world ”。 小提示: 与C语言类似,字符类型用单引号括起来,而字符串必须用双引号括起来,别弄混了。 (8) 时间(TIME)数据类型 表示时间的数据类型,一个完整的时间类型包括整数表示的数值部分和时间单位两个部 分,数值和单位之间

5、至少留一个空格,如1 ms,20 ns等。 *D程序包中定义时间格式为: TYPE TIME is range -*-*-*808 to *-*-*807 UNITS fs; - 飞秒 ps = 1000 fs; - 皮秒 ns = 1000 ps; - 纳秒 us = 1000 ns; - 微秒 ms = 1000 us; - 毫秒 sec = 1000 ms; - 秒 min = 60 sec; - 分 hr = 60min; - 小时 END UNITS; 小提示: 实数,时间类型仅用于VHDL仿真,一般综合器不支持。 2. IEEE预定义的标准逻辑位和标准逻辑位向量 (1) 标准逻辑位

6、(STD_LOGIC)数据类型 STD_LOGIC是位(BIT)数据类型的扩展,是STD_ULOGIC数据类型的子类型。它是一 个逻辑型的数据类型,其取值取代BIT数据类型的取值0和1两种数值,扩展定义了九种值,在IEEE *程序包中,STD_ULOGIC和STD_LOGIC数据类型定义格式为: TYPE std_ulogic IS ( U, - Uninitialized X, - Forcing Unknown 0, - Forcing 0 1, - Forcing 1 Z, -High Impedance W, - Weak Unknown L, -Weak 0 H, -Weak 1 -

7、 - Dont care ); *N resolved ( s : std_ulogic_vector ) RETURN std_ulogic; * std_logic IS resolved std_ulogic; 小提示: STD_LOGIC中的数据类型必须要大写,不能使用小写字母代替,在实际的IC集成时, 一般只使用.0., .1., .Z., ._.四种数据类型,其余的.W., .L., .H.是不可综合的。 STD_LOGIC和STD_ULOGIC数据类型的区别在于STD_LOGIC数据类型是经过重新定 义的,可以用来描述多路驱动的三态总线,而STD_ULOGIC数据类型只能用于描述

8、单路驱 动的三态总线。 (2) 标准逻辑位向量(STD_LOGIC_VECTOR)数据类型 STD_LOGIC_VECTOR是基于STD_LOGIC数据类型的标准逻辑一维数组,和 BIT_VECTOR数组一样,使用标准逻辑位向量必须注明位宽和排列顺序,数据要用双引号 括起来。 例如: SIGNAL SA1 :STD_LOGIC_VECTOR (3 DOWNTO 0 ); SA1 = “0110” ; 在IEEE_STD_1164程序包中,STD_LOGIC_VECTOR数据类型定义格式为: TYPE std_logic_vector IS ARRAY ( * RANGE ) OF std_lo

9、gic; 3. 其它预定义的数据类型 在STD_LOGIC_ARITH程序包中定义了无符号(*D)和带符号(SIGNED)数 据类型,这两种数据类型主要用来进行算术运算。定义格式为: TYPE *D is array (* range ) of STD_LOGIC; TYPE SIGNED is array (* range ) of STD_LOGIC; (1) 无符号(*D)数据类型 无符号数据类型是由STD_LOGIC数据类型构成的一维数组,它表示一个自然数。在一 个结构体中,当一个数据除了执行算术运算之外,还要执行逻辑运算,就必须定义成 *D,而不能是SIGNED或*类型。 例如: S

10、IGNAL DAT1 :*D(3 DOWNTO 0); DAT1 = “1001”; 定义信号DAT1是四位二进制码表示的无符号数据,数值是9。 (2) 带符号(SIGNED)数据类型 带符号(SIGNED)数据类型表示一个带符号的整数,其最高位用来表示符号位,用补 码表示数值的大小。当一个数据的最高位是0时,这个数表示正整数,当一个数据的最高位 是1时,这个数表示负整数。 例如: *E DB1, DB2 : SIGNED(3 DOWNTO 0); DB1 = “0110” ; DB2 = “ 1001” ; 定义变量DB1是6,变量DB2是-7。 4. 用户自定义的数据类型 在VHDL中,用

11、户可以根据设计需要,自己定义数据的类型,称为用户自定义的数据类 型。利用用户自己定义数据类型可以使设计程序便于阅读。用户自定义的数据类型可以通过 两种途径来实现,一种方法是通过对预定义的数据类型作一些范围限定而形成的一种新的 数据类型。这种定义数据类型的方法有如下几种格式: TYPE 数据类型名称 IS 数据类型名RANGE 数据范围; 例如: TYPE DATA IS * RANGER 0 TO 9 ; 定义DATA是*数据类型的子集,数据范围是09。 * 数据类型名称 IS 数据类型名 RANGE 数据范围; 例如: * DB IS STD_LOGIC_VECTOR(7 DOWNTO 0)

12、; 定义DB 是STD_LOGIC_VECTOR数据类型的子集,位宽8位。 另一种方法是在数据类型定义中直接列出新的数据类型的所有取值,称为枚举数据类 型。定义该种数据类型的格式为: TYPE 数据类型名称 IS(取值1,取值2,?); 例如 : TYPE BIT IS(.0.,.1.); TYPE STATE_M IS (STAT0, STAT1, STAT2, STAT3); 定义BIT数据类型,取值0和1。定义STATE_M是数据类型,表示状态变量STAT0,STAT1, STAT2,STAT3。在VHDL中,为了便于阅读程序,可以用符号名来代替具体的数值,前例 中STATE_M是状态变

13、量,用符号STAT0, STAT1, STAT2, STAT3表示四种不同的状态取值是 00,01,10,11。 例如定义一个 “WEEK” 的数据类型用来表示一个星期的七天,定义格式为: TYPE WEEK IS (SUN, MON, TUE, WED, THU, FRI, SAT); 小提示: 使用枚举数据类型定义后,综合器会自动将字符类型从0开始进行二进制编码,编码的位 数由枚举元素个数决定。 5数组(ARRAY)的定义 数组是将相同类型的单个数据元素集合在一起所形成的一个新的数据类型。它可以是一 维数组(一个下标)和多维数组(多个下标),下标的数据类型必须是整数。前面介绍的位 向量(B

14、IT_VECTOR)和标准逻辑位向量(STD_LOGIC_VECTOR)数据类型都属于一维 数组类型。数组定义的格式为: TYPE 数据类型名称 IS ARRAY 数组下标的范围 OF 数组元素的数 小提示: VHDL多维数组定义,多维数组声明即将第一维的数组作为第二维数组的元素定义即可。 TYPE 1维数据类型名称 IS ARRAY 数组下标的范围 OF 数组元素的数据类型; TYPE 2维数据类型名称 IS ARRAY 数组下标的范围 OF 上面所定义的1维数据类型; 根据数组元素下标的范围是否指定,把数组分为非限定性数组和限定性数组两种类型。 非限定性数组不具体指定数组元素下标的范围,而

15、是用* RANGER 表示,当用到该数组时,再定义具体的下标范围。如前面介绍的位向量(BIT_VECTOR)和标准逻辑位向量(STD_LOGIC_VECTOR)数据类型等在程序包中预定义的数组属于非限定性数组。 例如,在IEEE程序包中定义STD_LOGIC_VECTOR数据类型的语句是 TYPE std_logic_vector IS ARRAY ( * RANGE ) OF std_logic; 没有具体指出数组元素的下标范围,在程序中用信号说明语句指定。 例如: SIGNAL DAT : STD_LOGIC_VECTOR(3 DOWNTO 0); 限定性数组的下标的范围用整数指定,数组元

16、素的下标可以是由低到高,如 0 TO 3, 也可以是由高到低,如7 DOWNTO 0,表示数组元素的个数和在数组中的排列方式。 例如: TYPE D IS ARRAY(0 TO 3)OF STD_LOGIC; TYPE A IS ARRAY(4 DOWNTO 1)OF BIT; 定义数组D是一维数组,由四个STD_LOGIC型元素组成,数组元素的排列顺序是D(0), D(1),D(2),D(3)。A数组是由四个元素组成的BIT数据类型,数组元素的排列顺序是A(4), A(3),A(2),A(1)。 小提示: 对于数组数据类型,可以给一组数据多个值一起赋值: 如上例: SIGNAL ARRAY1

17、: D; BEGIN ARRAY1=(.1.,.0.,.0.,.1.); 6数据类型的转换 在VHDL语言中,数据类型的定义是相当严格的,不同类型的数据是不能进行运算和赋 值的。为了实现不同类型的数据赋值,就要进行数据类型的变换。变换函数在VHDL语言程序包中定义。在程序包STD_LOGIC_1164、STD_LOGITH_ARITH和STD_LOGIC_ *D中提供的数据类型变换函数如表1-2-3所列。 例如把*数据类型的信号转换为STD_LOGIC_VECTOR数据类型的方法是: 定义A, B为: * :* RANGER 0 TO 15; * : STD_LOGIC_VECTOR(3 DO

18、WNTO 0); 需要调用STD_LOGIC_ARITH程序包中的函数CONV_STD_LOGIC_VECTOR 调用的格式是:B = CONV_STD_LOGIC_VECTOR(A); 表1-2-3 数据类型变换函数 程序包名称 STD_LOGIC_1164 函数名称 TO_BIT TO_*OR TO_*IC TO_*R 功能 由STD_LOGIC转换为BIT 由STD_LOGIC_VECTOR转换为 BIT_VECTOR 由BIT转换为STD_LOGIC 由BIT_VECTOR转换为STD_LOGIC_VECTOR 由*D, SIGNED 转换为* 由SIGNED, *转换为*D 由*,

19、*D, SIGNED 转换为STD_LOGIC_VECTOR 由STD_LOGIC_VECTOT转换为* STD_LOGIC_ARITH CONV_* CONV_*D CONV_STD_LOGIC_VECTOR STD_LOGIC_*D CONV_* 1.2.3 VHDL的运算符 与高级语言一样,VHDL语言的表达式也是由运算符和操作数组成的。VHDL标准预 定义了四种运算符,即逻辑运算符、算术运算符、关系运算符、移位运算符和连接运算符, 并且定义了与运算符相应的操作数的数据类型。各种运算符之间是有优先级的,例如在所有 运算符中,逻辑运算符NOT的优先级别最高。表1-2-4列出了所有运算符的优

20、先级顺序。 表1-2-4 VHDL运算符列表 运 算符类型 逻辑运算符 OR NAND NOR XOR NXOR 关系运算符 /= = = 移位运算符 SLA SRL SRA ROL ROR 符号运算符 - 连接运算符 运算符 功能 优先级 AND = SLL + + 逻辑与 逻辑或 逻辑与非 逻辑或非 逻辑异或 逻辑异或非 等于 不等于 小于 大于 小于等于 大于等于 逻辑左移 算术左移 逻辑右移 算术右移 逻辑循环左移 逻辑循环右移 正 负 位合并 加 减 乘 除 求模 求余 乘方 求绝对值 逻辑非 最低 算术运算符 - * / MOD REM * ABS 逻辑非运算符 NOT 最高 1逻

21、辑运算符 在VHDL语言中定义了七种基本的逻辑运算符,它们分别是: AND(与)、OR(或)、NOT(非)、NAND(与非)、NOR(或非)、XOR(异或) 和NXOR(异或非)等。 由逻辑运算符和操作数组成了逻辑表达式。在VHDL语言中,逻辑表达式中的操作数的 数据类型可以是BIT和STD_LOGIC数据类型,也可以是一维数组类型BIT_VECTOR和 STD_LOGIC_VECTOR,要求运算符两边的操作数的数据类型相同、位宽相同。逻辑运算是 按位进行的,运算的结果的数据类型与操作数的数据类型相同。 例如用VHDL描述逻辑表达式是Y=AB,Z=A+B+C的程序如下: ENTITY loga

22、 IS PORT( A, B, C : IN STD_LOGIC; Y, Z : OUT STD_LOGIC ); END loga; *CTURE stra OF loga IS BEGIN Y= A AND B; Z = A OR B OR C; END stra; 例如用VHDL描述两个位向量的逻辑运算的程序如下: ENTITY logb IS PORT( A, B : IN BIT_VECTOR(0 TO 3); Y : OUT BIT_VECTOR(0 TO 3) ); END logb; *CTURE strb OF logb IS BEGIN Y=A AND B; END str

23、b; 如果A=1011,B=1101,则程序仿真的结果是Y=1001。 在一个逻辑表达式中有两个以上的运算符时,需要用括号对这些运算进行分组。 例如语句 X1 =(A AND B ) OR (C AND B); X2 =( A OR B) AND C; 是正确的。 如果一个逻辑表达式中只有AND、OR和XOR三种运算符中的一种运算符,那么改变运 算顺序不会影响电路的逻辑关系,表达式中的括号是可以省略的。例如下列语句是正确的。 Y1 =A AND B AND C; Y2 = A OR B OR D; 2算术运算符 VHDL语言定义了五种常用的算术运算符,分别是 + 加或正, A+B,+A - 减

24、或负, A-B, -B * 乘, A*B / 除, A/B * 指数, N*2 以及MOD(求模)、REM(取余)、ABS(求绝对值)等算术运算符。 在算术运算表达式中,两个操作数必须具有相同的数据类型,加法和减法的操作数的数 据类型可以是整数、实数或物理量,乘除法的操作数可以是整数或实数。为了节约硬件资源, 除法和乘法的操作数应该选用*、STD_LOGIC_VECTOR或BIT_VECTOR等数据类型。 例如 X=A+B; Y=C*D; Z=A-C*2 小提示: 对于 / , MOD, REM运算,要求操作符的右操作数必须为2的正整数次幂,可以用实际电 路移位实现,才可以综合。 3关系运算符

25、 关系运算符是将两个相同类型的操作数进行数值比较或关系比较,关系运算的结果的 数据类型是TRUE或FALSE,即*类型。VHDL语言中定义了六种关系运算符, 分别是: = 等于 /= 不等于 大于 小于 = 大于或等于 = 小于或等于 在VHDL中,关系运算符的数据类型根据不同的运算符有不同的要求。其中 “=”(等于) 和 “/=”(不等于)操作数的数据类型可以是所有类型的数据,其他关系运算符可以使用整 数类型、实数类型、枚举类型和数组。整数和实数的大小排序方法与数学中的比较大小方法 相同。枚举型数据的大小排序方法与它们的定义顺序一致,例如BIT型数据10,* 型数据*SE。 在利用关系运算符

26、对位向量数据进行比较时,比较过程是从左到右的顺序按位进行比较 的,操作数的位宽可以不同,但有时会产生错误的结果。 如果A、B是STD_LOGIC_VECTOR数据类型, A = “1110”,B= “*”,关系表达式 AB的比较结果是TRUE,也就是说AB。对于以上出现的错误可以利用STD_LOGIC_ARITH 程序包中定义的数据类型*D来解决,把要比较的操作数定义成*D数据类型。 4移位运算符 VHDL93标准中增加了六个移位运算符,分别是SLL逻辑左移,SRL逻辑右移,SLA算术 左移,SRA算术右移,ROL逻辑循环左移,ROR逻辑循环右移。移位运算符的格式是: 操作数名称 移位运算符

27、移位位数; 操作数的数据类型可以是BIT_VECTOR、STD_LOGIC_VECTOR等一维数组,也可以是 *型,移位位数必须是*型常数。 六条移位运算符所执行的操作如图1-2-1所示。 其中SLL是将位向量左移,右边移空位补零。SLA是将位向量左移,右边第一位的数值 保持原值不变。 SRL是将位向量右移,左边移空位补零。SRA是将位向量右移,左边第一 位的数值保持原值不变。ROR和ROL是自循环移位方式。 例如 A= “0101”; B =A SLL 1; 仿真的结果是B = 1010。 5连接运算符() 用连接运算符可以将多个数据对象合并成一个新的一维数组,也可以将两个一维数组中 的元素

28、分解合并成新的一维数组。连接两个操作符产生新的一维数组的位宽等于两个操作 数的位宽之和,新的数组元素的顺序是由操作数的位置决定的,连接符“”左边的操作数的元素在左,连接符 “”右边的操作数的元素在右。操作数可以是BIT或STD_LOGIC 如果 1011,0010 A :BIT_VECTOR(0 TO 7) 0001,0110 B :BIT_VECTOR(0 TO 7) C =B(0 TO 3)A( 5 TO 7).1.; 则C=1011,1101 1.2.4 VHDL的数据对象 在算法语言中,定义了多种数据对象,如常数、变量和数组等,用来存放不同类型的数 据,如整数、实数、复数、逻辑常数和逻

29、辑变量等。在VHDL程序中,常用的数据对象分为三种类型,即常数(*T)、变量(*E)和信号(SIGNAL),在使用过 程中,这三种数据对象除了具有一定的数据功能外,还赋予了不同的物理意义,在应用时要 特别注意。 1. 常数(*T) 常数被赋值后就保持某一固定的值不变。在VHDL中,常数通常用来表示计数器的模的 大小、数组数据的位宽和循环计数次数等,也可以表示电源电压值的大小。常数的使用范围 与其在设计程序中的位置有关,如果常数在结构体中赋值,则这个常数可供整个设计单元使 用,属于全局量,如果常数在*语句或子程序中赋值,只能供进程或子程序使用, 属于局部量。程序设计中使用常数有利于提高程序的可读

30、性和方便对程序进行修改。通常常 数的赋值在程序开始前进行,其数据类型在常数说明语句中指明,赋值符号为 “:=”。 常数定义语句的格式为: *T 常数名称:数据类型 := 表达式 例如: *T Vcc: REAL := 5.0; *T DALY : TIME := 20ns; *T KN : * := 60; 在上面的例子中,Vcc的数据类型是实数,被赋值为5.0,DALY被赋值为时间常数20ns, KN被赋值为60的整数。 注意:常数所赋的值的数据类型必须与定义的数据类型一致,在程序中常数被赋值后不能 再改变。 2变量(*E) 在VHDL程序中,变量只能在进程和子程序中定义和使用,不能在进程外部定义使用, 变量属于局部量,在进程内部主要用来暂存数据。对变量操作有变量定义语句和变量赋值 语句,变量在赋值前必须通过定义,可以在变量定义语句中赋初值,变量初值不是必需的, 变量初值的赋值的符号是“ :=”。 小提示: 变量与信号赋初值语句仅可用于仿真,在综合时被忽略,不起作用。 变量定义语句的格式为: * 变量名称:数据类型 := 初值; 例如: * S1 :* := 0 ; * S2, S3 :* * CON1 :* RANGER 0 TO 20 ; * D1, D2 :STD_LOGIC

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1