第5章VHDL设计进阶.ppt_第1页
第5章VHDL设计进阶.ppt_第2页
第5章VHDL设计进阶.ppt_第3页
第5章VHDL设计进阶.ppt_第4页
第5章VHDL设计进阶.ppt_第5页
免费预览已结束,剩余92页可下载查看

下载本文档

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

文档简介

EDA技术实用教程,第5章VHDL设计进阶,5.1数据对象,在VHDL中,数据对象有三类,即变量(VARIABLE)、常量(CONSTANT)和信号(SIGNAL)。变量和常量可以从软件语言中找到对应的类型,然而信号的表现较特殊,它具有更多的硬件特征,是VHDL中最有特色的语言要素之一。,5.1数据对象,5.1.1常数,在程序中,常量是一个恒定不变的值,一旦作了数据类型和赋值定义后,在程序中就不能再改变,因而具有全局性意义。常数定义的一般表述如下:,例如:,常数定义语句所允许的设计单元有实体、结构体、程序包、块、进程和子程序。,5.1数据对象,5.1.2变量,在VHDL语法规则中,变量是一个局部量,只能在进程和子程序中使用。变量不能将信息带出对它作出定义的当前结构。定义变量的一般表述如下:,例如:,5.1数据对象,变量赋值的一般表述如下:,变量赋值符号是“:=”,变量数值的改变是通过变量赋值来实现的。赋值语句右方的“表达式”必须是一个与“目标变量名”具有相同数据类型的数值。这个表达式可以是个运算表达式,也可以是一个数值。变量赋值语句左边的目标变量可以是单值变量,也可以是一个变量的集合,如位矢量类型的变量:,5.1数据对象,5.1.3信号,信号是描述硬件系统的基本数据对象。信号可以作为设计实体中并行语句模块间的信息交流通道。信号作为一种数值的容器,不但可以容纳当前值,也可以保持历史值(这决定于语句的表达方式)。这一属性与触发器的记忆功能有很好的对应关系,只是不必注明信号上数据流动的方向。信号定义的语句格式与变量相似,信号定义也可以设置初始值,定义格式如下:,5.1数据对象,除了没有方向说明以外,信号与实体的端口(Port)概念是一致的。信号的使用和定义范围是实体、结构体和程序包。,在进程和子程序的顺序语句中不允许定义信号,且在进程中只能将信号列入敏感表,而不能将变量列入敏感表。可见进程只对信号敏感,而对变量不敏感。,与变量相比,信号的硬件特征更为明显,它具有全局性特征。即在整个结构体中的任何位置、任何语句结构中都能获得同一信号的赋值。,5.1.3信号,5.1数据对象,当对信号定义了数据类型和表达方式后,在VHDL设计中就能对信号进行赋值了。信号的赋值语句表达式如下:,这里的“表达式”可以是一个运算表达式,也可以是数据对象(变量、信号或常量)。数据信息的传入可以设置延时量(即“时间量”),如AFTER3ns。因此目标信号获得传入的数据并不是即时的。即使是零延时(等效于AFTER0ns,即不作任何显式的延时设置),也要经历一个特定的延时,即延时。,5.1.3信号,在进程中,可以允许同一信号有多个驱动源(赋值源),即在同一进程中存在多个同名的信号被赋值,其结果只有最后的赋值语句被启动,并进行有效赋值操作。例如:,5.1数据对象,当进程被启动后,信号赋值将自上而下顺序执行,但第一项赋值操作并不会发生,这是因为y的最后一项驱动源是b,因此y被赋值为b。,但在并行赋值语句中,不允许如上例所示的同一信号有多次出现的情况。此外由于并行语句中不允许对同一信号进行多次赋值(禁止多驱动源赋值),因此不同进程中不允许同时存在对同一信号赋值的情况出现,因为结构体中的所有进程都是并行运行关系,在并行语句中对同一信号赋值表现在电路上就意味着“线与”。,总结数据对象DATAOBJECTS,常数(CONSTANT),常数定义的一般表述:CONSTANT常数名:数据类型:=表达式;,变量(VARIABLE),定义变量的一般表述:VARIABLE变量名:数据类型:=初始值;,信号(SIGNAL),定义格式:SIGNAL信号名:数据类型:=初始值;,变量赋值的一般表述:目标变量名:=表达式;,信号赋值的一般表述:目标信号名=表达式after时间量;,5.1数据对象,5.1.4进程中的信号赋值与变量赋值,一般地,从硬件电路系统来看,变量和信号相当于逻辑电路系统中的连线和连线上的信号值;常量相当于电路中的恒定电平,如GND或VCC接口。,5.1数据对象,5.1.4进程中的信号赋值与变量赋值,在不完整的条件语句中,单独的变量赋值语句与信号赋值语句都能综合出相同的时序电路,此时变量己不是简单的数据临时储存结构了。,5.1数据对象,5.1.4进程中的信号赋值与变量赋值,例5-1与例5-2综合的结果完全一样,都是图5-1所示的D触发器。,5.1数据对象,5.1.4进程中的信号赋值与变量赋值,5.1数据对象,5.1.4进程中的信号赋值与变量赋值,5.1数据对象,5.1.4进程中的信号赋值与变量赋值,信号行为特性的三个特点:,(1)信号的赋值需要有一个延时,例如当执行到例5-3中的表达式A=D1时,D1向A的赋值是在一个延时后发生的,此时A并未得到更新,即A并未获得D1的值,只是刚刚启动了一个延时为的模拟定时器,只有在延时为后,A才能被更新,获得D1的赋值。(2)一个进程中的赋值特点是,所有赋值语句,包括信号赋值和变量赋值,都必须在一个6延时内完成(变量在延时前即已完成赋值),即一个进程的运行时间固定为一个6延时。一方面,在进程中的所有信号赋值语句在进程启动的一瞬间立即顺序启动各自的延时为的定时器,预备在定时结束后分别执行赋值操作;但另一方面,这种顺序启动的间隔几乎为O,而在顺序执行到ENDPROCESS语句时,延时才结束,因此这时在进程中的所有信号赋值操作几乎在同时完成赋值(即令赋值对象的值发生更新),即在进程中的顺序赋值是以近乎并行的方式“同时”完成的,并且是在执行到ENEPROCESS语句时才发生。因此不难理解,执行赋值操作和完成赋值是两个不同的概念,对于类似于c的软件语言,执行或完成一条语句的赋值是没有区别的,但对丁VHDL的信号的赋值有很大的不同。“执行赋值”只是一个过程,它具有顺序的特征;而“完成赋值”是一种结果它的发生具有VHDL最本质的并行的特征。(3)当在进程中存在同一信号有多个赋值源(即对同一信号发生多次赋值)时,实际完成赋值,即赋值对象的值发生更新的信号是最接近ENDPROCESS语句的信号。如上所述,由于进程中的顺序赋值部分没有时间的流逝,所以在顺序语句部分,无论有多少语句,都必须在到达ENDPROCESS语句时,延迟才能发生,VHDL仿真过程的模拟器时钟才能向前推进。,5.1数据对象,5.1.4进程中的信号赋值与变量赋值,5.1数据对象,5.1.4进程中的信号赋值与变量赋值,5.1数据对象,5.1.4进程中的信号赋值与变量赋值,5.1数据对象,5.1.4进程中的信号赋值与变量赋值,5.1数据对象,5.1.4进程中的信号赋值与变量赋值,5.2VHDL设计实例及其语法内涵,第一,通过实例再进一步阐明信号赋值与变量赋值、顺序语句和并行语句、进程结构,以及不完整条什语句的要点和特点;第二,借助实例介绍相关的VHDL语法知识;第三,介绍一些典型的数字模块的设计方法,以便读者能更深入地了解和把握VHDL设计的基本方法和内在规律。,5.2VHDL设计实例及其语法内涵,5.2.1含同步并行预置功能的8位移位寄存器设计,此语句表明:(1)一个时钟周期后将上一时钟周期移位寄存器中的高7位二进制数,即当前值REG8(7downto1)赋给此寄存器的低7位REG8(6downto0)。于是其串行移空的最高位始终由最初并行预置数的最高位填补。(2)将上时钟周期移位寄存器中的最低位,即当前值REG8(0)向QB输出。随着CLK脉冲的到来,就完成了将并行预置输入的数据逐位向右串行输出的功能,即将寄存器中的最低位首先输出。此例利用进程中的非完整条件语句构成了时序电路,同时又利用了信号赋值的“并行”特性实现了移位。,REG8(6DOWNTO0)=REG8(7DOWNTO1);,5.2VHDL设计实例及其语法内涵,5.2.1含同步并行预置功能的8位移位寄存器设计,5.2VHDL设计实例及其语法内涵,5.2.1含同步并行预置功能的8位移位寄存器设计,5.2VHDL设计实例及其语法内涵,5.2.2移位模式可控的8位移位寄存器设计,接下页,5.2VHDL设计实例及其语法内涵,接上页,5.2VHDL设计实例及其语法内涵,5.2.2移位模式可控的8位移位寄存器设计,5.2.3位矢中1码个数统计电路设计,5.2VHDL设计实例及其语法内涵,5.2.3位矢中1码个数统计电路设计,5.2VHDL设计实例及其语法内涵,5.2.3位矢中1码个数统计电路设计,LOOP语句的常用表达方式有两种:,(1)单个LOOP语句,(2)FOR_LOOP语句,5.2VHDL设计实例及其语法内涵,5.2.3位矢中1码个数统计电路设计,由以上的表述可以看出VHDL中循环语句与C等软件描述语言中的循环语句有非常大的不同,前者每一次循环都将产生一个硬件模块,随着循环次数的增加,硬件资源将大量耗用,但工作时间的耗用未必增加;后者的每一次循环真正损失的只是CPU的运行时间。,此段程序等效于顺序执行以下三个信号赋值操作,即产生三个与逻辑模块:,5.2VHDL设计实例及其语法内涵,5.2.4三态门设计,在设计中,如果用STD_LOGIC数据类型的“Z”对个变量赋值,即会引入三态门,并在控制下可使其输出呈高阻态(在端口),这等效于使三态门禁止输出。,引入三态门有许多实际的应用,如CPU设计中的数据和地址总线的构建;RAM或堆栈的数据端口的设计等。利用VHDL在FPGA开发设计中引入三态控制电路也是可以实现的。,5.2VHDL设计实例及其语法内涵,5.2.4三态门设计,5.2VHDL设计实例及其语法内涵,5.2.4三态门设计,5.2VHDL设计实例及其语法内涵,5.2.5双向端口的设计方法,5.2VHDL设计实例及其语法内涵,5.2.5双向端口的设计方法,5.2VHDL设计实例及其语法内涵,5.2.5双向端口的设计方法,5.2VHDL设计实例及其语法内涵,5.2.5双向端口的设计方法,5.2VHDL设计实例及其语法内涵,5.2.5双向端口的设计方法,5.2VHDL设计实例及其语法内涵,5.2.5双向端口的设计方法,5.2.6三态总线电路设计,5.2VHDL设计实例及其语法内涵,5.2.6三态总线电路设计,5.2VHDL设计实例及其语法内涵,5.2.6三态总线电路设计,5.2VHDL设计实例及其语法内涵,5.2.7双边沿触发时序电路设计讨论,实用电路中确有一些模块需要利用时钟的上升沿和下降沿处理数据,如一些类型的存储器。然而VHDL一般不允许对同一信号在时钟的两个边沿进行数据赋值处理,而且无论在同一进程中还是在不同进程中都不允许。事实上,在不同进程中对同一信号的任何条件下的赋值都是错误的(线与),其首先就错在并行信号中对同一信号赋值。这是由于不存在对时钟的双边沿都响应的基本时序元件,因此以下两例都是错误的。,5.2VHDL设计实例及其语法内涵,5.2.7双边沿触发时序电路设计讨论,5.3顺序语句归纳,在一个结构体中,允许放置任意多个进程语句结构,而每一进程的内部是由一系列顺序语句来构成的。在VHDL中,所谓顺序仅是指语句按序执行上的顺序性,但这并不意味着PROCESS语句结构在综合后所对应的硬件逻辑行为也具有相同的顺序性。PROCESS结构中既可以有时序逻辑的描述,也可以有组合逻辑的描述,它们都可以用顺序语句来表达。,5.3顺序语句归纳,5.3.1进程语句格式,PROCESS语句结构的一般表达格式如下:,当进程中定义的任一敏感信号发生更新时(发生变化时),由顺序语句定义的行为就要重复执行一次。当进程中最后一个语句执行完成后,执行过程将自动返回到进程的起始端,以等待下一次敏感信号的变化。一个结构体中可以含有多个PROCESS结构,每一PROCESS结构对于其敏感信号参数表中定义的任一敏感参量的变化,可以在任何时刻被激活或者称为启动。在一个结构体中,所有被激活的进程都是并行运行的,这就是为什么PROCESS结构本身是并行语句的道理。PROCESS语句必须以语句“ENDPROCESS进程标号】;”结尾,,5.3顺序语句归纳,5.3.2进程结构组成,进程说明部分,定义一些局部量,可包括数据类型、常数、变量、属性、子程序等,顺序描述语句,信号赋值语句变量赋值语句进程启动语句子程序调用语句顺序描述语句进程跳出语句,敏感信号参数表,多数VHDL综合器要求敏感信号表必须列出本进程中所有输入信号名,5.3顺序语句归纳,5.3.3进程要点,1.PROCESS为一无限循环语句进程只有两种运行状态,即执行状态和等待状态。进程是否进入执行状态,取决于是否满足特定的条件,如敏感变量是否发生变化。如果满足条件,即进入执行状态,当遇到ENDPROCESS语句后即停止执行,自动返回到起始语句PROCESS,进入等待状态。,5.3顺序语句归纳,5.3.3进程要点,2.进程中的顺序语句具有明显的顺序和并行双重性,在PROCESS中,一个执行状态的运行周期,即从PROCESS的肩动执行到遇到ENDPROCESS为止所花的时间与任何外部因素都无关(从综合结果来看),甚至与PROCESS语法结构中的顺序语句的多少都没有关系,其执行叫间从行为仿真的角度看(如果没有设置任何显式的惯性或传输延时),只有一个VHDL模拟器的最小分辨时间,即一个时间;但从综合和硬件运行的角度看,其执行时间是0,这与信号的传输延时无关,与被执行的语句的实现时间也无关。即在同PROCESS中,10条语句和1000条语句的执行时间是一样的。显然从效果上看,PROCESS中的顺序语句具有并行执行的性质。,5.3顺序语句归纳,5.3.3进程要点,3.进程语句本身是并行语句,虽然进程语句引导语句属于顺序语句,但同一结构体中的不同进程是并行运行的,或者说是根据相应的敏感信号独立运行的。,5.3顺序语句归纳,5.3.3进程要点,4.信号可以是多个进程间的通信线,5.一个进程中只允许描述对应于一个时钟信号的同步时序逻辑,结构体中多个进程之所以能并行同步运行,一个很重要的原因是进程之间的通信是通过信号来实现的。所以相对于结构体来说,信号具有全局特性,它是进程间进行联系的重要途径。,推荐只放置一个含有时钟边沿检测语句的条件语句,即一个进程中只能描述针对于同一时钟的同步时序逻辑,而异步时序逻辑或多时钟同步逻辑必须由多个进程来表达。,5.4并行赋值语句讨论,5.4并行赋值语句讨论,5.5IF语句概述,IF语句作为一种条件语句,它根据语句中所设置的一种或多种条件,有选择地执行指定的顺序语句。IF语句中至少应有一个条件句,“条件句”可以是一个BOOLEAN类型的标识符,如IFa1THEN.,或者是一个判别表达式,如IFab+1THEN.;判别表达式输出的值,即判断结果的数据类型是BOOLEAN。IF语句根据条件句产生的判断结果是TRUE或是FALSE,有条件地选择执行其后的顺序语句。,5.5IF语句概述,第(1)种条件语句的执行情况是:当执行到此句时,首先检测关键词IF后的条件表达式的布尔值是否为真如果条件为真,于是(THEN)将顺序执行条件句中列出的各条语句,直到ENDIF,即完成全部IF语句的执行;如果条件检测为伪,则跳过以下的顺序语句不予执行,直接结束IF语句的执行。这种语句形式在前已出现过多次,是一种非完整性条件语句,通常用于产生时序电路。,5.5IF语句概述,第(2)种IF语句的差异仅在于当所测条件为FALSE时,并不直接跳到ENDIF结束条件句的执行,而是转向ELSE以下的另一段顺序语句进行执行。所以第(2)种IF语句具有条件分支的功能,就是通过测定所设条件的真假以决定执行哪一组顺序语句,在执行完其中一组语句后,再结束IF语句的执行。这是一种完整性条件语句,它给出了条件句所有可能的条件,因此通常用于产生组合电路。,5.5IF语句概述,第(3)种IF语句是一种多重IF语句嵌套式条件句,可以产生比较丰富的条件描述。既可以产生时序电路,也可以产生组合电路,或是两者的混合,如例4-24的移位寄存器。该语句在使用中应注意,ENDIF结束句应该与嵌入条件句数量一致。,5.5IF语句概述,第(4)种IF语句与第(3)种语句一样。也可以实现不同类型电路的描述。在前面的许多示例中都用到了这种语句。该语句通过关键词ELSIF设定多个判定条件,以便顺序语句的执行分支可以超过两个。这一类型的语句有一个重要特点,就是其任一分支顺序语句的执行条件是以上各分支所确定条件的相与(即相关条件同时成立),即语句中顺序语句的执行条件具有向上相与的功能。有的逻辑设计恰好需要这种功能。,5.5IF语句概述,5.5IF语句概述,8线|3线优先编码器的设计,5.5IF语句概述,5.6半整数与奇数分频电路设计,在实用数字系统设计中常需要完成不同类型的分频。对于偶数次分频并要求以50%占空比输出的电路是比较容易实现的。但却无法用相同的设计方案直接获得奇数次分频且占空比也是50%的电路。,图5-15所示的电路是一个占空比为50%的任意奇数次分频电路。其中的M3目前是一个模3计数器,它可以设置为任意模计数器,从而实现整个电路的任意次奇数分频功能。其仿真波形图如图5-16所示。,5.6半整数与奇数分频电路设计,5.6半整数与奇数分频电路设计,接下页,5.6半整数与奇数分频电路设计,接上页,5.6半整数与奇数分频电路设计,5.7仿真延时,延时是VHDL仿真需要的重要特性设置,为设计而建立的精确的延时模犁,可以使用VHDL仿真器得到接近实际的精确结果。在FPGA/CPLD设计过程中,源文件一般不需要建立延时模型,因为EDA软件可以使用门级仿真器对选定的FPGA或CPLD适配所得的时序仿真文件进行精确仿真。VHDL中有两类延时模型能用于行为仿真建模,即固有延时和传输延时。本节介绍对VHDL进行行为仿真时必须考虑的信号延时情况,同时对前面多次出现的延时的概念作进一步的说明。,5.7仿真延时,5.7.1固有延时,固有延时(InertialDelay)也称为惯性延时,是任何电子器件都存在的一种延时特性。,在VHDL仿真和综合器中,有个默认的固有延时量,它在数学上是一个无穷小量,被称为延时,或称仿真。这个延时量的设置仅为了仿真,它是VHDL仿真器的最小分辨时间,并不能完全代表器件实际的惯性延时情况。在VHDL程序的语句中如果没有指明延时的类型与延时量,就意味着默认采用了这个固有延时量延时。在许多情况下,这一固有延时量近似地反映了实际器件的行为。,5.7仿真延时,5.7.2传输延时,5.7.3仿真,5.8VHDL的RTL表述,从前几章可以看出,VHDL的模块结构具体描述整个设计实体的逻辑功能,对于所希望的电路功能行为,可以在模块中用不同的语句类型和描述方式来表达,对于相同的逻辑行为,可以有不同的语句表达方式。在VHDL模块中,这种不同的描述方式,或者说建模方法,传统上可归纳为行为描述、RTL描述和结构描述。通过这三种描述方法,或称描述风格,从不同的侧面描述模块的功能或行为方式。在实际应用中,为了能兼顾整个设计的功能、资源、性能等几方面的因素,通常混合使用这三种描述方式。不过“RTL描述”一词,存许多文献中已成为可综合的硬件描述语言的代名词。即通常把一个完整的、可综合的HDL程序设计构建为设计实体(独立的电路功能结构),而其程序代码被称为RTL(RegisterTransportLevel)描述,它未必必须包含寄存器。,5.8VHDL的RTL表述,5.8.1行为描述,5.8VHDL的RTL表述,5.8.1行为描述,5.8VHDL的RTL表述,5.8.2数据流描述,5.8.3结构描述,结构描述建模步骤如下:元件说明:描述局部接口。元件例化:相对于其他元件放置元件。元件配置:指定元件所用的设计实体。,习题,5-1什么是固有延时?什么是惯性延时?5-2是什么?在VHDL中,有什么用处?5-3哪些情况下需要用到程序包STD_LOGIC_UNSIGNED?试举一例。5-4说明信号和变量的功能特点,以及应用上的异同点。5-5什么是重载函数?重载算符有何用处?如何调用重载算符函数?5-6在VHDL设计中,给时序电路清零(复位)有两种不同方法,它们是什么,如何实现?5-7用循环语句设计一个7人投票表决器,及一个4位4输入最大数值检测电路。5-8从不完整的条件语句产生时序模块的原理看,例5-7和例5-10从表面上看都包含不完整条件语句,试说明,为什么它们的综合结果都是组合电路。5-9设计一个求补码的程序,输入数据是一个有符号的8位二进制数。,习题,5-10设计一个比较电路,当输入的8421BCD码大于5时输出1,否则输出0。5-11用原理图或VHDL输入方式分别设计一个周期性产生二进制序列01001011001的序列发生器,用移位寄存器或用同步时序电路实现,并用时序仿真器验证其功能。5-12基于原理图输入方式,用74194、74273、D触发器等器件组成8位串入并出的转换电路,要求在转换过程中数据不变,只有当8位一组数据全部转换结束后,输出才变化一次。5-13设计8位左移移位寄存器,给出时序仿真波形。5-14将例5-15中的四个IF语句分别用四个并列进程语句表达出来。,实验与设计,5-1半整数与奇数分频器设计(1)实验目的:(2)实验内容1:(3)实验内容2:(4)实验内容3:(5)实验内容4:,实验与设计,5-2简易分频器设计(1)实验目的:(2)实验内容1:(3)实验内容2:(4)实验内容3:5E+系统演示示例:

温馨提示

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

最新文档

评论

0/150

提交评论