第5章VHDL设计深入课件电子教案幻灯片.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第5章VHDL设计深入课件电子教案幻灯片.ppt》由会员分享,可在线阅读,更多相关《第5章VHDL设计深入课件电子教案幻灯片.ppt(76页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、LOGOEDAEDA技术与技术与VHDLVHDL实用教程实用教程作者作者:苏莉萍苏莉萍 陈东陈东 廖超平廖超平第第5章章 VHDL设计深入设计深入LOGOEDAEDA技术与技术与VHDLVHDL实用教程实用教程作者作者:苏莉萍苏莉萍 陈东陈东 廖超平廖超平 要求要求理理解解VHDL语语言言的的一一些些高高级级特特性性与与方方法法,提提高高运运用用VHDL分析、设计电路的能力。分析、设计电路的能力。知识点知识点理解理解VHDL子程序和块语句的应用子程序和块语句的应用进一步理解进一步理解VHDL库与程序包的应用库与程序包的应用理解理解Quartus II的的HDL设计中的设计中的LPM函数的应用函
2、数的应用理解理解VHDL层次化文件设计层次化文件设计 重点和难点重点和难点VHDL块语句和子程序的应用块语句和子程序的应用理解理解Quartus II的的HDL设计中的设计中的LPM函数的应用函数的应用VHDL层次化文件设计层次化文件设计 EDAEDA技术与技术与VHDLVHDL实用教程实用教程作者作者:苏莉萍苏莉萍 陈东陈东 廖超平廖超平引引 言言 本本章章在在第第四四章章的的基基础础上上,对对Quartus II的的VHDL文文本本输输入入设设计计法法作作进进一一步步的的讨讨论论。本本章章主主要要讨讨论论VHDL文文本本输输入入法法中中的的子子程程序序与与子子程程序序调调用用语语句句、VH
3、DL库库与与程程序序包包、块块语语句句结结构构、VHDL设设计计中中LPM函函数数的的应应用和用和 VHDL层次化文件设计。层次化文件设计。EDAEDA技术与技术与VHDLVHDL实用教程实用教程作者作者:苏莉萍苏莉萍 陈东陈东 廖超平廖超平第五章第五章 VHDL设计深入设计深入深入深入VHDL程序结构程序结构 5.1VHDL层次化文件设计层次化文件设计5.3VHDL设计中设计中LPM函数的应用函数的应用5.25.1 深入深入VHDL程序结构程序结构 一、子程序与子程序调用语句一、子程序与子程序调用语句 1.子程序的一般特点子程序的一般特点 子程序是一个子程序是一个VHDL程序模块,它内部程序
4、模块,它内部由顺序语句组成,可把需要重复完成的设计由顺序语句组成,可把需要重复完成的设计工作写成子程序,这样可以在需要的地方多工作写成子程序,这样可以在需要的地方多次调用。次调用。子程序有两种类型,即函数和过程。函数子程序有两种类型,即函数和过程。函数的调用只能返回一个值,而过程可以不返回任的调用只能返回一个值,而过程可以不返回任何值,也可以返回多个值。在函数的接口中,何值,也可以返回多个值。在函数的接口中,所有参数都是输入参数,而过程有输入参数、所有参数都是输入参数,而过程有输入参数、输出参数和双向参数。函数通常作为表达式的输出参数和双向参数。函数通常作为表达式的一部分,而过程则一般被用作一
5、种语句结构。一部分,而过程则一般被用作一种语句结构。函数通常作为语句的一部分调用,而过程可以函数通常作为语句的一部分调用,而过程可以单独存在。单独存在。在子程序体可以有返回语句,用来结束当在子程序体可以有返回语句,用来结束当前子程序体的执行。其语句格式如下:前子程序体的执行。其语句格式如下:RETURN 表达式表达式;返回语句用于函数时,必须有表达式,只返回语句用于函数时,必须有表达式,只能并且必须返回一个值。每一函数必须至少能并且必须返回一个值。每一函数必须至少包含一个以上的返回语句,但是在函数调用包含一个以上的返回语句,但是在函数调用时,只有其中一个返回语句可以将值带出。时,只有其中一个返
6、回语句可以将值带出。返回语句用于过程时,表达式缺省,不返回返回语句用于过程时,表达式缺省,不返回任何值。任何值。VHDL子程序具有可重载的特性,即允许子程序具有可重载的特性,即允许有许多个重名的子程序,但这些子程序的参有许多个重名的子程序,但这些子程序的参数类型及返回值数据类型是不同的,开发工数类型及返回值数据类型是不同的,开发工具根据子程序的参数类型及返回值数据类型具根据子程序的参数类型及返回值数据类型来区分各个重载的子程序。来区分各个重载的子程序。重点提示重点提示 综合后的子程序将映射成目标芯片中综合后的子程序将映射成目标芯片中的一个相应的电路模块,且每一次调用的一个相应的电路模块,且每一
7、次调用又将在硬件结构中产生具有相同结构的又将在硬件结构中产生具有相同结构的不同模块,这一点与普通的软件中调用不同模块,这一点与普通的软件中调用子程序有很大的不同。子程序有很大的不同。2.2.函数函数 (1)(1)函数及声明函数及声明 函数是用来描述重复使用的返回单一函数是用来描述重复使用的返回单一值的顺序算法的子程序。函数中应至少有值的顺序算法的子程序。函数中应至少有一个返回语句,通过其中一个返回语句返一个返回语句,通过其中一个返回语句返回所要求返回的值。函数声明分函数首声回所要求返回的值。函数声明分函数首声明和函数体声明两部分,同一个函数的函明和函数体声明两部分,同一个函数的函数首和函数体应
8、具有相同的名字。数首和函数体应具有相同的名字。函数首的声明格式如下:函数首的声明格式如下:FUNCTION 函数名函数名(参数表参数表)RETURN 数据类型;数据类型;函数体声明函数体声明格式格式如下:如下:FUNCTION 函数名函数名(参数表参数表)RETURN 数据类型数据类型 IS 说明部分说明部分;BEGIN 顺序语句;顺序语句;END FUNCTION 函数名;函数名;函数首是由函数名、参数表和返回值的函数首是由函数名、参数表和返回值的数据类型三部分组成。函数名需放在关键词数据类型三部分组成。函数名需放在关键词FUNCTION之后,它可以是普通的标识符,之后,它可以是普通的标识符
9、,也可以是运算符,当是运算符时必须加上双也可以是运算符,当是运算符时必须加上双引号,这是运算符的重载。引号,这是运算符的重载。函数的参数表中的参数只能是函数的参数表中的参数只能是IN模式,模式,用来定义输入值,它只能是信号或常数,参用来定义输入值,它只能是信号或常数,参数名需放在关键词数名需放在关键词CONSANT或或SIGNAL之之后,若没有特别的说明,则参数被默认为常后,若没有特别的说明,则参数被默认为常数。数。信号或常数的数据类型不能是类似信号或常数的数据类型不能是类似“STD_LOGIC_VECTOR(7 DOWNTO 0)”或或“INTEGER RANGE 3 DOWNTO 0”的加
10、的加范围限制的形式,只能使用类似范围限制的形式,只能使用类似STD_LOGIC_VECTOR和和INTEGER的的非限制的形式。非限制的形式。下面是三个不同的函数首声明例子:下面是三个不同的函数首声明例子:FUNCTION FUNC1(A,B,C:REAL)RETURN REAL;-参量前没注明参量前没注明CONSANT或或SIGNAL默认为常数。默认为常数。FUNCTION “*”(CONSANT A,B:INTEGER)RETURN INTEGER;-注意重载运算符函数注意重载运算符函数名名*要用引号括起来。要用引号括起来。FUNCTION AS2 (SIGNAL IN1,IN2:REAL
11、)RETURN REAL;-注意信号参量前要注明注意信号参量前要注明SIGNAL。函数体的说明部分包括对数据类型、函数体的说明部分包括对数据类型、常量、变量等的局部说明,其顺序语句部常量、变量等的局部说明,其顺序语句部分则是描述用以完成规定算法或者转换的分则是描述用以完成规定算法或者转换的顺序语句,通常函数体内的顺序语句部分顺序语句,通常函数体内的顺序语句部分含有返回语句含有返回语句:RETURN表达式,用来在表达式,用来在该处返回所要求返回的值。函数体的说明该处返回所要求返回的值。函数体的说明以关键词以关键词END FUNCTION以及函数名结以及函数名结尾。一旦函数被调用,就将执行函数体内
12、尾。一旦函数被调用,就将执行函数体内的顺序语句部分的语句。的顺序语句部分的语句。v下面是一个函数体声明的例子:下面是一个函数体声明的例子:FUNCTION SAM(x,y,z:BIT)RETURN BIT IS -定义函数定义函数SAM,该函数无函数首,该函数无函数首 BEGIN RETURN(x OR z)AND y;END FUNCTION SAM;(2 2)函数声明的地方函数声明的地方 可在结构体的声明部分、进程的声明部分可在结构体的声明部分、进程的声明部分或程序包中声明函数。或程序包中声明函数。在结构体或进程中声明函数,只能在结构在结构体或进程中声明函数,只能在结构体或进程中调用函数,
13、而在程序包中声明函数体或进程中调用函数,而在程序包中声明函数则可通过声明引用程序包,在不同的实体的各则可通过声明引用程序包,在不同的实体的各个结构体内的调用函数。个结构体内的调用函数。(3)函数的调用 例 5.1 library ieee;use ieee.std_logic_1164.all;entity dec3_8 is port(a:in std_logic_vector(2 downto 0);y:out std_logic_vector(7 downto 0);end dec3_8;architecture a of dec3_8 is function to_integer(ar
14、g:std_logic_vector)return integer isvariable temp:natural:=0;variable j:natural:=arglength-1;-arglength是是arg的位长的位长VHDL语言不区分大小写语言不区分大小写begin if arglength=32 then return temp;end if;-不能超过整数范围不能超过整数范围for i in argrange loopif arg(i)=1 then temp:=temp+2*j;-某一位不为零,则贡献一部分和某一位不为零,则贡献一部分和end if;if j0 then j:
15、=j-1;end if;end loop;return temp;end function to_integer;beging1:for k in 7 downto 0 generatey(k)a)。函数调用格式如下:函数调用格式如下:函数名函数名 (实际函数参数表)(实际函数参数表)其中函数参数表可以是位置连接映射形式其中函数参数表可以是位置连接映射形式(a1,a2,.an)或者指名连接映射形式或者指名连接映射形式(x1=a1,x2=a2,.xn=an)。3.过程过程 (1)过程及其声明过程及其声明 在在VHDL源代码中,如果在多处出现重复的模源代码中,如果在多处出现重复的模块,可使用过程来
16、描述。过程声明分过程首声块,可使用过程来描述。过程声明分过程首声明和过程体声明两部分,同一个过程的过程首明和过程体声明两部分,同一个过程的过程首和过程体应具有相同的名字。和过程体应具有相同的名字。过程首的声明格式如下:过程首的声明格式如下:PROCEDURE 过程名过程名(参数表参数表);过程体的声明格式如下:过程体的声明格式如下:PROCEDURE 过程名过程名(参数表参数表)IS 说明部分说明部分;BEGIN 顺序语句顺序语句;END PROCEDURE 过程名过程名;过程首由过程名和参数表组成。参数过程首由过程名和参数表组成。参数表用于对常数、变量和信号三类形式参量表用于对常数、变量和信
17、号三类形式参量作出说明,并用关键词作出说明,并用关键词IN、OUT和和INOUT定义这些参数的信息的流向。如果只定义定义这些参数的信息的流向。如果只定义了了IN模式而未定义形式参量的数据对象类模式而未定义形式参量的数据对象类型,则默认为常量;若只定义了型,则默认为常量;若只定义了INOUT或或OUT,则默认形式参量是变量。,则默认形式参量是变量。下面是过程首声明的例子:下面是过程首声明的例子:PROCEDURE PRO1(SIGNAL a,b:INOUT BIT);PROCEDURE PRO2(CONSTANT a1:IN INTEGER;VARIABLE b1:OUT INTEGER);PR
18、OCEDURE PRO3(SIGNAL y:OUT BIT);过程体中的说明部分的各种定义只能使过程体中的说明部分的各种定义只能使用于过程体内部。过程体的顺序语句部分可用于过程体内部。过程体的顺序语句部分可以包含任何顺序执行的语句,包括以包含任何顺序执行的语句,包括WAIT语语句。但如果一个过程是在进程中调用的,且句。但如果一个过程是在进程中调用的,且这个进程已列出了敏感参量表,则不能在此这个进程已列出了敏感参量表,则不能在此过程中使用过程中使用WAIT语句。语句。v下面是过程体声明的例子:下面是过程体声明的例子:PROCEDURE halfsub(SIGNAL a,b:IN BIT;SIGN
19、AL s,c:OUT BIT)IS BEGIN s=a XOR b AFTER 10 ns;c=(NOT a)AND b AFTER 10 ns;END PROCEDURE halfsub;PROCEDURE orgate(SIGNAL a1,b1:IN BIT;SIGNAL o1:OUT BIT)IS BEGIN o1a1,x2=a2,xn=an)。)。标号标号:过程名过程名 (实际函数参数表实际函数参数表););二、二、VHDL库与程序包库与程序包 VHDL库库(library)是用来存储编译好的是用来存储编译好的VHDL设计文件的仓库。常见的库有设计文件的仓库。常见的库有IEEE库、库、
20、STD库、库、ASIC矢量库、矢量库、WORK库和用户自定义库。库和用户自定义库。VHDL库中存放的库中存放的VHDL设计文件包含一个或多设计文件包含一个或多个个VHDL设计单元,这些设计单元可以是实体声设计单元,这些设计单元可以是实体声明、结构体、配置声明、程序包声明和程序包体明、结构体、配置声明、程序包声明和程序包体等。下面重点介绍程序包声明、程序包体和各种等。下面重点介绍程序包声明、程序包体和各种VHDL设计单元的特点及其在文件中的组织和库设计单元的特点及其在文件中的组织和库中存储。中存储。(一)程序包(一)程序包 程序包包括程序包声明和程序包体两部分。程序包包括程序包声明和程序包体两部
21、分。1.程序包声明程序包声明 程序包声明亦称程序包首,是用来进行一系程序包声明亦称程序包首,是用来进行一系列共用的声明。列共用的声明。在在VHDL设计文件中设计文件中,除了实体声明、结构体除了实体声明、结构体等设计单元外,还有程序包声明、程序包体这两等设计单元外,还有程序包声明、程序包体这两种设计单元。一个程序包声明和与它对应的程序种设计单元。一个程序包声明和与它对应的程序包体一起保存了一些经常用到的或在一个效大的包体一起保存了一些经常用到的或在一个效大的工程项目中许多文件要用到的已定义的常数、数工程项目中许多文件要用到的已定义的常数、数据类型、元件调用说明以及子程序接口等内容。据类型、元件调
22、用说明以及子程序接口等内容。程序包声明包含一系列可供其他设计单程序包声明包含一系列可供其他设计单元共享的声明,它定义了程序包的接口,即元共享的声明,它定义了程序包的接口,即定义了对其设计单元可见的条目。其声明格定义了对其设计单元可见的条目。其声明格式如下:式如下:PACKAGE 程序包名程序包名 IS 程序包首声明部分程序包首声明部分 END PACKAGE 程序包名程序包名;2.2.程序包体程序包体 程序包体用来存储在相应的程序包声明程序包体用来存储在相应的程序包声明中声明了的函数或过程的定义即函数或过程中声明了的函数或过程的定义即函数或过程体,也可以用来存储出现的相应的程序包声体,也可以用
23、来存储出现的相应的程序包声明中的完整的常量声明。程序包体总是与程明中的完整的常量声明。程序包体总是与程序包声明相对应的,并且一个程序包声明只序包声明相对应的,并且一个程序包声明只能对应一个程序包体。程序包声明与对应一能对应一个程序包体。程序包声明与对应一个程序包体的名字应相同。个程序包体的名字应相同。其格式如下:其格式如下:PACKAGE BODY 程序包名程序包名 IS 程序包体说明部分程序包体说明部分 程序包体内容部分程序包体内容部分 END PACKAGE BODY 程序包名程序包名;(二)各种(二)各种VHDL设计单元的特点及其在设计单元的特点及其在文件中组织和库中存储文件中组织和库中
24、存储 VHDL设计单元有实体声明、结构体、配设计单元有实体声明、结构体、配置声明、程序包声明和程序包体等类型。置声明、程序包声明和程序包体等类型。1.VHDL设计单元的特点设计单元的特点 (1)实体声明:在一个实体声明中声明的条目实体声明:在一个实体声明中声明的条目在与它相关联的各个结构体中是隐式可见的。在与它相关联的各个结构体中是隐式可见的。(2)结构体:可以有多个结构体同属一个实体,结构体:可以有多个结构体同属一个实体,或者说与同一个实体声明相关联。在一个结构或者说与同一个实体声明相关联。在一个结构体内声明的信号不能被其他设计单元引用。体内声明的信号不能被其他设计单元引用。(3)配置声明:
25、可以有多个结构体同属于一个配置声明:可以有多个结构体同属于一个实体时,应有配置声明。实体时,应有配置声明。(4)程序包声明:在一个程序包声明的条目可程序包声明:在一个程序包声明的条目可通过通过LIBRARY和和USE子句来提供给其他设计子句来提供给其他设计单元。程序包声明中声明的条目在相应的程序单元。程序包声明中声明的条目在相应的程序包体中隐式可见。包体中隐式可见。(5)程序包体:程序包体名必须和它所对应的程序包体:程序包体名必须和它所对应的程序声明名字相同,因此一个程序包声明最多程序声明名字相同,因此一个程序包声明最多只有一个程序包体。一个程序包体内部声明的只有一个程序包体。一个程序包体内部
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 设计 深入 课件 电子 教案 幻灯片
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内