《VHDL语言描述数》PPT课件.ppt_第1页
《VHDL语言描述数》PPT课件.ppt_第2页
《VHDL语言描述数》PPT课件.ppt_第3页
《VHDL语言描述数》PPT课件.ppt_第4页
《VHDL语言描述数》PPT课件.ppt_第5页
已阅读5页,还剩130页未读 继续免费阅读

下载本文档

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

文档简介

1、第十三章 VHDL语言描述数字系统,本章介绍用 VHDL 描述硬件电路的一些基本手段和基本方法,13.1 VHDL 语言的基本结构,VHDL 语言是美国国防部在 20 世纪 80 年代初为实现其高速集成电路计划(VHSIC)而提出的一种超高速集成电路硬件描述语言。 VHDL 语言的基本结构是对任何电路在用 VHDL语言描述时,都应有两部分组成:实体和结构体。实体描述电路的输入、输出关系;结构体描述电路的功能,VHDL 语言描述与逻辑电路图的对应关系,C=ab,实体,结构体,a,b,c,VHDL模型的基本结构,半加器是我们熟悉的器件,输入变量a和b表示两个加数,输出S和CO表示和及进位位。可以用

2、如下逻辑函数式表示半加器,也可以用如表131所示的真值表来表示,还可以用如图131(a)所示的逻辑图或用如图131(b)所示的逻辑符号表示之,图131 半加器电路符号 (a)逻辑图;(b)逻辑符号,表131 半加器真值表,除上述三种表达方式外,还可以用VHDL来表达。 例1 半加器 - halfadder LIBRARY IEEE; USE IEEE.STD -LOGIC -1164.ALL; ENTITY half adder IS PORT(a,b:INSTD-LOGIC;s,co:OUTSTD-LOGIC); END half adder; ARCHITECTURE half OF ha

3、lf adder IS SIGNAL c,d:STD LOGIC,BEGIN c=a OR b d=a NAND b; co=NOT d; s=c AND d; -S=(a+b)ab END half,在VHDL中,一个设计单元被称为一个设计实体。它可以是一个简单的电路(如:一个与门、一个译码器或加法器等),也可以是一个复杂的电路(如:一个微处理器或一个系统)。 如本例中的半加器就是一个设计实体。 在VHDL中,由关键字、标识符、对象、符号和表达式按VHDL的语法规则构成的句子称为VHDL语句。而能完成一定功能的若干条VHDL语句就组成VHDL程序,关键字(又称保留字)是具有特殊含义的标识符。

4、它是组成VHDL语句最基本的元素之一。用户不能把它作为自己创建的标识符。 为了醒目和易于发现错误,在书写VHDL程序时,建议关键字用大写字母或黑体字母,如关键字ENTITY表示实体;而用户自己创建的标识符用小写字母或非黑体字母。 一、在VHDL中,任何一个设计实体都至少由实体说明和结构体说明两部分构成,1、实体说明:是一个设计实体的外部视图。它定义实体名称、类属、实体输入/输出端口和一些参数。实体说明以关键字ENTITY开始,以关键字END结束,它的一般格式是: ENTITY 实体名 IS GENERIC(类属参数说明); PORT(端口说明); 实体说明部分; BEGIN 实体语句部分; E

5、ND 实体名,1) GENERIC后类属表说明用以将信息参数传递到实体。最常用的信息是:器件的上升沿到下降沿的延迟时间、负载电容和电阻、驱动能力以及功耗等。 (2) PORT端口表:指明实体的输入、输出信号及其模式。端口模式共有五种,如下所示,方向定义,含义,IN,输入,OUT,输出,INOUT,双向,BUFFER,输出,LINKAGE,不指定方向,无论哪个方向都可,例如: Generic (m:time:=1ns) -指定结构体内m的值为:1ns; tmp:=do and sel after m; -表示do与sel经过ins延迟后送tmp,对于一个VHDL的初学者来说,在学习一般格式时,除

6、要记住语句外,还要记住每行有没有标点符号和有没有用括号;用的是逗号(,)还是分号(;);用的是圆括号()还是方括号。如ENTITY实体名IS及BEGIN这两行并没有使用任何标点符号。 约定:方括号里的内容为选择项,设计者根据设计要求进行选择。在写程序时方括号要省略。 而圆括号及圆括号里的内容为必选项,在写程序时,圆括号要照写,2、结构体:主要用来描述实体的功能或内部操作特性。如果把设计实体比喻为“黑盒子”的话,那么,实体说明只定义了“黑盒子”的输入/输出,而结构体则描述了“黑盒子”内部的详细内容。结构体的一般格式。 ARCHITECTURE 结构体名 OF 实体名 IS 说明区; 包括:内部信

7、号、常数、数据类型和函数等的定义 BEGIN 结构体语句部分; END结构体名,结构体具体地描述了设计实体的逻辑功能或内部电路结构关系,从而建立设计实体输入与输出之间的关系。结构体功能可以用三种方式进行描述,即行为描述、数据流描述、结构描述,另外,还可以采用混合描述。 (1) 结构体名称的命名。 结构体的名称是对本结构的命名,它是该结构体的唯一名称。“OF”后面紧跟的实体名表明了该实体所对应的是 哪一个实体。用 “IS”来结束结构体的命名,2)定义语句。位于“ARCHITECTURE”和“BEGIN”之间。用于对结构体内部所使用的信号常数、数据类 型和函数等进行定义。 (3)并行处理语句。处于

8、“BEGIN”和“END”之间。具体描述了结构体的行为及其连接关系。 结构体的行为描述表示输入与输出间转换的关系,是对设计实体按算法的路径来描述。行为描述在ENA工程中称为高层次描述或高级描述,有了上述的VHDL知识后,让我们一起来阅读上述半加器的程序,以求对VHDL程序有更进一步的认识。 第1行以表示注释的双连线(-)开始,故该行为注释行,告诉使用者以下是一个半加器程序。 第2行以关键字LIBRARY开始,表示程序所用的库为IEEE。一般地,程序行以分号(;)结束。 第3行以关键字USE开始,以关键字ALL结束,表示程序中使用的数据类型是调用由库IEEESTD -LOGIC -1164提供的

9、数据类型,第46行是实体说明。 第4行中用语句ENTITYIS定义本实体的名称为halfadder。 第5行用关键字PORT()定义输入/输出端口,即:把a和b定义为输入端,把s和co定义为输出端。并且把输入/输出端的数据类型都定义为STD -LOGIC。 第6行用关键字END结束名为halfadder的实体说明。 第714行是结构体,第7行给出了结构体的名称为half,并说明了与实体名halfadder的所属关系 第8行是说明区,结构体的说明部分、信号、类型、元器件及其他说明可在该区中描述。本例说明了信号c和d的数据类型为STD -LOGIC。 第9行关键字BEGIN之后直至第14行为止是结

10、构体语句部分,用来叙述设计的函数功能。本实例是一个半加器的VHDL程序,第10行的语义是信号c等于a或b的结果,第11行的语义是d等于a和b的与非; 第12行的语义是co等于d ,即co等于a和b的与; 第13行的语义是s等于c和d的与,图132 VHDL程序基本结构,实际上,一个完整的VHDL程序通常通常含有五个部分,如图所示,1)实体(Entity)说明:描述设计实体的外部接口信号。 (2)结构体(Architecture):描述设计实体的内部结构和功能。 (3)配置(Configuration)说明:它是属性选项,描述层与层之间、实体说明与结构体之间的连接关系。比如高层设计需要将底层实体

11、作为文件调用,这就要用到配置说明。 格式: Configuration 配置名 of 实体名 is 说明语句; end 配置名 例:Configuration s-count of counter is for count_32 end for end 配置名,在counter实体中配置了模为32的计数器,4)库(Library)和程序包(Package) 库是一种VHDL设计单元的特定集合,用于存放可重复使用的元件和数据类型说明。它可由用户生成,也可由ASIC芯片制造商提供。 库的语句格式: LIBRARY 库名; 库的种类:IEEE库、STD库、WORK库、ASIC矢量库、用户定义库。 I

12、EEE库:包含标准的程序包和工业标准的程序包。 最常用:IEEE.STD -LOGIC 1164,STD库:VHDL的标准库,存放standard的程序包。 WORK库:现行作业库,描述语句放在此库中、使用时不需说明。 ASIC矢量库:逻辑门库,存放逻辑门对应的实体。 用户定义库:存放自已设计的程序包和实体。 库的用法: LIBRARY IEEE; USE IEEE.STD -LOGIC -1164.ALL,程序包是属性选项,用于存放各模块都能共享的数据类型、常数、元件和子程序等,它通过编译后成为库。 程序包的内容由4种结构组成:(1)常数说明(2)VHDL数据类型说明(3)元件定义(4)子程

13、序。 定义程序包的语句结构: PACKAGE 程序包名 IS 程序包首说明部分 END 程序包名 程序包首说明部分类此C语言的include:罗列数据类型,信号、子程序和元件的说明等,常用的程序包有: STD-LOGIC-1164 STD-LOGIC-UNSIGNED STD-LOGIC-SIGNED 实体说明、结构体和库是每一个VHDL程序必不可少的三大部分,而配置说明和程序包则是选项,它们的取舍视具体情况来定,13.2 VHDL的基本元素 VHDL是一门高级硬件描述语言,故它有一套自身的、严格的语法规则。可编程器件的开发软件只能识别按照这些语法规则编写VHDL程序,因此学习VHDL的基本格

14、式和基本元素就显得十分重要了。 VHDL的基本元素包括: 关键字、标识符、数据类型、对象、词法单元、表达式和运算符,13.2.1 关键字 在VHDL语句的开始、结尾或中间过程都要用到关键字,它被赋予编译器能识别的特殊含义。在编写程序时用户不能把关键字用作为自己创建的标识符。 为了便于阅读,一般用大写字母来写关键字。VHDL93中新引入的关键字以黑体形式表示,13.2.2 标识符的命名 在VHDL中,用户必须遵循VHDL标识符的命名规则来创建标识符。 标识符中可使用的有效字符: 26个大小写英文字母(az和AZ); 10个数字(09)和下划线(-)。 例如:2illegal%name被视为不合法

15、的标识符,因为%不是有效字符。 标识符用作:常量、变量、信号、端口、子程序和参数的名字,标识符必须以英文字母开头。例如,2illegal -name被视为不合法的标识符,因为它以数字2开头,而不是以英文字母开头。 标识符中下划线(-)的前后都必须有英文字母或数字,在一个标识符中只能有一个下划线(-)。例如,illegal -和illegal-name被视为不合法的标识符,因为前者下划线(-)的后面没有英文字母或数字,后者有两个下划线(-)。 标识符不区分大小写英文字母。例如,HALF -Adder和half -adder被视为同一标识符,13.2.3 数据类型 VHDL是一种强类型语言, 施加

16、于某对象上的操作必须与该对象的类型匹配。 在VHDL中,信号、变量和常数都要指定数据类型, 不同类型之间的数据不能直接代入。即使数据类型相同,位长不同时也不能直接代入。 标准的数据类型由开发软件提供,共有10种,如表132所示。如果用户需要这10种以外的数据类型,则必须自行定义。用户可定义的数据类型共有五种,如表133所示,表132 标准的数据类型,表133 用户定义的数据类型,VHDL中一个对象只能有一种类型。VHDL的基本数据类型为标量类型,包括整型、实型、枚举型、以及物理型。此外,还可以定义复合类型,如数组,记录,子类型等。 自定义数据类型举例: TYPE bit3 IS (0,1,Z)

17、; -定义枚举类型 TYPE word IS ARRAY (31 DOWNTO 0) OF Bit; -定义数组 TYPE voltage IS RANGE 0.0 TO 10.0; -定义子类型 TYPE complex IS RECORD -定义记录类型 re : Real; im : Real; END RECORD,13.2.4 对象 VHDL把信号、变量、常量和文件统称为对象。 信号和常量都可以连续赋值,而常量只能在它被说明的时候赋值(仅此一次)。 VHDL共有4种对象:常量、变量、信号和文件。 VHDL93把文件也当作对象。文件可以以子程序进行读/写操作,但不可以通过赋值来更新文件

18、的内容,对象的赋值规则: (1)可用函数调用的方法给对象赋初值 CONSTANT Bus-number:Interger:=my_function(True,6); (2)如果在同一个对象中对多个同一类型的对象指定一个初始值,则多个语句中,初始值都是 30 ns。 (3)信号和变量的默认值。若变量为字符型变量,择取最大值;若变量、信号为数值型变量,则取零。常量是全局量,变量是局部量,信号是全局量,对象说明的格式为 CONSTANT 标识符表:子类型=初值; -常数的说明格式 VARIABLE 标识符表:子类型=初值; -变量的说明格式 SIGNAL 标识符表:子类型=初值; -信号的说明格式

19、FILE 标识符表:子类型=初值; -文件的说明格式,例如: CONSTANTrest1,rest2:TIME=10ns; -把标识符rest1和rest2定义为常数,数据类型为物理型,其初值为10ns VARIABLE SUM : read ; - -变量说明 SIGNALclk:BIT; -把标识符clk定义为信号,数据类型为位 FILE input: Text IS “STD_INPUT” - -文件说明,13.2.5 词法单元 1.注释 VHDL中的注释是以双连符(-)开始直到本行末尾的一段文字。它是以文本形式对程序的说明,其目的是便于设计者和使用者阅读程序,但它不能被编码器识别。注释

20、可以在程序中的任意位置标注,但总是以双连符(-)表征,如前面学过的半加器VHDL程序的第一行和第13行中均有注释。双连符的右边文字均属于注释部分。如果注释文本很长需要延续到第二行,那么在第二行的行首也要用双连符(-)表征,2. VHDL中的数字 在VHDL中使用的数字可以用十进制、二进制、八进制或十六进制表示。用八进制表示时数字前冠以基数说明符O,用二进制表示时数字前冠以基数说明符B,用十六进制表示时数字前冠以基数说明符X。 例如,数字224用八进制表示为O340;用二进制表示为B11100000;用十六进制表示为XE0,基数与指数必须为十进制形式的整数。例如, 整数1000,有1E3,16#

21、1#E3,16#3E8#等很多表示形式。(书上P260,3.字符 VHDL中的文字字符表示形式为:被单引号括起来的ASCII字符。如A、*、“。 4.字符串 VHDL中的文字字符串表示形式为:被双引号括起来的图形字符序列(可以为空)。如“howareyou?”、“”等。 5.位串 VHDL中的位串表示形式为:被双引号括起来的扩展的数字序列,数字序列前冠以基数说明符。 如: B“11110101” 长度为八的二进制数,等效245,6. VHDL语句中使用的标点符号 分号(;)是一条语句结束的标志 逗号(,)是对象的分隔符 冒号(:)和原点(.)也是VHDL语句中常用的标点符号,它们的用法在每条语

22、句的一般格式里给出。 在书写VHDL程序时,用错标点符号的情况时常会发生,所以大家在学习VHDL时,一定要注意语句中使用的标点符号,13.2.6 表达式与运算符 VHDL中的表达式和其他程序设计语言中的表达式非常相似。一个表达式是由运算符把对象名、文字、函数调用及括起来的表达式连接起来的式子。 VHDL的运算符可分为四组: 算术运算符、关系运算符、逻辑运算符和其他运算符,如表134所示。其中,VHDL93引用的新运算符用黑体表示,表134 VHDL运算符,各运算符优先级排列顺序如下(同一行各运算符优先级相同): * ABS NOT 最高优先级 * / MOD REM +(正号) -(负号) +

23、 - =和/=的两边数据类型不必相同。 (2)连接运算符(0 功能是检查条件为真或假。如果条件为真,该语 句不起作用;如果条件为假,该语句把输出信息送到 输出终端。 关键字REPORT后跟的输出信息说明错误的原因;关键字SEVERITY后跟的级别说明错误的严重程度。在VHDL中,错误严重程度分为四个级别:FAILURE、ERROR、WARING和NOTE。该语句为程序仿真和调试带来了极大的方便,ASSERT reset=1 REPORT “Resettimedoutat1” SEVERITY ERROR; 若信号reset不为1,就输出字符串 “Resettimedoutat1”,其错误严重程

24、度是 ERROR,3.信号代入语句 书写格式: 信号量=信号量表达式;其功能是把右边信号量表达式的值赋予给左边的信号量。例如: X=a; 信号X的值此时为a 值得注意的是,代入符号(=)两边信号量的类型和位长度应该是一致的。另外,代入符号和关系操作符号中的小于等于都是用符号=,在应用时须根据上下文的含义和说明来确定其含义,4.变量赋值语句 书写格式: 变量=表达式; 其功能是把右边表达式的值赋予给左边的变量。符号=可以给任何对象赋初值,包括变量、信号、常量和文件。 例如: reset=1; 把1赋予给变量reset 变量值只能在本进程或子程序中使用,不能传递到本进程或子程序之外,也就是说,它是

25、局部变量,VHDL 有两种赋值符号: (1)“:=”为立即赋值符,将右边表达式的值立即赋给左边的对象。 (2)“=“为延迟赋值符,将右边表达式的值经一定时间间隔之后赋给左边的对象。 常量和变量以及信号的初始值用立即赋值符“:=”赋值。 迟延赋值符“=”用于在信号转播、变化过程中对信号赋值,。对象只能被赋予与该对象数据类型相一致的数据,5. IF语句 书写格式: IF 条件1 THEN 顺序语句; ELSIF 条件2 THEN 顺序语句; ELSE 顺序语句; END IF,功能:根据所指定的条件来确定执行的语句。从条件1到条件n逐个进行判断,如果某个条件成立,就执行该条件后跟的顺序语句。如果所

26、有设置的条件都不满足,则执行最后一个ELSE和ENDIF之间的顺序语句,例: IF mode = 0 THEN - - - d=a OR b; - - - END IF,IF(sel=“00”)THEN -如果sel=“00”满足, Y=input(0); -将input(0)的值赋给Y ELSIF(sel=“01”)THEN - 如果sel=“01”满足, Y=input(1); - 将input(1)的值赋给Y ELSIF(sel=“10”)THEN -如果sel=“10”满足, Y=input(2); - 将input(2)的值赋给Y ELSE Y=input(3); -都不满足,将in

27、put(3)的值赋给Y ENDIF,6.CASE语句 书写格式: CASE 表达式 IS WHEN 条件表达式=顺序语句; WHEN OTHERS=顺序语句; ENDCASE; 其中,关键字WHEN后跟的条件表达式有三种不同的形式,即,WHEN 值=顺序语句; WHEN 值值值值=顺序语句; WHEN值TO值=顺序语句; 其功能是当CASE和IS之间的表达式的取值满足制定的条件表达式的值时,程序将执行该条件表达式后跟的由符号=所指定的顺序语句。 条件表达式的值可以是一个值,或是多个值的“或”关系,或是一个值的取值范围,或表示其他所有的默认值,CASE语句是选择执行多个序列中的其中之一,故通常用

28、来描述总线、编码或译码功能。虽然IF语句也有类似的功能,但CASE语句的可读性好,阅读者很容易找出条件与动作的对应关系。例如,CASE indata IS WHEN“000”=yyy=“XXXXXXX”; -当信号indata不为000或001 -时,y=“XXXXXXX” ENDCASE,CNT=8,CNT0,CNTCNT+1,例,CASE cnt IS WHEN 8= cnt := 0; WHEN OTHERS = cnt := cnt+1 END CASE,Yes,No,CASE 语句中的 WHEN 选项可以是一个范围,7.循环(LOOP)语句 LOOP语句与其他高级语言中的循环语句一样

29、,使程序能进行有规则的循环,循环的次数受迭代算法控制。其语句书写格式有两种,如表136所示,格式1举例: FOR I IN 1TO5 LOOP -循环变量I的变化范围-是15 Trile=I*Trile; -循环体是求15的连乘积 I=I+1 -每求一次连乘积,循环变量I -加1。若I不超过5, ENDLOOP; -继续执行求连乘积循环,否则-结束求连乘循环,格式2举例: WHILE(I6)LOOP -I是循环变量,变化范围是16 sum=I+sum; -求16的和 I=I+1 -每求一次和,循环变量I加1,若 -I6条件满足, ENDLOOP; - 继续执行求和循环,否则结束求 - 和循环,

30、8. NEXT语句 NEXT语句是用在LOOP语句内部的语句,用来有条件地或无条件地终止当前循环迭代并开始下一次循环。其书写格式有四种,如表137所示。 9.EXIT语句 EXIT语句也是用在LOOP语句内部的语句,它是有条件地或无条件地跳出循环迭代。其书写格式有四种,如表138所示,表137 NEXT语句的四种格式,表138 EXIT语句的四种格式,10.过程调用语句 在VHDL中也有子程序,其含义与其他高级语言中的子程序概念相当。它可以反复调用,使用非常方便。 VHDL中的子程序有两种类型,即过程和函数。函数可以在结构体语句中直接调用,过程调用则要用过程调用语句调用。 书写格式: 过程名参

31、数表; 其功能是调用过程名指定的过程。 例如: mytest(sig1,var2,sig2); - 调用过程mytest,11.返回(RETURN)语句 RETURN语句只能用在函数或过程体内,用于函数的格式和用于过程的格式不同,所以在使用时应多加小心。 格式1: RETURN; 用于过程 其功能是结束当前最内层过程体,返回到上一级程序。 格式2: RETURN 表达式; 用于函数,表达式是结束执行函数体的惟一条件。 其功能是结束当前最内层函数,返回到上一级程序。函数只能用该语句返回到上一级程序,12.空操作(NULL)语句 书写格式: NULL; 其功能是不产生任何动作。其目的是使运行 流程

32、走到下一个语句,是等待的另一种形式,不 过等待的时间是固定的,13.3.2 并行语句 VHDL中的结构体语句部分(参见结构体一般格式) 可以由顺序语句组成, 或并行语句组成。 顺序语句的主要目的是用来实现详细内容的算法。 并行语句则基本上用来表示这个详细内容的内部连接关系。 并行语句区别于顺序语句的最大特点之一是:并行语句的书写顺序并不代表其执行的顺序,它们是并行执行的,VHDL中所包含的常用并行语句有以下几种: 进程(PROCESS)语句 信号赋值语句 断言(ASSERT)语句 过程调用语句 块(BLOCK)语句 生成(GENERATE)语句 元件例化语句,1.进程(PROCESS)语句 在

33、用原理图描述一个较复杂电路时,为了便于设计和调试,设计者往往会把整个电路分成若干个相对独立的模块进行描述。在用VHDL设计时,设计者同样也是采用这种描述思想,也就是将一个结构体分成若干个相对独立的模块来描述。 每一个相对独立的模块可以用四种不同的形式来描述,即一系列的顺序语句、块(BLOCK)语句、进程(PROCESS)语句和子程序(SUBPROGRAM)语句,子程序(SUBPROGRAM)语句又包含过程(PROCEDURE)语句和函数(FUNCTION)语句。 每一个相对独立的模块既可以用顺序语句来描述,也可以用并发语句来描述。然而,用多个进程(PROCESS)语句是结构体最基本的表示方法。

34、其中包含的所有进程之间的关系是并行的关系,进程语句书写格式: 进程名:PROCESS(敏感信号表); 说明区 BEGIN 进程的主体程序; 是一段用顺序语句表达的程序 ENDPROCESS; 其功能是完成进程的主体程序表达的功能,一个进程可以看作是一个无限循环,当进程的最后一条语句执行完毕之后,敏感信号表里的敏感信号之一发生变化,便又开始从该进程的第一条语句开始执行。如此反复循环。 在说明区里可以说明数据类型、子程序和变量。关于进程有两点需要说明。 (1)如果关键字PROCESS之后跟有敏感信号表,在进程的主体程序中决不允许再出现WAIT语句。因为敏感信号表等效于该进程语句内的最后一个语句是一

35、个隐含的“WAITON敏感信号表”的WAIT语句。 (2)一个进程可以被看作是一个程序,在一个进程中可以有过程语句,并且还可以调用子程序,2.信号赋值语句 在上一节中已经介绍了顺序语句的信号赋值语句,在此介绍并发语句的信号赋值语句。 一个并行信号赋值语句等效一个对该信号赋值的进程语句。并行信号赋值语句有三种不同格式,如表139所示,表139 并行信号赋值语句的三种格式,格式2:条件信号代入语句 信号量=表达式1 WHEN条件1 ELSE 表达式n-1 WHEN 条件n-1 ELSE 表达式n; 把满足条件对应的表达式的值赋给左边的信号量。若n-1个条件都不满足,就把表达式n的值赋给左边的信号量

36、,格式3:选择信号代入语句 信号量=表达式1 WHEN 条件1 表达式2 WHEN 条件2 表达式n WHEN 条件n; 把满足条件对应的表达式的值赋给左边的信号量,格式1的并行信号赋值语句与顺序信号赋值语句格式相同,功能相当。 格式2的条件信号代入语句与顺序语句中的IF语句对应,其区别是:条件信号代入语句不能嵌套,且每一个条件后一定要有关键字ELSE。一般说来,在用IF语句表达有困难时,才用它。 格式3的选择信号代入语句类似于顺序语句中的CASE语句,3.断言语句(ASSERT)和过程调用语句 断言语句(ASSERT)和过程调用语句与顺序语句中的断言语句(ASSERT)和过程调用语句格式相同

37、,功能相当。 断言语句(ASSERT)既可以作为顺序语句,又可作为并行语句。前者位于进程或过程之内,而后者位于进程或过程之外。断言语句主要用于程序仿真、调试中的人-机对话,断言语句的格式为: ASSERT 条件 REPORT 报告信息SEVERITY 出错级别 断言语句有十条使用规则。其中,REPORT 子句的默认报告信息为 Assertion Violation。SEVERITY 的默认出错级别为 error,4、生成语句 生成语句用来产生多个相同的结构和描述规则结构。 具有复制作用。有两种格式。 (1)FOR 语法的形式为: 生成标号:FOR 变量 IN 不连续区间 GENERATE 并发

38、处理的生成语句 END GENERATE 生成标号; (2)IF 语句的形式为: 生成标号:IF 条件 GENERATE 并发处理的生成语句 END GENERATE 生成标号,5、块语句,块(BLOCK)可以看成是结构体中的子模块,BLOCK 可以把许多并行语句包装在一起,BLOCK 语句的一般格式为: 块名:BLOCK (保护表达式) 类属子句 类属接口表; 端口子句 端口接口表; 块说明部分 BEGIN 并行语句A END BLOCK 块标号,6 包集合与库,库(Library)是经编译后的数据的集合,它存放包集合定义、实体定义、构造体定义和器件配置定义,库的种类 在 VHDL 语言中存

39、放的库大致可以归纳为五种:IEEE 库、STD库、ASIC 矢量库、WORK 库、用户定义的库。 库的使用 (1)库的说明 库在使用前一般的说明格式为: USE LIBRARY_name.package_name .ITEM.name (2)库说明的作用范围 从一个实体说明开始到它所属的构造体、配置为止,7、元器件配置 引入一种连接关系,将设计的实体定义为一个元件。 格式:COMPONENT 元件名 IS GENERIC (类属表); PORT(端口名表); END COMPONENT ; 元件名 PORT(端口名表); END COMPONENT,元件定义,元件连接,1)体内配置 体内配置是

40、指在结构体内部对所引用的元件用配置语句进行配置。其格式为:FOR 元件标号:元件名 USE ENTITY元件名,例:图a中所示的全加器,x、y、cin 依次表示被加数加数、进位输入;sum 和 cout 分别为和数与进位输入。图b为一种实现方案,全加器,x,y,cin,cout,sum,图 a,半加器,半加器,1,x y cin,cout,sum,图 b,P179 例,2)体外配置 体外配置是指在结构体外部对所引用的元件用配置语句进行配置。 体外配置说明的格式为: CONFIGURATION 配置名 OF 实体名 IS FOR 结构体名 配置语句; END FOR; END 配置名; P280

41、 例,直接例化 可以将元器件说明、例化、配置结合在一起,以使描述更为简洁,这称为直接例化,格式为: 元件符号:ENTITY 库名.实体名(结构体名) GENERIC MAP (类属映射表) PORT MAP (信号映射表); P281 例,13.4 VHDL基本逻辑电路设计实例 例1、与非门 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity yufeimen is port (a,b:in std_logic; y:ou

42、t std_logic); end yufeimen; architecture Behavioral of yufeimen is begin y=a nand b; end Behavioral,例2、异或门 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity yih is port (a,b:in std_logic; y:out std_logic); end yih; architecture Behaviora

43、l of yih is begin y=a xor b;-异或门语句 end Behavioral,例3、3-8译码器VHDL程序设计: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY decoder3_8 IS PORT(a,b,c,g1,g2,g3:IN STD_LOGIC; y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END decoder3_8; ARCHITECTURE rtl OF decoder3_8 IS SIGNAL indata:STD_LOGIC_VECTOR(2 DOWNTO 0); BEG

44、IN indata=c PROCESS(indata,g1,g2,g3) BEGIN IF(g1=1 AND g2=0 AND g3=0) THEN,CASE indata IS WHEN 000=yyyyyyyyy=XXXXXXXX; END CASE; ELSE y=11111111; END IF; END PROCESS; END rtl,例4、D锁存器的VHDL描述: LIBARAY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY d_latch IS PORT(clk,d:IN STD_LOGIC; q,nq:OUT STD_LOGIC); EN

45、D d_latch; ARCHITECTURE behav_dlatch OF d_latch IS BEGIN PROCESS(clk,d) BEGIN IF(clk=1) THEN q=d; nq=NOT d; END IF; END PROCESS; END behav_dlatch,例5、双向移位寄存器VHDL描述: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SRG IS PORT(DATA:IN STD_LOGIC_VECTOR(7 DOWNTO 0); SL_IN,SR_IN,RESET,CLK:IN STD_LOGIC;

46、MODE:IN STD_LOGIC_VECTOR(1 DOWNTO 0); Q:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); END SRG; ARCHITECTURE BEHAV_SRG OF SRG IS BEGIN PROCESS BEGIN WAIT ON CLK UNTIL RISING_EDGE(CLK,IF RESET=1 THEN QQQQ=DATA; -并行输入(同步预置) END CASE; END IF; END PROCESS; END BEHAV_SRG,例6、可逆计数器的VHDL描述 LIBRARY IEEE; USE IEEE.STD_

47、LOGIC-1164.ALL; ENTITY COUNTER IS POPT(CLK,RESET,LD,UP_DOWN:IN STD_LOGIC; DATA:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Q:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); BO.CO:OUT STD_LOGIC); END COUNTER; ARCHITECTURE BEHAV_COUNTER OF COUNTER IS BEGIN CO=1 WHEN (Q=“1001” AND UP_DOWN=1) ELSE 0 -进位输出的产生 BO=1 WHEN (Q=“00

48、00” AND UP_DOWN=0) ELSE 0; -借位输出的产生,PROCESS(CLK,RESET,LD) BEGIN IF(RESET=1) THEN Q=“0000”; -异步复位 ELSIF(LD=1) THEN Q=DATA; -异步预置 ELSIF( CLK=1)THEN IF(UP_DOWN=1)THEN Q=“0000” WHEN (Q=“1001”)ELSE Q+1; -加法计数 ELSE Q=“1001” WHEN (Q=“0000”)ELSE Q-1; -减法计数 END IF; END IF; END PROCESS; END BEHAV_COUNTER,例7(1

49、)利用一个布尔算符设计二选一多路转换器。 LIBRARY IEEE; USE IEEE std -logic.1164.all; ENTITY mux2to1 IS PORT(S:IN Stdlogic); Zero,One:IN Std -logic -Vector(7DOWNTO0); Y:OUT Std -logic -Vector(7DOWNTO0); END mux2to1 ARCHITECTURE behavior OF mux2to1 IS temp:Std-logic-Vector(7DOWNTO0); BEGIN Temp=(s,s,s,s,s,s,s,s); Y=(temp

50、 AND One)OR(NOT temp AND Zero); ENDbehavior,本例完成的功能是当S=0时,Y=Zero;当S=1时,Y=One。即用S来控制Y在端口One和端口Zero中二选一。 本例中的第5行程序是对端口的说明。它定义设计实体的外部接口,即定义外部引脚信号名称、信号流动模式和数据类型。其一般格式是: PORT( 端口名,端口名:模式数据类型; 端口名,端口名:模式数据类型); 其中,端口名就是赋予每个外部引脚的名称,其命名规则同标识符命名规则;模式是外部引脚的信号流动方向,VHDL提供了如下五种模式: (1)IN模式,称为输入,即信号从端口进入结构体内。 (2)OU

51、T模式,称为输出,即信号从结构体内流经端口输出。 (3)INOUT模式,称为双向模式。 (4)BUFFER模式,称为缓冲输出模式,即信号从结构体内流经端口输出,同时可反馈到结构体再被使用。 (5) LINKAGE模式,即不指定方向,无论哪一个方向都可连接,OUT、INOUT和BUFFER模式的区别: OUT模式仅允许信号从结构体内向外流动; INOUT模式既允许信号从结构体内向外流动,又允许信号从外向结构体内流动,还允许信号反馈到结构体内再使用; BUFFER模式只允许信号从结构体内向外流动,但允许信号反馈到结构体内再使用。本例中的第58行分别定义外引脚S、One、Zero和Y,信号S的数据类

52、型是Std -logic,信号One或信号Zero的数据类型是八位的Std -logic -Vector,它们的数据类型不同。 在介绍数据类型的时候,曾经提到过VHDL是一种强类型语言,故三者不能直接运算。为了能使三者进行运算,采用一个与信号One和信号Zero的数据类型相同的内部信号Temp,把Temp的每个位设置成等于信号S的值,见程序第13行。这样,三者就变换成为同类型的数据,它们就可以进行运算了,见程序第14行,例7(2) 利用并发语句设计二选一多路转换器。 LIBRARYIEEE; USE IEEE std -logic.1164.all; ENTITY mux2to1 IS POR

53、T( S:INStd logic); Zero,One:IN Std -logic -Vector(7DOWNTO0); Y:OUT Std -logic -Vector(7DOWNTO0); ENDmux2to1,结构体说明 ARCHITECTURE behavior OF mux2to1 IS -结构体名为behavior BEGIN Y=One WHEN(S=1)ELSE -条件信号代入语句,它是一条 Y=Zero; -并发语句,条件S=1为真 ENDbehavior; - Y=One,否则Y=Zero 本例的结构体是利用一条并发语句来描述二选一多路转换器的运算,例7(3) 利用进程语句

54、设计二选一多路转换器。 LIBRARY IEEE; USE IEEE std -logic.1164.all; ENTITY mux2to1 IS PORT( S:IN Std -logic; Zero,One:IN Std -logic -Vector(7DOWNTO0); Y:OUT Std -logic -Vector(7DOWNTO0); ENDmux2to1,结构体说明 ARCHITECTURE behavior OF mux2to1 IS -结构体名为behavior BEGIN Comb:PROCESS(S,Zero,One) -带敏感表的进程语句 BEGIN IF(S=1)TH

55、EN IF语句 Y=One; ELSE Y=Zero; ENDIF; ENDPROCESSComb; ENDbehavior,本例的结构体是利用一个进程来描述二选一多路转换器的运算,该进程中使用了信号赋值和IF语句等顺序语句。 以上是用三种不同的方法来实现一个二选一多路转换器的例子。在这三种不同的方法中,库和实体说明部分是完全相同的,只是结构体部分不同而已。这就让我们清楚地看到:同一实体可用多种方式来描述;各种方式之间的差别主要体现在结构体上;结构体既可以用顺序语句表达,也可以用并发语句表达,一般说来,结构体有三种表达方式: (1)结构描述:从硬件结构的角度来描述设计实体,即描述该设计实体由哪

56、些子元件组成,以及各元件之间的相互关系如何。这与系统的原理图描述方法很类似。它主要使用配置指定语句和元件例化语句来描述元件的类型及互连关系,如例7.1。 (2)行为描述:从功能的角度来描述设计实体,即描述设计实体能完成什么功能。它主要通过一系列的顺序语句和并行语句描述。其中,用并行语句来描述各模型算法之间的连接关系,如例7.3,3)数据流描述:又称RTL级方式,从数据的变换和传送的角度来描述设计实体。它主要使用并行的信号赋值语句,既显式地表示了该设计实体的行为,也隐式地表示了该设计实体的结构,如例7.2。以上是用VHDL描述组合电路的例子,下面再让我们看看几个用VHDL描述时序电路的例子,例8

57、 用VHDL描述上升沿D触发器。 LIBRARYIEEE; USEIEEEstd -logic.1164.all; ENTITY dff-logicIS PORT(d,clk:INStd-logic;q:OUTStd-logic); ENDdff -logic; ARCHITECTURE my-prom OF dff-logic IS BEGIN,d:PROCESS(d,clk) -line8,带敏感表的进程语句 BEGIN IF(clk=1)THEN q=d; ENDIF; ENDPROCESS1d; ENDmy -prom; 时序电路的结构体总是用进程方式来描述的,时钟信号应作为敏感信号,

58、如上例第8行程序。另外,还要对时钟信号触发边沿进行说明,如上例第10行程序说明上升沿触发,例9 带有异步复位、置位和时钟使能的八位二进制计数器。 LIBRARY IEEE; USEIEEE std-logic.1164.all; LIBRARY DATAIO; USE DATAIO.std-logic-OPS.all; ENTITY asyn cnd IS PORT(clk,ce,reset,preset,load:IN Stdlogic,d:IN Std-logic-Vector(7DOWNTO0); q:OUT Std-logic-Vector(7DOWNTO0); END asyn-cn

59、d; - 结构体说明 ARCHITECTURE test-prom OF asyn-cnd IS -结构体名为test-prom SIGNAL next,-q:Std-logic-Vector(7DOWNTO0); -定义内部信号next -q BEGIN,next -q=q+1; PROCESS(clk,reset,preset,load,d) BEGIN FOR I IN 00 TO FF LOOP IF(reset=1)OR(load=1ANDd(i)=0)THEN -复位条件 q(i)=0; ELSIF(preset=1)OR(load=1ANDd(i)=1)THEN -置位条件 q(i)=1,ELSE(rising-edge(clk)THEN -计数条件1:时-钟上升沿到 IF(ce=1)THEN -计数条件2:计数使能信号为1 q(i)=next -q(i);- 计数 ENDIF; ENDIF; ENDLOOP; ENDPROCESS; ENDtest -prom,在此例中,PORT语句定义clk时钟信号、ce计数使能信号、reset复位信号、preset置位信号、load置数控制信号、d(i)八位字长的置数输入端,q(i)八位字长的输出端的模式和数据类型

温馨提示

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

评论

0/150

提交评论