EDA技术与VHDL设计(西电版)第3章-VHDL语言入门课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《EDA技术与VHDL设计(西电版)第3章-VHDL语言入门课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 技术 VHDL 设计 西电版 语言 入门 课件
- 资源描述:
-
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程序包。该程序包主要供仿真器使用,综合器会忽略此程序包。设计者可以用文本编辑器建立一个数据文件,文件中包
展开阅读全文