EDA技术与VHDL设计(西电版)第3章-VHDL语言入门课件.ppt

上传人(卖家):晟晟文业 文档编号:4841668 上传时间:2023-01-17 格式:PPT 页数:123 大小:1.35MB
下载 相关 举报
EDA技术与VHDL设计(西电版)第3章-VHDL语言入门课件.ppt_第1页
第1页 / 共123页
EDA技术与VHDL设计(西电版)第3章-VHDL语言入门课件.ppt_第2页
第2页 / 共123页
EDA技术与VHDL设计(西电版)第3章-VHDL语言入门课件.ppt_第3页
第3页 / 共123页
EDA技术与VHDL设计(西电版)第3章-VHDL语言入门课件.ppt_第4页
第4页 / 共123页
EDA技术与VHDL设计(西电版)第3章-VHDL语言入门课件.ppt_第5页
第5页 / 共123页
点击查看更多>>
资源描述

1、1 1第3章 VHDL语言入门 第3章 VHDL语言入门 3.1 VHDL语言概述 3.2 两个简单的组合电路示例 3.3 库和程序包 3.4 实体描述 3.5 结构体描述 3.6 配置 3.7 层次结构的VHDL描述 3.8 简单时序电路的描述 2 2第3章 VHDL语言入门 3.1 VHDL语言概述语言概述VHDL的主要目的是进行系统的描述、行为的建模与仿真。尽管所有的VHDL代码都是可以仿真的,但并不是所有代码都是可以综合的,这取决于各EDA厂商综合器对VHDL的支持程度。与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了它成为数字系统设计领域最佳的硬件描述语言之一。强

2、大的行为描述能力是使其避开具体的器件结构,从逻辑行为上成为描述和设计大规模电子系统的重要保证。3 3第3章 VHDL语言入门 VHDL语言的优势如下:(1)VHDL有丰富的语句形式和库函数,使其在系统的设计早期就能从行为特性上查验系统的功能可行性,并随时可对设计进行仿真。(2)VHDL语句的行为描述能力和代码结构决定了它具有支持大规模设计的分解和已有设计的再利用功能,符合大规模系统所需的多人协同高效工作的要求。(3)VHDL对设计的描述具有相对独立性,开发者可以不懂硬件的结构,也不必关心最终设计实现的目标器件是什么,便可进行相对独立的设计。(4)VHDL与设计平台无关,可移植性较好。4 4第3

3、章 VHDL语言入门(5)VHDL是最早成为IEEE标准的硬件描述语言,使用广泛,资料分享和查找非常方便,对初学者学习非常有帮助。需要特别注意的是,VHDL与常规计算机高级程序设计语言有所不同,VHDL语句从根本上讲是并发执行的,只有在进程(Process)、函数(Function)和过程(Procedure)内部的语句才是顺序执行的。VHDL描述了电路设计的行为、功能、输入以及输出,其本质是用程序语言的方式来描述硬件。图3-1显示了VHDL的基本硬件模型。VHDL将一个电路系统分为外部可见部分和内部隐藏部分。利用VHDL实现一个电路系统,首先需要定义实体(Entity),在实体定义中完成与外

4、部接口的5 5第3章 VHDL语言入门 定义,包括输入接口(Input Ports)和输出接口(Output Ports)的定义,这是可见部分。实现电路功能的具体算法则在结构体(Architecture)中定义。当其他设计需要引用该设计时(或称为对其进行重用时),这部分像一个黑盒子一样,是隐藏的。结构体内部往往包含相互连接的多个进程和元件,它们都是并行运行的。结构体由信号赋值语句、进程语句和元件例化语句等组成。进程中可以调用子程序。不同的进程之间通过信号进行信息的交互。VHDL里的进程既可以生成由触发器等构成的时序电路,也可以生成由逻辑门构成的组合电路。6 6第3章 VHDL语言入门 图3-1

5、 VHDL基本硬件模型 7 7第3章 VHDL语言入门 3.2 两个简单的组合电路示例两个简单的组合电路示例本节以两个简单的示例引出VHDL语言的基本结构、语句表述及一些语法规则。8 8第3章 VHDL语言入门 3.2.1 2选选1多路选择器的设计多路选择器的设计在数字电路中,2选1多路选择器是组合电路的典型代表。假设有a和b两个数据,控制信号为s,当s取值为0时,选择数据a作为输出;否则,选择数据b作为输出。按照数字电路的设计方法,首先需要列出真值表、卡诺图,然后通过化简卡诺图得到最简逻辑表达式,再根据所选择逻辑器件的要求(如采用与门、或门实现电路,或只能采用与非门实现电路)进行表达式的变换

6、,确认最终的电路形式。图3-2是2选1多路选择器的卡诺图及化简后的逻辑表达式,图3-3是根据逻辑表达式确定的最终电路形式。9 9第3章 VHDL语言入门 图3-2 2选1多路选择器卡诺图及逻辑表达式 10 10第3章 VHDL语言入门 图3-3 2选1多路选择器的电路结构 11 11第3章 VHDL语言入门 例3-1是与图3-3电路结构相对应的采用VHDL语言实现的电路描述。【例3-1】12 12第3章 VHDL语言入门 由例3-1可见,此电路的VHDL描述由两部分组成,其中L2L5是实体描述,L7L10是结构体描述。下面就本例涉及到的一些语法作简单的讲解。(1)以关键词ENTITY为引导、E

7、ND ENTITY为结束的语句部分,称为实体。其中mux21是设计者自行取定的实体名,取名最好依据相应功能来确定,使其具有可读性。VHDL的实体描述了电路器件的外部情况及信号端口的基本性质,如信号流动的方向(输入、输出或其他)、在其上流动的信号的数据类型等。关键词PORT表示定义端口。本例中定义了a、b、s三个输入端口(输入信号),其数据类型为位(BIT)数据类型。BIT数据类型的信号取值只有逻辑“0”和 13 13第3章 VHDL语言入门“1”两种,在VHDL中表达时必须加单引号,否则VHDL综合器会将其解释为另一种数据类型整型。BIT数据类型可以参与逻辑运算,其结果仍是逻辑位的数据类型。V

8、HDL语法规定,任何一种数据对象的应用都必须严格限定其数据类型和取值范围,不同数据类型和取值范围的数据对象将不能相互赋值或进行其他操作。本例还定义了一个输出端口(输出信号)y,其数据类型也是BIT。14 14第3章 VHDL语言入门(2)以关键词ARCHITECTURE为引导、END ARCHITECTURE为结尾的语句部分,称为结构体。其中construct是结构体的名称,也是由设计者自行定义的。VHDL的结构体负责描述电路器件的内部逻辑功能和电路结构。关键词BEGIN意味着具体算法的开始。符号“=”称为赋值符号,即把符号右边的数据向符号左边的输出端口y传递。VHDL要求赋值符号“=”两边的

9、信号数据类型必须一致。L9中出现的AND、OR、NOT是逻辑操作符号,分别表示与、或、非。VHDL一共有7种逻辑操作符,它们分别是AND(与)、OR(或)、NOT(非)、NAND(与非)、NOR(或非)、XOR(异或)、XNOR(同或),其功能与数字电路中常用的逻辑门相同。具体逻辑符号的使用请参见第4章。15 15第3章 VHDL语言入门(3)关键词是VHDL语言中预定义的有特殊含义的英文词语,只能用作固定的用途。关键词不能再用作用户自定义的名称。虽然在EDA工具编译和综合时,关键词并不区分大小写,但是对关键词采用大写字母,对设计者自己定义的实体名称、信号名称等其他名称使用小写字母,能够提高代

10、码的可读性,使其更加规范。一般而言,EDA工具的文本编辑器都能够识别关键词,即关键词敏感型,EDA会用不同的颜色来显示关键词,所以在编辑代码时一般不会误用关键词。16 16第3章 VHDL语言入门(4)实体名称mux21,结构体名称construct,输入端口名称a、b、s以及输出端口名称y都统称为标识符。所谓标识符就是设计者在VHDL代码中自定义的、用于不同名称的词语。使用标识符也要遵循一定的规则:标识符由字母、数字、下划线构成,但必须以字母开头;只能是单一下划线,且不能以下划线作为标识符的结束;VHDL的关键词不能再用作标识符;EDA工具库中已定义好的元件名不能作为标识符,如and2、df

11、f等。虽然标识符与关键词一样,在编译和综合时并不区分大小写,但是为保证代码书写的规范,我们建议标识符采用小写字母。17 17第3章 VHDL语言入门(5)分号的作用。分号用于语句的分割,每条VHDL语句都有一个分号表示结束。需要注意的是,最后一个端口定义处的分号在括号外,如L4所示。(6)规范的代码书写。尽管VHDL代码的书写格式要求十分宽松,但规范的书写习惯是高效的电路设计所必备的。最顶层的ENTITY、ARCHITECTURE描述语句需要放在最左侧,比它们低一层次的描述语句(如PORT),需要向右靠4个小写字母的间隔。相同层次的语句需要对齐。(7)双横线“-”是注释符。在VHDL代码中的任

12、何一行,只要出现了“-”,其后的文字或语句都不再参加编译和综合。良好的注释有助于设计者阅读、理解VHDL代码。18 18第3章 VHDL语言入门 例3-1对应的元件符号如图3-4所示。采用Quartus软件仿真后的结果如图3-5所示。可以清楚地看到,当控制端口s取值为“0”时,输出y即为输入信号a的值;反之,则为输入信号b的值,满足设计要求。例3-1采用的VHDL描述与其电路结构是一一对应的,读者可能会疑惑,这样的描述形式似乎并不能体现VHDL行为描述的优势,且设计者必须搞清楚电路结构才能进行VHDL代码的编辑。其实VHDL有多种不同的描述方式,在后续章节中会详细介绍,例3-1的目的是让读者能

13、够以数字电路的知识作为铺垫,快速进入EDA的学习。19 19第3章 VHDL语言入门 图3-4 mux21元件符号 2020第3章 VHDL语言入门 图 3-5 2选1多路选择器电路的时序波形 21 21第3章 VHDL语言入门 3.2.2 半加器的设计半加器的设计下面再通过一个半加器的例子来说明VHDL的基本结构形式。半加器指两个1位二进制数相加,只考虑两个加数本身,而没有考虑由低位来的进位。图3-6显示了半加器的真值表和逻辑表达式,其中a、b是两个加数,co是进位端,so是求和端。图3-7是半加器的电路结构。例3-2是半加器的VHDL描述,此例仍然采用逻辑操作符描述电路结构的方式。2222

14、第3章 VHDL语言入门 图3-6 半加器真值表和逻辑表达式 2323第3章 VHDL语言入门 图3-7 半加器电路结构 2424第3章 VHDL语言入门【例3-2】2525第3章 VHDL语言入门 例3-2与例3-1相比,除了包含实体和结构体两个部分外,还增加了库和程序包的声明(L2L3)。例3-2所涉及的相关语法讲解如下:(1)L2以关键词LIBRARY为引导,LIBRARY ieee表示打开IEEE库。L3以关键词USE为引导,表示允许使用IEEE库中的std_logic_1164程序包中的所有内容(.all)。例3-2使用库和程序包的原因是本例中用到了数据类型STD_LOGIC,该数据

15、类型的相关定义都是包含在std_logic_1164程序包中的,而该程序包在IEEE库中,所以在使用前必须先给予声明。如将例3-2去掉L2L3后,再次使用Quartus软件进行编译,将会产生如图3-8所示错误,提示数据类型STD_LOGIC未声明。这进一步说明了此处声明库和程序包的作用。2626第3章 VHDL语言入门 图3-8 例3-2不声明IEEE库和std_logic_1164程序包报错信息 2727第3章 VHDL语言入门 读者也许会问,例3-1也使用了数据类型BIT,为什么不需要进行库和程序包的声明呢?数据类型BIT的定义是包含在VHDL标准程序包standard中的,而该程序包包含

16、于VHDL标准库STD中。由于VHDL标准中规定STD库是默认打开的,因此就不需要像例3-2这样将库和程序包以语句显式地表达在VHDL代码的开头。2828第3章 VHDL语言入门(2)数据类型STD_LOGIC称为标准逻辑位数据类型,共定义了九种取值,分别是:“U”(未初始化的)、“X”(强未知的)、“0”(强逻辑0)、“1”(强逻辑1)、“Z”(高阻态)、“W”(弱未知的)、“L”(弱逻辑0)、“H”(弱逻辑1)、“-”(忽略)。可以发现,数据类型STD_LOGIC包含的内容比数据类型BIT要丰富和完整,它可以使设计者精确地模拟一些未知的和具有高阻态的线路的情况,更适用于数字系统的设计。ST

17、D_LOGIC型数据能够被综合器接受的一般只有“X”(或“-”)、“0”、“1”、“Z”这几种,其他的取值则不可综合,只能用于仿真器。例3-2的仿真结果如图3-9所示。2929第3章 VHDL语言入门 图3-9 半加器电路的时序波形 3030第3章 VHDL语言入门 3.2.3 VHDL代码设计基本结构代码设计基本结构从例3-1和例3-2可以看出,一个能够被综合的VHDL代码至少须包含实体和结构体两个部分,如果有需要还要进行库和程序包的声明。一般来说,把一个完整的、可综合的VHDL设计称为设计实体。VHDL代码有比较固定的结构格式,一般首先出现的是库和程序包的使用声明,然后是实体的描述以及结构

18、体的描述。当然,同一个电路系统可能有不同的实现方法,有不同的电路结构,VHDL允许一个实体对应一个或多个结构体,不同的结构体意味着不同的实现方式。如何从对应的多个结构体中选择特定的一个结构体,将其指定给实体,就需要用到配置。总结说来,VHDL代码设计基本结构如图3-10所示。31 31第3章 VHDL语言入门 图3-10 VHDL代码设计基本结构示意图 3232第3章 VHDL语言入门 3.3 库库和和程程序序包包库是一些常用VHDL代码的集合,包括:数据类型的定义、函数的定义、子程序定义、元件引用声明、常量的定义等一些可复用或是共享的VHDL代码,类似于C语言中的头文件。这些已定义的数据类型

19、、子程序、常数等通常收集在程序包(Package)中,多个程序包再并入一个库中,引用了库之后就可以在设计者自己的代码中使用库中的VHDL代码。库和程序包的使用使得设计人员能够遵循某些统一的语言标准或数据格式,也能够方便地调用一些已设计好的内容,提高设计效率,这一点对于多组开发人员并行工作的大规模电路系统的设计尤为重要。3333第3章 VHDL语言入门 库和程序包的声明总是放在设计单元的最前面,以便后续设计能够随时使用库中指定的程序包中的内容。每当综合器在较高层次的VHDL源文件中遇到库语言,就将随库指定的源文件读入,并参与综合。在VHDL语言中可以存在多个不同的库,但是库与库之间是独立的,不能

20、互相嵌套。3434第3章 VHDL语言入门 3.3.1 库和程序包的种类库和程序包的种类当前在VHDL语言中存在的库大致可以归纳为五种:IEEE库、STD库、WORK库、VITAL库和用户自定义库。1IEEE库库IEEE库是VHDL设计中最常用的库之一,它包含IEEE标准的程序包以及其他一些支持工业标准的程序包。下面就几个常用和重要的程序包作一定介绍,相关内容还可参见4.3节以及附录A。附录A中给出了相关程序包的具体定义,有助于读者了解程序包内定义的内容,进一步理解使用不同程序包的目的。3535第3章 VHDL语言入门(1)std_logic_1164程序包。该程序包是最重要和最常用的程序包,

21、是IEEE的标准程序包。std_logic_1164程序包定义了STD_LOGIC和STD_ULOGIC数据类型以及它们的矢量类型和相关操作(如适用于该数据类型的逻辑操作符AND、OR等),数据类型BIT和数据类型STD_LOGIC、STD_ULOGIC的转换函数,数据类型BIT_VECTOR和数据类型STD_LOGIC_VECTOR、STD_ULOGIC_VECTOR的转换函数,等等。3636第3章 VHDL语言入门(2)std_logic_arith程序包。该程序包是Synopsys公司定义的程序包,虽然它并不是IEEE标准,但由于已经成为事实上的工业标准,所以也都并入了IEEE库。std

22、_logic_arith程序包在std_logic_1164程序包的基础上定义了有符号(SIGNED)、无符号(UNSIGNED)、小整型(SMALL_INT)数据类型,其中有符号和无符号数据类型均是基于STD_LOGIC数据类型的。该程序包还定义了这些数据类型之间的相互转换函数,以及适用于它们的一些操作符,如算术操作符、比较操作符等。3737第3章 VHDL语言入门(3)std_logic_signed程序包。该程序包也是由Synopsys公司定义的,同样并入IEEE库。std_logic_signed程序包对INTEGER(整型)、STD_LOGIC、STD_LOGIC_VECTOR数据类

23、型的定义进行了扩展,重载了用于这些数据类型的混合运算的运算符,以及一个由STD_LOGIC_VECTOR数据类型到INTEGER的转换函数。(4)std_logic_unsigned程序包。该程序包同样是由Synopsys公司定义的,并入IEEE库。std_logic_unsigned程序包定义内容与std_logic_signed程序包相似。所不同的是,std_logic_signed程序包中定义的内容是基于有符号(SIGNED)数据类型的,即考虑了符号;而std_logic_unsigned程序包中定义的内容是基于无符号(UNSIGNED)数据类型的。3838第3章 VHDL语言入门 此外

24、,IEEE库还包括了math_real、numberic_bit、numberic_std等程序包,它们是IEEE正式认可的标准程序包集合。一般来说,基于FPGA/CPLD的开发,使用std_logic_1164、std_logic_arith、std_logic_signed以及std_logic_unsigned这4个程序包已经能够满足大多数的需要。所以,其他几个程序包不再一一进行讲述,读者如有兴趣,可查阅相关资料。3939第3章 VHDL语言入门 2STD库库STD库中含有VHDL语言标准定义的两个标准程序包,即standard程序包和textio程序包。(1)standard程序包。该

25、程序包是VHDL标准程序包,使用时默认打开。所以设计者在使用时,并不需要像IEEE库中的程序包那样使用关键词LIBRARY和USE进行显式的声明。如:例3-1中BIT数据类型并没有做库的声明格式,就是因为BIT数据类型是定义在standard程序包中的。standard程序包定义了诸如BOOLEAN(布尔型)、BIT(位型)、CHARACTER(字符型)、INTEGER(整型)、REAL(实数型)、TIME(时间型)等数据类型以及相关的操作。4040第3章 VHDL语言入门(2)textio程序包。该程序包主要供仿真器使用,综合器会忽略此程序包。设计者可以用文本编辑器建立一个数据文件,文件中包

26、含仿真时需要的数据。仿真时利用textio程序包中提供的用于访问文件的过程,即可获得这些数据或将仿真结果保存于文件中。textio程序包实际上是专为VHDL模拟工具提供的与外部计算机文件管理系统进行数据交换的通道,使用前需要使用USE语句。8.2.3节将讲解该程序包的使用。41 41第3章 VHDL语言入门 3WORK库库WORK库是用户进行VHDL设计的现行工作库,用于存放用户设计和定义的一些设计单元和程序包,是用户自己设计的仓库。VHDL标准规定WORK库总是可见的,因此在实际使用时,也不需要使用LIBRARY和USE语句显式的打开。VHDL标准要求为设计的项目建立一个文件夹,与此项目相关

27、的工程、文件等都保存于此文件夹内。VHDL综合器会将此文件夹默认为WORK库,指向该文件夹的路径。需要注意的是,WORK库并不是这个文件夹的名字,它是一个逻辑名。4242第3章 VHDL语言入门 4VITAL库库VITAL库符合IEEE标准,由含有精确ASIC时序模型的时序程序包集合vital_timing和基本元件程序包集合vital_primitives构成,支持以ASIC单元的真实时序数据对一个VHDL设计进行精确的模拟验证,提高VHDL门级时序模拟的精度。但由于各FPGA/CPLD生产厂商的适配工具都能够为各自的芯片生成带时序信息的VHDL门级网表,用VHDL仿真器仿真该网表就可以得到

28、精确的时序仿真结果。因此,在FPGA/CPLD设计开发过程中,一般不需要使用VITAL库中的程序包来进行仿真。4343第3章 VHDL语言入门 5用户自定义库用户自定义库用户为自身设计需要所开发的公共包集合和实体等,可以汇集在一起定义为一个库,即用户自定义库,供其他开发者调用,但在使用时同样要首先说明库名。此外,各EDA开发商为了便于开发设计,还提供了一些自己的库,如Altera公司的LPM库(本书配套的EDA技术与VHDL设计实验指导一书中会对LPM库进行讲解)、Synopsys公司的Synopsys库等。4444第3章 VHDL语言入门 3.3.2 库和程序包的使用库和程序包的使用在前面提

29、到的几类库中,除了STD库和WORK库以外,其他库在使用前都需要首先进行声明。声明格式如下:LIBRARY ;USE.all;其中:第一条语句表示使用什么库;第二条语句表示使用库中的哪一个程序包。此处,all代表打开库中指定程序包内的所有资源。当然,也可以只打开程序包内所选定的某个项目或函数,其声明格式如下:LIBRARY ;USE.;4545第3章 VHDL语言入门 例3-3给出了两种不同的声明格式。【例3-3】LIBRARY ieee;USE ieee.std_logic_1164.std_ulogic;-打开std_logic_1164程序包中的std_ulogic数据类型USE iee

30、e.std_logic_1164.all-打开std_logic_1164程序包中的所有资源库声明语句的范围从一个实体说明开始,到它所属的结构体、配置为止。当一个源程序中出现两个以上的实体时,两条作为库使用声明的语句必须在每个实体说明语句前重复书写。4646第3章 VHDL语言入门 3.3.3 程序包的定义程序包的定义程序包(Package)说明类似于C语言中的include语句,用来单纯地罗列VHDL语言中所用到的各种常数定义,数据类型定义,元件、函数和过程定义等。程序包是一个可编译的设计单元,也是库结构中的一个层次。程序包可分为预定义程序包和用户自定义程序包两类。上述的std_logic_

31、1164、std_logic_arith等程序包属于常用的预定义程序包。4747第3章 VHDL语言入门 定义程序包的一般结构如下:PACKAGE IS -程序包首 说明语句;END PACKAGE;PACKAGE BODY IS-程序包体说明语句;END PACKAGE BODY;4848第3章 VHDL语言入门 一个程序包的定义由两大部分组成:程序包首和程序包体。一个完整的程序包中,程序包首和程序包体的名称应是同一个。程序包体是一个可选项,当没有定义函数和过程时,程序包可以只由程序包首构成。程序包首的说明语句部分进行数据类型的定义,常数的定义,元件、函数及过程的声明等。程序包体的说明语句部

32、分进行具体函数、过程功能的描述。例3-4给出了一个程序包定义的示例,其程序包名称是my_package,在其中定义了一个新的数据类型color、一个常数x以及一个函数positive_edge。由于函数必须要有具体的内容,所以在程序包体内进行描述。如果该程序包在当前WORK库中已定义,则要使用该程序包中的内容,可利用USE语句,如例3-5所示。例3-4相关的语法知识会在后续章节中陆续介绍,这里只是让读者体会程序包的格式和用法。4949第3章 VHDL语言入门【例3-4】5050第3章 VHDL语言入门【例3-5】USE WORK.my_package.all;-由于WORK库是默认打开的,因此

33、可以省去LIBRARY WORK语句51 51第3章 VHDL语言入门 3.4 实实 体体 描描 述述3.4.1 实体描述语句的结构实体描述语句的结构实体(Entity)用于一个设计实体与其他设计实体或外部电路进行接口的描述,是设计实体对外的一个通信界面。实体描述包括实体名、类属声明以及端口声明。实体描述的一般语句格式如下:ENTITY 实体名 IS GENERIC(参数名:数据类型:=设定值;-类属声明 参数名:数据类型:=设定值);5252第3章 VHDL语言入门 PORT(端口名:端口模式 数据类型;-端口声明 端口名:端口模式 数据类型);END ENTITY 实体名;实体名是实体的标

34、识,由设计者自行定义,一般为设计实体逻辑功能简称的英文字符,但要符合标识符命名的规则,如实体名clkdiv表示分频器。考虑到某些EDA工具的限制(如Quartus软件)、VHDL代码的特点以及调用的方便性等,建议源程序所保存的文件名与实体名保持一致,如保存文件名为clkdiv.vhd(后缀名.vhd代表采用VHDL语言编写)。此外,在同一个库中,实体名必须是唯一的。5353第3章 VHDL语言入门 在进行模块化设计时,有时需要在不改变VHDL源代码的基础上,对设计实体的某些参数进行修改,从而改变设计实体内部的电路结构或规模,这时就需要用到类属参量,即在类属声明中声明的参数。类属参量提供了可供外

35、部修改参数的通道或是窗口。当调用该设计实体时,通过对类属参量进行重新赋值就能够实现对设计实体内部相应逻辑功能的修改,这样既保证了电路功能的可修改性,又不会破坏VHDL程序的一致性,提高了代码的复用性。类属声明部分是可选项,不是必须的,如例3-1和例3-2中都没有类属声明。5454第3章 VHDL语言入门 端口声明确定了端口的数目、端口上通过的信号的数据类型以及信号的流动方向,这是硬件描述语言的一大特点。硬件电路中信号的流向,即信号从什么地方来、做了怎样的处理、最后输出到哪里去。综上所述,实体描述的主要内容包括:(1)给实体取一个有意义的名称;(2)根据设计实体的外部接口,设计相应的端口并为端口

36、确定符合逻辑功能的名称,规定信号的流动方向和数据类型;(3)根据需要声明相应的类属参量。以下就端口声明和类属声明再进一步讲解。5555第3章 VHDL语言入门 3.4.2 端口声明端口声明端口声明确定了输入、输出端口的数目和类型,以关键词PORT引导,有端口名、端口模式、数据类型三个要点。1端口名端口名端口名是指赋予每个端口(引脚)的名称,通常用一个或几个英文字母或者字母加数字的方式来命名,如d0、d1、sel、q、qb、input1等。2端口模式端口模式端口模式是指这些通道上数据的流动方向,IEEE 1076标准包中定义了四种常用的端口模式:输入(IN)模式、输出(OUT)模式、双向(INO

37、UT)模式、缓冲(BUFFER)模式。5656第3章 VHDL语言入门(1)输入模式用保留字IN来声明。采用输入模式声明的端口信号的数据流向为实体外部到实体内部,即数据只能通过此端口被读入,如例3-1中的端口a、b、s。如果一个端口信号被声明为输入模式,则其只能作为赋值语句的右值存在,任何给该端口信号赋值的语句都会被综合器报错。(2)输出模式用保留字OUT来声明。采用输出模式声明的端口信号的数据流向为实体内部到外部,即数据只能通过此端口输出,如例3-1中的端口y。如果一个端口信号被声明为输出模式,则其只能作为赋值语句的左值存在,任何读取该端口信号的语句都会被综合器报错。5757第3章 VHDL

38、语言入门(3)双向模式用保留字INOUT来声明。采用双向模式既可以从实体内部输出,也可以从实体外部输入。但是同一时刻只能进行某一个数据流向的操作,因此双向模式声明的端口信号一般需要一个信号进行方向的控制。(4)缓冲模式用保留字BUFFER来声明。BUFFER模式与INOUT模式类似,既可以输出,也可以输入。但是,其输入的数据只允许回读内部输出的信号。5858第3章 VHDL语言入门 3数据类型数据类型端口信号必须确定其数据类型,即在其上流动的数据的类型。在VHDL中有多种数据类型,例3-1和例3-2分别用到了BIT和STD_LOGIC数据类型。相关的数据类型还有BOOLEAN(布尔型)、INT

39、EGER(整型)、BIT_VECTOR(位矢量型)、STD_LOGIC_VECTOR(标准逻辑矢量型)、TIME(时间型)、REAL(实数型)等数据类型。5959第3章 VHDL语言入门 VHDL从语言属性上讲是一种强类型语言。VHDL规定,任何一种数据对象的应用都必须严格限定其取值范围和数值类型,不同数据对象在不同数据类型之间的赋值要作明确的界定,这一点和传统C语言在数据对象的赋值上有比较大的区别。虽然这样的做法在语言的灵活性上要差一些,但在大规模电路描述的排错上却是十分有益的,这是VHDL的特点之一。6060第3章 VHDL语言入门 3.4.3 类属声明类属声明类属声明可以声明多个类属参量

40、(或称类属值、类属变量),其中参数名和数据类型是必须的。将例3-1稍作改动,如例3-6所示。【例3-6】61 61第3章 VHDL语言入门 6262第3章 VHDL语言入门(1)在例3-6中加入了以关键词GENERIC引导的语句(L3),该语句声明了类属参量m,其数据类型为TIME(时间类型)。设置了一个缺省值10 ns,当没有传入其他具体参数值时,结构体内凡是用到m,其值都为10 ns。GENERIC语句所定义的类属参量与常量十分类似,但它能从外部动态地接受不同的赋值。6363第3章 VHDL语言入门(2)本例中还引入了一个新的数据对象,即使用关键词SIGNAL定义的信号temp(L9),其

41、数据类型是BIT。读者可以将其理解为C语言的变量,作为数据的一种暂存节点。由于temp在结构体内定义,属于内部节点信号,数据的进出不像端口那样受方向的限制,所以不必定义其端口模式(即输入、输出方向,如IN、OUT)。使用关键词SIGNAL定义的标识符是信号,信号属于数据对象(Data Objects)中的一种。VHDL中共有三类数据对象,分别是:常量(CONSTANT)、变量(VARIABLE)和信号(SIGNAL)。在第4章中会对三种数据对象进一步讲解,使读者掌握它们的用法和区别。6464第3章 VHDL语言入门(3)语句y=temp AFTER m;表示延迟m(本例是10 ns)后再将2选

42、1数据选择器的选择结果送到输出端口y上。类属参量多用于模块化设计时不同层次模块之间信息的传递,读者可以将其理解为高层次模块传递给底层模块的形参。例3-6仅仅是类属参量的一个简单示例,目的是使读者了解它的声明格式等,在讲解了层次型结构后,将会用一个更加完善的例子来进一步认识类属参量实现参数传递的功能。6565第3章 VHDL语言入门 3.5 结结构构体体描描述述3.5.1 结构体描述语句结构结构体描述语句结构结构体负责描述设计实体的内部逻辑功能和电路结构。结构体一般由结构体名、说明语句和功能描述语句组成,其一般语句格式如下:ARCHITECTURE 结构体名 OF 实体名 IS 说明语句;BEG

43、IN 功能描述语句;END ARCHITECTURE 结构体名;6666第3章 VHDL语言入门 结构体名是结构体的标识,由设计者自行定义,可以根据结构体的描述方式来命名,如结构化描述形式可以使用结构体名construct,行为描述形式可以使用结构体名behavior(或简写为bhv);但需要注意的是,结构体名也需要符合标识符命名的规则。结构体描述部分的实体名应和结构体对应实体的名称一致。如果一个实体具有多个结构体,结构体的取名不可相重,但不同实体的结构体可以同名。6767第3章 VHDL语言入门 结构体说明语句位于关键词ARCHITECTURE和BEGIN之间,主要是对结构体功能描述语句中将

44、要用到的数据类型、常量、信号、子程序、函数、元件等的声明。说明语句并非必须的。在一个结构体中,说明语句部分声明的数据类型、常量、信号、子程序、函数、元件等只能用于该结构体。如果希望它们能够用于其他的设计实体,则需要作为程序包来处理。结构体功能描述语句位于关键词BEGIN和END ARCHITECTURE之间,负责具体逻辑功能和电路结构的描述,可以是并行语句、顺序语句或是二者的混合。6868第3章 VHDL语言入门 结构体描述的结束语句“END ARCHITECTURE 结构体名;”是符合VHDL93标准的语法要求的。若根据VHDL87标准的语法要求,可写为“END 结构体名;”或直接使用“EN

45、D;”。对于实体描述的结束语句,“END ENTITY 实体名;”也是符合VHDL93标准语法规则的,也可根据VHDL87标准语法要求写成“END 实体名;”或“END;”的形式。由于目前大多数EDA工具中的VHDL综合器可以兼容两种标准的语法规则,所以在后面的示例中不再特别指出二者的区别。需要注意的是,如果综合器支持的VHDL标准不同,仍需要按照不同的语法规则进行代码的编写。6969第3章 VHDL语言入门 3.5.2 说明语句说明语句例3-7显示了在结构体说明语句部分使用关键词TYPE声明了两个新的数据类型my_std_logic和color,关键词SIGNAL声明了一个信号temp,关键

46、词CONSTANT声明了一个常量x,关键词COMPONENT声明了半加器元件halfadd,关键词FUNCTION声明了一个函数max。具体相关语法将在后续章节中继续介绍。7070第3章 VHDL语言入门【例3-7】ARCHITECTURE bhv OF mux21 IS TYPE my_std_logic IS(7 DOWNTO 0)OF STD_LOGIC;-新的数据类型my_std_logic,含8个元素的矢量,每个元素的数据类型都是STD_LOGIC TYPE color IS(red,green,blue);-新的数据类型color,属于枚举型SIGNAL temp:BIT;-信号t

47、emp,数据类型是BIT CONSTANT x:INTEGER:=7;-常量x,数据类型是整型,取值为7 COMPONENT halfadd-元件声明,将一个现成的设计实体定义为一个元件PORT(a,b :IN STD_LOGIC;-表示在结构体功能描述语句部分将要调用该半加器元件71 71第3章 VHDL语言入门 co,so:OUT STD_LOGIC);END COMPONENT halfadd;-元件声明结束FUNCTION max(a,b:IN STD_LOGIC_VECTOR)RETUN STD_LOGIC_VECTOR;-声明函数max,用于比较a和b的大小,a、b的数据类型是标准

48、逻辑矢量,返回值是a、b中的最大值,其数据类型也是标准逻辑矢量BEGIN END ARCHITECTURE bhv;7272第3章 VHDL语言入门 3.5.3 功能描述语句功能描述语句结构体功能描述语句负责描述具体电路的逻辑实现。功能描述语句中可以包含进程、并行信号赋值语句、元件例化语句、子程序调用语句等几类。这几类语句都是以并行方式工作的,即语句的执行不以书写语句的顺序为顺序。而在每一种语句结构的内部可能含有并行运行的逻辑描述或是顺序运行的逻辑描述。相对于C语言一类的软件描述语言,并行语句结构是VHDL语言最大的特色。按照具体电路逻辑实现的方式进行分类,VHDL的描述方式可分为结构化建模和

49、行为建模两类,下面分别进行介绍。7373第3章 VHDL语言入门 1结构化建模结构化建模结构化建模通过明确的硬件实现来指定电路的功能,它描述设计单元的硬件结构,表示元件之间的互连。例3-1和例3-2都采用了结构化建模的形式进行电路系统的描述。以2选1多路选择器为例,它的逻辑电路由与门、或门和非门构成,而这些基本的逻辑门电路都已经是现成的设计单元,那么将这些现成的设计单元连接就可以构成新的电路系统,类似于电路原理图中所画器件的连接。7474第3章 VHDL语言入门 另一种常见的结构化建模的描述方式是根据设计的逻辑功能进行模块的划分,首先进行各个模块的设计和验证;然后在顶层文件中对多个模块进行调用

50、,描述底层各模块之间的连接关系,即层次型的VHDL描述,该描述主要采用元件声明和元件例化语句完成。层次型的VHDL描述将在3.7节中具体讲述。7575第3章 VHDL语言入门 2行为建模行为建模行为建模只规定了电路系统的功能或行为,不关心电路的实际结构,没有明确指明涉及的硬件及连线等,即只关心“做什么”,不关心“怎么做”。行为建模是VHDL语言描述的一大特色,是VHDL编程的核心,它使得设计者可以在不了解硬件电路结构的情况下实现电路系统。行为建模的描述形式充分体现了VHDL语言相对于其他硬件描述语言的优势。行为建模通常由一个或多个进程构成,每一个进程内包含了一系列的顺序语句。下面仍以2选1多路

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(EDA技术与VHDL设计(西电版)第3章-VHDL语言入门课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|