第4章硬件描述语言VHDL_第1页
第4章硬件描述语言VHDL_第2页
第4章硬件描述语言VHDL_第3页
第4章硬件描述语言VHDL_第4页
第4章硬件描述语言VHDL_第5页
已阅读5页,还剩98页未读 继续免费阅读

下载本文档

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

文档简介

1、第第7章章 硬件描述语言硬件描述语言VHDLVHDL 第第7章章 硬件描述语言硬件描述语言VHDL 7.1 VHDL模型的基本结构模型的基本结构 7.2 VHDL的基本元素的基本元素 7.3 VHDL的语句的语句 7.4 VHDL设计实例设计实例 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 7.1 VHDL模型的基本结构模型的基本结构 半加器是我们熟悉的器件,输入变量a和b表示两个加数,输出S和CO表示和及进位位。于是我们可以用如下逻辑函数式表示半加器: oS=(a+b) abC =ab第第7章章 硬件描述语言硬件描述语言VHDLVHDL 也可以用如表71所示的真值表来表示,还可以用

2、如图71(a)所示的逻辑图或用如图71(b)所示的逻辑符号表示之。 图71 半加器电路符号 (a)逻辑图;(b)逻辑符号1&1abSCo半加器SCOab第第7章章 硬件描述语言硬件描述语言VHDLVHDL 表71 半加器真值表 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 除上述三种表达方式外,现在我们还可以用VHDL来表达。即:1 halfadder is a half adder2 LIBRARYIEEE;3 USE IEEE.STD -LOGIC -1164.ALL;4 ENTITY halfadderIS5 PORT(a,b:INSTD -LOGIC;s,co:OUTS

3、TD -LOGIC);6 END halfadder;7 ARCHITECTURE halfOFhalfadderIS8 SIGNALc,d:STD -LOGIC;9 BEGIN第第7章章 硬件描述语言硬件描述语言VHDLVHDL 10 c=a OR b;11 d=a NAND b;12 co=NOT d;13 s=c AND d; S=(a+b)ab14 END half;第第7章章 硬件描述语言硬件描述语言VHDLVHDL 我们以VHDL术语作为学习VHDL的开始。 在VHDL中,一个设计单元被称为一个设计实体。它可以是一个简单的电路(如:一个与门、一个译码器或加法器等),也可以是一个复杂

4、的电路(如:一个微处理器或一个系统)。 如本例中的半加器就是一个设计实体。在VHDL中,由关键字、标识符、对象、符号和表达式按VHDL的语法规则构成的句子称为VHDL语句。而能完成一定功能的若干条VHDL语句就组成VHDL程序。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 关键字(又称保留字)是具有特殊含义的标识符。它是组成VHDL语句最基本的元素之一。用户不能把它作为自己创建的标识符。为了醒目和易于发现错误,在书写VHDL程序时,建议关键字用大写字母或黑体字母,而用户自己创建的标识符用小写字母或非黑体字母。本书用大写字母表示关键字,用小写字母表示用户自己创建的标识符。 在VHDL中,

5、任何一个设计实体都至少由实体说明和结构体说明两部分构成。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 实体说明是一个设计实体的外部视图。它对应传统的逻辑图表示法中的逻辑符号,它定义实体名称、类属、实体输入/输出端口和一些参数。实体说明以关键字ENTITY开始,以关键字END结束,它的一般格式是: ENTITY实体名IS GENERIC(类属参数说明); PORT(端口说明); 实体说明部分; BEGIN 实体语句部分; END实体名;第第7章章 硬件描述语言硬件描述语言VHDLVHDL 对于一个VHDL的初学者来说,在学习一般格式时,除要记住语句外,还要记住每行有没有标点符号和有没有用

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

7、URE结构体名OF实体名IS 说明区; 包括:内部信号、常数、数据类型和函数等的定义BEGIN 结构体语句部分;END结构体名; 有了上述的VHDL知识后,让我们一起来阅读上述半加器的程序,以求对VHDL程序有更进一步的认识。第1行以表示注释的双连线( )开始,故该行为注释行,告诉使用者以下是一个半加器程序。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 第2行以关键字LIBRARY开始,表示程序所用的库为IEEE。一般地,程序行以分号(;)结束。 第3行以关键字USE开始,以关键字ALL结束,表示程序中使用的数据类型是调用由库IEEESTD -LOGIC -1164提供的数据类型。 第

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

9、9行关键字BEGIN之后直至第14行为止是结构体语句部分,用来叙述设计的函数功能。本实例是一个半加器的VHDL程序,第10行的语义是信号c等于a或b的结果;第第7章章 硬件描述语言硬件描述语言VHDLVHDL 第11行的语义是d等于a和b的与非;第12行的语义是co等于 ,即co等于a和b的与;第13行的语义是s等于c和d的与,即 。 综上所述,表达一个设计实体的完整VHDL程序通常含有五个部分,如图72所示。ds=(a+b) ab第第7章章 硬件描述语言硬件描述语言VHDLVHDL 图72 VHDL程序基本结构 程序包库实体说明结构体配置设计实体第第7章章 硬件描述语言硬件描述语言VHDLV

10、HDL (1)实体(Entity)说明:描述设计实体的外部接口信号。 (2)结构体(Architecture):描述设计实体的内部结构和功能。 (3)配置(Configuration)说明:它是属性选项,描述层与层之间、实体说明与结构体之间的连接关系。比如高层设计需要将底层实体作为文件调用,这就要用到配置说明。 第第7章章 硬件描述语言硬件描述语言VHDLVHDL (4)库(Library)和程序包(Package):库是一种VHDL设计单元的特定集合,用于存放可重复使用的元件和数据类型说明。它可由用户生成,也可由ASIC芯片制造商提供。程序包是属性选项,用于存放各模块都能共享的数据类型、常数

11、、元件和子程序等,它通过编译后成为库。其中,实体说明、结构体和库是每一个VHDL程序必不可少的三大部分,而配置说明和程序包则是选项,它们的取舍视具体情况来定。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 7.2 VHDL的基本元素的基本元素 通过上节对VHDL程序基本结构的介绍,我们对如何用VHDL来描述一个设计实体有了一个框架性的认识。本节将对VHDL的基本元素加以简要介绍,以求掌握VHDL中需要的基本知识。第第7章章 硬件描述语言硬件描述语言VHDLVHDL VHDL是一门高级硬件描述语言,故它有一套自身的、严格的语法规则。可编程器件的开发软件只能识别按照这些语法规则编写VHDL程

12、序,因此学习VHDL的基本格式和基本元素就显得十分重要了。VHDL的基本元素包括:关键字、标识符、数据类型、对象、词法单元、表达式和运算符。 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 7.2.1 关键字 在VHDL语句的开始、结尾或中间过程都要用到关键字,它被赋予编译器能识别的特殊含义。在编写程序时用户不能把关键字用作为自己创建的标识符。为了便于阅读,一般用大写字母来写关键字。下面列出了VHDL所有的关键字。VHDL93中新引入的关键字以黑体形式表示。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 7.2.2 标识符的命名 在VHDL中,用户必须遵循VHDL标识符的命名规则来

13、创建标识符,否则就会出现因可编程开发软件不能识别创建的标识符而导致VHDL程序无法运行的后果。在此,我们只介绍VHDL87标识符的命名规则。有关VHDL93标识符的命名规则请参考有关资料。标识符中可使用的有效字符:26个大小写英文字母(az和AZ);10个数字(09)和下划线( -)。例如,2illegal%name被视为不合法的标识符,因为%不是有效字符。 标识符必须以英文字母开头。例如,2illegal -name被视为不合法的标识符,因为它以数字2开头,而不是以英文字母开头。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 标识符中下划线( -)的前后都必须有英文字母或数字,在一个标

14、识符中只能有一个下划线( -)。例如,illegal -和illegal-name被视为不合法的标识符,因为前者下划线( -)的后面没有英文字母或数字,后者有两个下划线( -)。标识符不区分大小写英文字母。例如,HALF -Adder和half -adder被视为同一标识符。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 7.2.3 数据类型 VHDL是一种强类型语言,即每一个对象具有一种类型且只能具有该类型的值。换句话说,施加于某对象上的操作必须与该对象的类型匹配。 在VHDL中,信号、变量和常数都要指定数据类型,而且VHDL的数据类型定义相当严格,不同类型之间的数据不能直接代入。即使

15、数据类型相同,位长不同时也不能直接代入。因此要正确使用VHDL,就必须理解各种数据类型的定义。 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 标准的数据类型由开发软件提供,共有10种,如表72所示。如果用户需要这10种以外的数据类型,则必须自行定义。用户可定义的数据类型共有五种,如表73所示。 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 表72 标准的数据类型 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 表73 用户定义的数据类型 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 7.2.4 对象 VHDL把信号、变量、常量和文件统称为对象。信号和常量都可以连续

16、赋值,而常量只能在它被说明的时候赋值(仅此一次)。VHDL93把文件也当作对象。文件可以以子程序进行读/写操作,但不可以通过赋值来更新文件的内容。 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 对象说明的格式为CONSTANT标识符表:子类型 =初值; 常数的说明格式VARIABLE标识符表:子类型 =初值; 变量的说明格式SIGNAL标识符表:子类型 =初值; 信号的说明格式FILE标识符表:子类型 =初值; 文件的说明格式第第7章章 硬件描述语言硬件描述语言VHDLVHDL 例如: CONSTANTrest1,rest2:TIME =10ns; 把标识符rest1和rest2定义为

17、常数,数据类型为物理型,其初值为10nsSIGNALclk:BIT; 把标识符clk定义为信号,数据类型为位第第7章章 硬件描述语言硬件描述语言VHDLVHDL 7.2.5 词法单元 1.注释 VHDL中的注释是以双连符( )开始直到本行末尾的一段文字。它是以文本形式对程序的说明,其目的是便于设计者和使用者阅读程序,但它不能被编码器识别。注释可以在程序中的任意位置标注,但总是以双连符( )表征,如前面学过的半加器VHDL程序的第一行和第13行中均有注释。双连符的右边文字均属于注释部分。如果注释文本很长需要延续到第二行,那么在第二行的行首也要用双连符( )表征。第第7章章 硬件描述语言硬件描述语

18、言VHDLVHDL 2.VHDL中的数字 在VHDL中使用的数字可以用十进制、二进制、八进制或十六进制表示。用八进制表示时数字前冠以基数说明符O,用二进制表示时数字前冠以基数说明符B,用十六进制表示时数字前冠以基数说明符X。例如,数字224用八进制表示为O340;用二进制表示为B11100000;用十六进制表示为XE0。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 3.字符 VHDL中的文字字符表示形式为:被单引号括起来的ASCII字符。如A、*、“。 4.符串 VHDL中的文字字符串表示形式为:被双引号括起来的图形字符序列(可以为空)。如“howareyou?”、“”等。 5.位串

19、VHDL中的位串表示形式为:被双引号括起来的扩展的数字序列,数字序列前冠以基数说明符。如: B“11110101” 长度为八的二进制数,等效245第第7章章 硬件描述语言硬件描述语言VHDLVHDL 6. VHDL语句中使用的标点符号 分号(;)是一条语句结束的标志,逗号(,)是对象的分隔符。冒号(:)和原点(.)也是VHDL语句中常用的标点符号,它们的用法在每条语句的一般格式里给出。在书写VHDL程序时,用错标点符号的情况时常会发生,所以大家在学习VHDL时,一定要注意语句中使用的标点符号。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 7.2.6 表达式与运算符 VHDL中的表达式和

20、其他程序设计语言中的表达式非常相似。一个表达式是由运算符把对象名、文字、函数调用及括起来的表达式连接起来的式子。VHDL的运算符可分为四组:算术运算符、关系运算符、逻辑运算符和其他运算符,如表74所示。其中,VHDL93引用的新运算符用黑体表示。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 表74 VHDL运算符 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 各运算符优先级排列顺序如下(同一行各运算符优先级相同):* ABS NOT 最高优先级*/MOD REM+(正号) -(负号)+-&SLL SLA SRL SRA ROL ROR = /= =AND OR NAND

21、 NOR XOR XNOR 最低优先级第第7章章 硬件描述语言硬件描述语言VHDLVHDL 几点说明: (1)关系运算符、=的两边数据类型必须相同,其结果为Boolean类型;=和/=的两边数据类型不必相同。 (2)连接运算符(&)用于位的连接,即把右边的内容接在左边内容之后形成一个新的数组。例如,四个位用连接运算符(&)连接起来就可以构成一个四位长度的位矢量;两个四位的位矢量用连接运算符(&)连接起来就可以构成一个八位长度的位矢量。连接操作也常用于字符串,如“VH”&“DL”的结果为“VHDL”;0&1的结果为01。第第7章章 硬件描述语言硬件描述语言

22、VHDLVHDL (3)移位关键字有四个,循环移位关键字有两个,我们应该留意它们之间的差别。图73是移位和循环移位运算符的语义示意图。 (4)VHDL表达式语法规定,一个表达中可含有两个或两个以上的AND运算符而不加括号。这一规定同样适用OR、XOR和XNOR运算符。但一个表达中含有两个或两个以上的NAND运算符一定要加括号。NOR和*运算符的规定同NAND运算符。另外,当一个表达式含有不同的运算符时,一定要用括号。 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 图73 移位和循环移位运算符的语义示意图LeftRightSLL(逻辑左移)SRL(逻辑右移)SLA(算术左移)SRA(算术

23、右移)值舍弃值填充值舍弃ROL(逻辑循环左移)ROR(逻辑循环右移)值填充值舍弃值舍弃第第7章章 硬件描述语言硬件描述语言VHDLVHDL 例如: e1 =a AND b AND c 正确 e2 =a XNOR b XNOR c 正确 e3 =a NOR b NOR c 错误 e4 =a NOR(b NOR c) 正确 e5 =a AND bOR c 错误 e5 =(a AND b)O R c 正确因此,如果一个表达式中含有多个运算符,在没有把握的时候,最明智的做法就是用括号。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 7.3 VHDL的语句的语句 我们知道,VHDL语句是由关键字、

24、标识符、对象、符号和表达式按VHDL的语法规则构成的句子,而VHDL程序则由完成一定功能的若干条VHDL语句构成。在VHDL中,若按语句执行的顺序对VHDL语句分类,可分为顺序语句和并行语句两类。顺序语句主要用来实现模型的算法,而并行语句则基本上用来表示连接关系。下面对这两类语句分别加以介绍。 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 7.3.1 顺序语句 顺序语句是包含在进程、函数或子程序中的语句,按书写顺序执行。它定义进程、函数或子程序所执行的算法。语句中所涉及到的系统行为有:时序流、控制、条件和迭代等。语句的功能有:算术运算、逻辑运算、信号和变量的赋值以及子程序的调用等。VH

25、DL中所包含的常用顺序语句有以下几种:第第7章章 硬件描述语言硬件描述语言VHDLVHDL 等待(WAIT)语句断言语句信号代入语句变量赋值语句IF语句CASE语句LOOP(循环)语句NEXT语句EXIT语句第第7章章 硬件描述语言硬件描述语言VHDLVHDL 10过程调用语句 11返回(RETURE)语句 12空操作(NULL)语句 下面对以上12种顺序语句的书写格式、功能及使用时的注意事项逐一加以介绍。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 1.等待(WAIT)语句 在仿真过程中,进程不是处于执行状态就是处于挂起状态。设计者可以利用WAIT语句把一个进程或子程序挂起。挂起的进

26、程或子程序恢复或再次执行的条件可以由WAIT语句设置。 表75给出了五种不同格式的WAIT语句。在VHDL中,WAIT语句有多种用途,如为综合指定各种输入、延迟进程的执行时间或动态修改进程的敏感量。 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 表75 WAIT语句的五种格式 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 2.断言语句 书写格式: ASSERT条件REPORT输出信息SEVERITY级别;其功能是检查条件为真或假。如果条件为真,该语句不起作用;如果条件为假,该语句把输出信息送到输出终端。关键字REPORT后跟的输出信息说明错误的原因;关键字SEVERITY后跟的

27、级别说明错误的严重程度。在VHDL中,错误严重程度分为四个级别:FAILURE、ERROR、WARING和NOTE。该语句为程序仿真和调试带来了极大的方便。 第第7章章 硬件描述语言硬件描述语言VHDLVHDL ASSERTreset=1 REPORT“Resettimedoutat1” SEVERITYERROR; 若信号reset不为1,就输出字符串“Resettimedoutat1”,其错误严重程度是 ERROR第第7章章 硬件描述语言硬件描述语言VHDLVHDL 3.信号代入语句 书写格式: 信号量=信号量表达式;其功能是把右边信号量表达式的值赋予给左边的信号量。例如: X=a; 信号

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

29、IF语句 书写格式:IF条件1THEN 顺序语句; ELSIF条件2THEN 此处的关键字为ELSIF,而不是ELSEIF 顺序语句; 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 其功能是根据所指定的条件来确定执行的语句。从条件1到条件n逐个进行判断,如果某个条件成立,就执行该条件后跟的顺序语句。如果所有设置的条件都不满足,则执行最后一个ELSE和ENDIF之间的顺序语句。例如:第第7章章 硬件描述语言硬件描述语言VHDLVHDL IF(sel=“00”)THEN 如果sel=“00”满足, Y=input(0); 将input(0)的值赋给Y ELSIF(sel=“01”)THEN

30、 如果sel=“01”满足, Y=input(1); 将input(1)的值赋给Y ELSIF(sel=“10”)THEN 如果sel=“10”满足, Y=input(2); 将input(2)的值赋给Y ELSE 如果sel=“00”,sel=“10”,sel=“10” Y顺序语句; WHENOTHERS=顺序语句; ENDCASE; 其中,关键字WHEN后跟的条件表达式有三种不同的形式,即:第第7章章 硬件描述语言硬件描述语言VHDLVHDL WHEN值=顺序语句; WHEN值值值值=顺序语句; WHEN值TO值=顺序语句; 其功能是当CASE和IS之间的表达式的取值满足制定的条件表达式的

31、值时,程序将执行该条件表达式后跟的由符号=所指定的顺序语句。条件表达式的值可以是一个值,或是多个值的“或”关系,或是一个值的取值范围,或表示其他所有的默认值。第第7章章 硬件描述语言硬件描述语言VHDLVHDL CASE语句是选择执行多个序列中的其中之一,故通常用来描述总线、编码或译码功能。虽然IF语句也有类似的功能,但CASE语句的可读性好,阅读者很容易找出条件与动作的对应关系。例如:第第7章章 硬件描述语言硬件描述语言VHDLVHDL CASEindataIS WHEN“000”=yyy=“XXXXXXX”; 当信号indata不为000或001时,y=“XXXXXXX”ENDCASE;第

32、第7章章 硬件描述语言硬件描述语言VHDLVHDL 7.循环(LOOP)语句 LOOP语句与其他高级语言中的循环语句一样,使程序能进行有规则的循环,循环的次数受迭代算法控制。其语句书写格式有两种,如表76所示。 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 表76 LOOP语句的两种格式 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 格式1举例:FORIIN1TO5LOOP 循环变量I的变化范围是15 Trile =I*Trile; 循环体是求15的连乘积 I=I+1 每求一次连乘积,循环变量I加1。若I不超过5,ENDLOOP; 继续执行求连乘积循环,否则结束求连乘循环第第7

33、章章 硬件描述语言硬件描述语言VHDLVHDL 格式2举例: WHILE(I6)LOOP I是循环变量,变化范围是16 sum =I+sum; 求16的和 I=I+1 每求一次和,循环变量I加1,若I6条件满足, ENDLOOP; 继续执行求和循环,否则结束求和循环第第7章章 硬件描述语言硬件描述语言VHDLVHDL 8. NEXT语句 NEXT语句是用在LOOP语句内部的语句,用来有条件地或无条件地终止当前循环迭代并开始下一次循环。其书写格式有四种,如表77所示。 9.EXIT语句 EXIT语句也是用在LOOP语句内部的语句,它是有条件地或无条件地跳出循环迭代。其书写格式有四种,如表78所示

34、。 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 表77 NEXT语句的四种格式 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 表78 EXIT语句的四种格式 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 10.过程调用语句 在VHDL中也有子程序,其含义与其他高级语言中的子程序概念相当。它可以反复调用,使用非常方便。VHDL中的子程序有两种类型,即过程和函数。函数可以在结构体语句中直接调用,过程调用则要用过程调用语句调用。 书写格式: 过程名参数表; 其功能是调用过程名指定的过程。例如: mytest(sig1,var2,sig2); 调用过程mytest第第7章章

35、硬件描述语言硬件描述语言VHDLVHDL 11.返回(RETURN)语句 RETURN语句只能用在函数或过程体内,用于函数的格式和用于过程的格式不同,所以在使用时应多加小心。 格式1: RETURN; 用于过程 其功能是结束当前最内层过程体,返回到上一级程序。 格式2: RETURN表达式; 用于函数,表达式是结束执行函数体的惟一条件 其功能是结束当前最内层函数,返回到上一级程序。函数只能用该语句返回到上一级程序。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 12.空操作(NULL)语句 书写格式: NULL; 其功能是不产生任何动作。其目的是使运行流程走到下一个语句,是等待的另一种形

36、式,不过等待的时间是固定的。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 7.3.2 并行语句 VHDL中的结构体语句部分(参见结构体一般格式)既可以由一些顺序语句组成,也可由一个或多个并行语句组成。如果我们说结构体描述一个设计实体内部的详细内容的话,那么,顺序语句的主要目的是用来实现这个详细内容的算法,而并行语句则基本上用来表示这个详细内容的内部连接关系。并行语句区别于顺序语句的最大特点之一是:并行语句的书写顺序并不代表其执行的顺序,它们是并行执行的。第第7章章 硬件描述语言硬件描述语言VHDLVHDL VHDL中所包含的常用并行语句有以下几种:进程(PROCESS)语句信号赋值语句

37、断言(ASSERT)语句过程调用语句块(BLOCK)语句生成(GENERATE)语句元件例化语句第第7章章 硬件描述语言硬件描述语言VHDLVHDL 1.进程(PROCESS)语句 在用原理图描述一个较复杂电路时,为了便于设计和调试,设计者往往会把整个电路分成若干个相对独立的模块进行描述。在用VHDL设计时,设计者同样也是采用这种描述思想,也就是将一个结构体分成若干个相对独立的模块来描述。每一个相对独立的模块可以用四种不同的形式来描述,即一系列的顺序语句、块(BLOCK)语句、进程(PROCESS)语句和子程序(SUBPROGRAM)语句。 第第7章章 硬件描述语言硬件描述语言VHDLVHDL

38、 子程序(SUBPROGRAM)语句又包含过程(PROCEDURE)语句和函数(FUNCTION)语句。换句话说,每一个相对独立的模块既可以用顺序语句来描述,也可以用并发语句来描述。然而,用多个进程(PROCESS)语句是结构体最基本的表示方法。其中包含的所有进程之间的关系是并行的关系。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 进程语句书写格式: 进程名:PROCESS(敏感信号表); 说明区 BEGIN 进程的主体程序; 是一段用顺序语句表达的程序 ENDPROCESS;其功能是完成进程的主体程序表达的功能。 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 一个进程可以看作

39、是一个无限循环,即在模拟期间,当进程的最后一条语句执行完毕之后,敏感信号表里的敏感信号之一发生变化,便又开始从该进程的第一条语句开始执行。如此反复循环。另外,在说明区里可以说明数据类型、子程序和变量。关于进程有两点需要说明。其一,如果关键字PROCESS之后跟有敏感信号表,那么在进程的主体程序中决不允许再出现WAIT语句。因为敏感信号表等效于该进程语句内的最后一个语句是一个隐含的“WAITON敏感信号表”的WAIT语句。其二,一个进程可以被看作是一个程序,在一个进程中可以有过程语句,并且还可以调用子程序。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 2.信号赋值语句 在上一节中已经介绍

40、了顺序语句的信号赋值语句,在此介绍并发语句的信号赋值语句。一个并行信号赋值语句等效一个对该信号赋值的进程语句。并行信号赋值语句有三种不同格式,如表79所示。 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 表79 并行信号赋值语句的三种格式 第第7章章 硬件描述语言硬件描述语言VHDLVHDL 格式2:条件信号代入语句 信号量=表达式1WHEN条件1ELSE 表达式n-1WHEN条件n-1ELSE 表达式n; 把满足条件对应的表达式的值赋给左边的信号量。若n-1个条件都不满足,就把表达式n的值赋给左边的信号量第第7章章 硬件描述语言硬件描述语言VHDLVHDL 格式3:选择信号代入语句信

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

42、用语句与顺序语句中的断言语句(ASSERT)和过程调用语句格式相同,功能相当。在此不再赘述。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 7.4 VHDL设计实例设计实例 本节将通过一些简单的例子,向读者介绍用VHDL程序描述一个设计实体的要求和格式,以及用并发语句和顺序语句来描述组合电路和时序电路的设计思想,从而使读者对用VHDL进行电路设计有一个整体的认识。不过在此再次声明:本节仅仅只是VHDL的一个入门,若在应用可编程器件FPGA或CPLD设计电子系统时,要用VHDL编程的话,还有很多技巧和实际应用知识,届时请读者参考其他有关书籍。第第7章章 硬件描述语言硬件描述语言VHDLVH

43、DL 【例7.1】 利用一个布尔算符设计二选一多路转换器。LIBRARYIEEE; line1,库说明USEIEEEstd -logic.1164.all; line2,调用库IEEE 实体说明 line3,注释行ENTITYmux2to1IS line4,实体名为mux2to1 PORT(S:INStd -logic; line5,端口说明语句。端口S的模式为IN,第第7章章 硬件描述语言硬件描述语言VHDLVHDL 其数据类型为Std -logic Zero,One:INStd -logic -Vector(7DOWNTO0); line6,端口Zero和One的模式为IN,其数据类 型为

44、Std -logic -Vector,位长是八 Y:OUTStd -logic -Vector(7DOWNTO0); line7,端口Y的模式为OUT, 其数据类型为Std -logic -Vector,位长是八ENDmux2to1; line8 结构体说明 line9,注释行第第7章章 硬件描述语言硬件描述语言VHDLVHDL ARCHITECTUREbehaviorOFmux2to1IS line10,结构体名为behavior temp:Std -logic -Vector(7DOWNTO0); line11,信号说明语句。定义信号temp 的数据类型为Std -logic -Vecto

45、r,位长为八BEGIN line12 Temp=(s,s,s,s,s,s,s,s); line13 Y=(tempANDOne)OR(NOTtempANDZero); line14ENDbehavior; line15第第7章章 硬件描述语言硬件描述语言VHDLVHDL 本例完成的功能是当S=0时,Y=Zero;当S=1时,Y=One。即用S来控制Y在端口One和端口Zero中二选一。 本例中的第5行程序是对端口的说明。它定义设计实体的外部接口,即定义外部引脚信号名称、信号流动模式和数据类型。其一般格式是: PORT( 端口名,端口名:模式数据类型; 端口名,端口名:模式数据类型); 第第7章

46、章 硬件描述语言硬件描述语言VHDLVHDL 其中,端口名就是赋予每个外部引脚的名称,其命名规则同标识符命名规则;模式是外部引脚的信号流动方向。VHDL提供了如下五种模式: (1)IN模式,称为输入,即信号从端口进入结构体内。 (2)OUT模式,称为输出,即信号从结构体内流经端口输出。 (3)INOUT模式,称为双向模式。 (4)BUFFER模式,称为缓冲输出模式,即信号从结构体内流经端口输出,同时可反馈到结构体再被使用。第第7章章 硬件描述语言硬件描述语言VHDLVHDL (5) LINKAGE模式,即不指定方向,无论哪一个方向都可连接。 OUT、INOUT和BUFFER模式的区别: OUT

47、模式仅允许信号从结构体内向外流动;INOUT模式既允许信号从结构体内向外流动,又允许信号从外向结构体内流动,还允许信号反馈到结构体内再使用; BUFFER模式只允许信号从结构体内向外流动,但允许信号反馈到结构体内再使用。本例中的第58行分别定义外引脚S、One、Zero和Y。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 信号S的数据类型是Std -logic,信号One或信号Zero的数据类型是八位的Std -logic -Vector,它们的数据类型不同。在介绍数据类型的时候,曾经提到过VHDL是一种强类型语言,故三者不能直接运算。为了能使三者进行运算,采用一个与信号One和信号Ze

48、ro的数据类型相同的内部信号Temp,把Temp的每个位设置成等于信号S的值,见程序第13行。这样,三者就变换成为同类型的数据,它们就可以进行运算了,见程序第14行。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 【例7.2】 利用并发语句设计二选一多路转换器。LIBRARYIEEE; 库说明USEIEEEstd -logic.1164.all; 调用库IEEE 实体说明ENTITYmux2to1IS 实体名为mux2to1 PORT( S:INStd -logic;Zero,One:INStd -logic -Vector(7DOWNTO0);Y:OUTStd -logic -Vect

49、or(7DOWNTO0);ENDmux2to1;第第7章章 硬件描述语言硬件描述语言VHDLVHDL 结构体说明ARCHITECTUREbehaviorOFmux2to1IS 结构体名为behavior BEGIN Y=OneWHEN(S=1)ELSE 条件信号代入语句,它是一条 Y=Zero; 并发语句,条件S=1为真ENDbehavior; Y=One,否则Y=Zero 本例的结构体是利用一条并发语句来描述二选一多路转换器的运算。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 【例7.3】 利用进程语句设计二选一多路转换器。 LIBRARYIEEE; 库说明USEIEEEstd -l

50、ogic.1164.all; 调用库IEEE 实体说明ENTITYmux2to1IS 实体名为mux2to1 PORT( S:INStd -logic;Zero,One:INStd -logic -Vector(7DOWNTO0);第第7章章 硬件描述语言硬件描述语言VHDLVHDL Y:OUTStd -logic -Vector(7DOWNTO0);ENDmux2to1; 结构体说明ARCHITECTUREbehaviorOFmux2to1IS 结构体名为behavior BEGIN Comb:PROCESS(S,Zero,One) 一个带敏感表的进程语句 BEGIN IF(S=1)THEN

51、 IF语句第第7章章 硬件描述语言硬件描述语言VHDLVHDL Y=One; ELSE Y=Zero; ENDIF; ENDPROCESSComb;ENDbehavior; 本例的结构体是利用一个进程来描述二选一多路转换器的运算,该进程中使用了信号赋值和IF语句等顺序语句。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 以上是用三种不同的方法来实现一个二选一多路转换器的例子。在这三种不同的方法中,库和实体说明部分是完全相同的,只是结构体部分不同而已。这就让我们清楚地看到:同一实体可用多种方式来描述;各种方式之间的差别主要体现在结构体上;结构体既可以用顺序语句表达,也可以用并发语句表达。第第7章章 硬件描述语言硬件描述语言VHDLVHDL 一般说来,结构体有三种表达方式: (1)结构描述:从硬件结构的角度来描述设计实体,即描述该设计实体由哪些子元件组成,以及各元件之间的相互关系如何。这与系统的原理图描述方法很类似。它主要使用配置指定语句和元件例化语句来描述元件的类型及互连关系,如例7.1。 (2)行为描述:从功能的角度来描述设计实体,即描述设计实体能完成什么功能。它主要通过一系列的顺序语句和并行语句描述。其中,用并行语句来描述各模型算法之间的连接关系,如例7.3。第第7章

温馨提示

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

评论

0/150

提交评论