第8章设计深入_第1页
第8章设计深入_第2页
第8章设计深入_第3页
第8章设计深入_第4页
第8章设计深入_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

1、第第8 8章章 VHDLVHDL设计深入设计深入 8.1 8.1 数据对象数据对象 8.1.1 8.1.1 常数常数 数据对象是指用来保存数据的客体单元。在VHDL中,数据对象有三类:即变量(Variable)、常量(Constant)和信号(Signal)。通常,常数的定义和设置主要是为了使程序更容易阅读和修改。在程序中,常量是一个恒定不变的值,一旦作了数据类型和赋值定义后,在程序中就不能再改变。8.1 8.1 数据对象数据对象 VHDL要求所定义的常量数据类型必须与表达式的数据类型一致。常数定义语句所允许的设计单元有实体、结构体、程序包、块、进程和子程序。 常数的可视性,即常数的使用范围取

2、决于它被定义的位置。如果在程序包中定义,常数具有最大的全局化特征,可以用在调用此程序包的所有设计实体中;常数如果定义在设计实体中,其有效范围为这个实体定义的所有结构体(如含多结构体时);如果常数定义在设计实体的某一结构体中,则只能用于此结构体中;如果常数定义在结构体的某一单元,如一个进程中,则这个常数只能用在这一进程中。8.1 8.1 数据对象数据对象 8.1.2 8.1.2 变量变量 在VHDL语法规则中,变量是一个局部量,只能在进程和子程序中使用。变量不能将信息带出对它作出定义的当前结构。变量的赋值是一种理想化的数据传输,是立即发生的,不存在任何延时行为。变量的主要作用是在进程中作为临时的

3、数据存储单元。 定义变量的一般表述如下:变量赋值的一般表述如下:8.1 8.1 数据对象数据对象 8.1.2 8.1.2 变量变量 在变量定义语句中可以定义初始值,这是一个与变量具有相同数据类型的常数值,这个表达式的数据类型必须与所赋值的变量一致。通常,定义的初始值仅对HDL仿真器是有效的。8.1 8.1 数据对象数据对象 8.1.3 8.1.3 信号信号 信号是描述硬件系统的基本数据对象。信号可以作为设计实体中并行语句模块间的信息交流通道。信号定义的语句格式与变量相似,信号定义也可以设置初始值,定义格式如下: 事实上,除了没有方向说明以外,信号与实体中的端口(Port)概念是一致的。对于端口

4、来说,其区别只是输出端口不能读入数据,输入端口不能被赋值。信号可以看成是实体内部(设计芯片内部)的端口。在实体中定义的端口,在其结构体中都可以看成是一个信号,并加以使用,而不必另作定义。8.1 8.1 数据对象数据对象 8.1.3 8.1.3 信号信号 信号的使用和定义范围是实体、结构体和程序包。在进程和子程序的顺序语句中不允许定义信号,且在进程中只能将信号列入敏感表,而不能将变量列入敏感表。可见进程只对信号敏感,而对变量不敏感。 当对信号定义了数据类型和表达方式后,在VHDL设计中就能对信号进行赋值了。信号的赋值语句表达式如下: 与初始值的设置一样,AFTER x ns语句也仅对VHDL仿真

5、有效,因而无法综合出任何对应的硬件电路。8.1 8.1 数据对象数据对象 8.1.3 8.1.3 信号信号 信号的赋值可以出现在一个进程中,也可以直接出现在结构体的并行语句结构中。前者属顺序信号赋值,这时的信号赋值操作要视进程是否已被启动,并且允许对同一目标信号进行多次赋值;后者属并行信号赋值,其赋值操作是各自独立并行地发生的,且不允许对同一目标信号进行多次赋值。 在进程中,可以允许同一信号有多个驱动源(赋值源),即在同一进程中存在多个同名的信号被赋值,其结果只有最后的赋值语句被启动,并进行有效赋值操作。例如:8.1 8.1 数据对象数据对象 8.1.3 8.1.3 信号信号 用AFTER语句

6、描述赋值延迟的赋值语句还可构建在不同时间序列中对同一信号进行赋值的语句表述,具体语法格式如下: 特别注意此语句中,对“赋值目标”进行赋值的v0、v1、v2等值是按先后顺序进行的,然而AFTER指定的时问却是同时开始计时的。8.1 8.1 数据对象数据对象 8.1.4 8.1.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 8.1 8.1 数据对象数据对象 8.1.4 8.1.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 8.1 8.1 数据对象数据对象 8.1.4 8.1.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 8.1 8.1 数据对象数据对象 8.1.

7、4 8.1.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 8.1 8.1 数据对象数据对象 8.1.4 8.1.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 8.1 8.1 数据对象数据对象 8.1.4 8.1.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 对十进程中的赋值行为应该注意以下三点: (1)信号的赋值需要有一个延时,例如当执行到例8-3中的表达式A=D时,D向A的赋值是在一个延时后发生的,此时A并未得到更新,即A并未获得D的值。 (2)一个进程中的信号赋值必须在一个延时内完成,即一个进程的运行时间固定为一个延时。在顺序执行到END PROCESS

8、语句时,延时才结束,因此此时在进程中的所有信号赋值操作是同时完成赋值的(即令赋值对象的值发生更新)。即在进程中的顺序赋值是以并行的方式“同时”完成的,并且是在执行到END PROCESS语句时才发生。 (3)当在进程中存在同一信号有多个赋值源(时,实际完成赋值,即赋值对象的值发生更新的信号是最接近END PROCESS语句的信号。8.1 8.1 数据对象数据对象 8.1.4 8.1.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 8.1 数据对象数据对象 8.1.4 进程中的信号赋值与变量赋值进程中的信号赋值与变量赋值 8.1 数据对象数据对象 8.1.4 进程中的信号赋值与变量赋值

9、进程中的信号赋值与变量赋值 8.2 8.2 含高阻输出的电路设计含高阻输出的电路设计 8.2.1 8.2.1 三态门设计三态门设计 8.2 8.2 含高阻输出的电路设计含高阻输出的电路设计 8.2.1 8.2.1 三态门设计三态门设计 (1)将某信号定义为STD_LOGIC数据类型,将Z赋给这个信号来获得三态控制门电路。一个Z表示一个逻辑位,这是由于STD LOGIC数据类型中含有元素Z。 (2)对于VHDL综合前的行为仿真与综合后功能仿真结果有可能是不同的,有时虽然能通过综合,但却不能获得正确的时序仿真结果。 (3)对于一般关键词,VHDL语法规定不区分大小写,但当把表示高阻态的Z值赋给一个

10、数据类型为STD_LOGIC的变量或信号时,Z必须是大写。8.2 8.2 含高阻输出的电路设计含高阻输出的电路设计 8.2.2 8.2.2 双向端口的设计方法双向端口的设计方法 用INOUT端口模式设计双向端口也必须考虑三态的使用,因为双向端口的设计与三态端口的设计十分相似,都必须考虑端口的三态控制。这是由于双向端口在完成输入功能时,必须使原来呈输出模式的端口呈高阻态,否则,待输入的外部数据势必会与端口处原有电平发生“线与”,导致无法将外部数据正确地读入,而实现“双向”功能。8.2 8.2 含高阻输出的电路设计含高阻输出的电路设计 8.2.2 8.2.2 双向端口的设计方法双向端口的设计方法

11、利用q的输入功能将q端口的数据读入并传输给x(即执行x=q)时,没有将q的端口设置成高阻态输出8.2 8.2 含高阻输出的电路设计含高阻输出的电路设计 8.2.2 8.2.2 双向端口的设计方法双向端口的设计方法 8.2 含高阻输出的电路设计含高阻输出的电路设计 8.2.3 8.2.3 三态总线电路设计三态总线电路设计 8.2 8.2 含高阻输出的电路设计含高阻输出的电路设计 8.2.3 8.2.3 三态总线电路设计三态总线电路设计 8.2 8.2 含高阻输出的电路设计含高阻输出的电路设计 8.2.3 8.2.3 三态总线电路设计三态总线电路设计 8.3 8.3 顺序语句归纳顺序语句归纳 8.

12、3.1 8.3.1 进程语句格式进程语句格式 在一个结构体中,允许放置任意多个进程语句结构,进程之间是并行执行。每一进程的内部是顺序执行。 所谓顺序仅是相对于计算机中的HDL行为仿真的模拟过程而言的,这个过程与硬件结构中实现的对应的逻辑行为是不完全相同的。 PROCESS结构中既可以有时序逻辑的描述,也可以有组合逻辑的描述,它们都可以用顺序语句来表达。8.3 8.3 顺序语句归纳顺序语句归纳 8.3.2 8.3.2 进程结构组成进程结构组成 PROCESS语句结构是由三个部分组成的,即进程说明部分、顺序描述语句部分和敏感信号参数表。 (1)进程说明部分主要定义一些局部量,可包括数据类型、常数、

13、变量、属性、子程序等。但需注意,在进程说明部分不允许定义信号和共享变量。 (2)顺序描述语句部分可分为赋值语句、进程启动语句、子程序调用语句、顺序描述语句和进程跳出语句等。 (3)敏感信号表列出本进程中能够启动进程的信号。当进程的敏感信号参数表中没有列出任何敏感量时,进程的启动只能通过进程启动语句。8.3 8.3 顺序语句归纳顺序语句归纳 8.3.3 8.3.3 进程要点进程要点 1. PROCESS1. PROCESS为一无限循环语句为一无限循环语句 同一结构体中的任一进程是一个独立的无限循环程序结构,但进程中却不必放置诸如软件语言中的返回语句,它的返回是自动的。进程只有两种运行状态,即执行

14、状态和等待状态。8.3 8.3 顺序语句归纳顺序语句归纳 8.3.3 8.3.3 进程要点进程要点 2. 进程中的顺序语句具有明显的顺序和并行双重性进程中的顺序语句具有明显的顺序和并行双重性 PROCESS中的顺序语句的“执行”方式与通常的软件语言中的语句的顺序执行方式有很大的不同。软件语言中每一条语句的执行是按CPU的机器周期的节拍顺序执行的,每一条语句执行的时间是确定的。但在PROCESS中,一个执行状态的运行周期,即从PROCESS的启动执行到遇到END PROCESS为止所花的时问与任何外部因素都无关(从综合结果来看)。 从行为仿真的角度看(如果没有设置任何显式的惯性或传输延时),只有

15、一个VHDL模拟器的最小分辨时间,即一个时间;但从综合和硬件运行的角度看,其执行时间是0,这与信号的传输延时无关,与被执行的语句的实现时间也无关。8.3 8.3 顺序语句归纳顺序语句归纳 8.3.3 8.3.3 进程要点进程要点 3. 信号可以是多个进程间的通信线信号可以是多个进程间的通信线 4. 一个进程中只允许描述对应于一个时钟信号的同步时序逻辑一个进程中只允许描述对应于一个时钟信号的同步时序逻辑 结构体中多个进程之所以能并行同步运行,一个很重要的原因是进程之间的通信是通过信号来实现的。 尽管在同一进程中可顺序放置多个条件语句(如IF语句),但是只能放置一个含有时钟边沿检测语句的条件语句,

16、即一个进程中只能描述针对于同一时钟的同步时序逻辑,而异步时序逻辑或多时钟同步逻辑必须由多个进程来表达。8.4 8.4 并行赋值语句讨论并行赋值语句讨论 并行语句并不等于总是并行且同时被执行。8.5 IF8.5 IF语句概述语句概述 IF语句是VHDL设计中最重要和最常用的顺序条件语句。IF语句的结构大致可归纳成以下四种类型:8.5 IF8.5 IF语句概述语句概述 一个8-3线优先编码器的设计8.5 IF8.5 IF语句概述语句概述 8.6 8.6 仿真延时仿真延时 延时是VHDL仿真需要的重要特性设置,为设计而建立的精确的延时模型,可以使用VHDL仿真器得到接近实际的精确结果。 在FPGA/

17、CPLD设计过程中,源文件一般不需要建立延时模型,因为EDA软件可以使用门级仿真器对选定的FPGA或CPLD适配所得的时序仿真文件进行精确仿真。 VHDL中有两类延时模型能用于行为仿真建模,即固有延时和传输延时。8.6 8.6 仿真延时仿真延时 8.6.1 8.6.1 固有延时固有延时 固有延时(Inertial Delay)也称为惯性延时,是任何电子器件都存在的一种延时特性。固有延时的主要物理机制是分布电容效应。分布电容产生的因素很多,它具有吸收(短路)脉冲能量的效应。当输入器件的信号脉冲宽度小于器件输入端的分布电容对应的时间常数时,或者说小于器件的惯性延时宽度时,即使脉冲有足够高的电平,也

18、无法突破数字器件的阈值电平实现信号输出的目的,从而在输出端不会产生任何变化。8.6 8.6 仿真延时仿真延时 8.6.2 8.6.2 传输延时传输延时 另一种延时模型是传输延时(Transport Delay)。传输延时与固有延时相比,其不同之处在于传输延时表达的是输入与输出之间的一种绝对延时关系。传输延时并不考虑信号持续的时间,它仅表示信号传输推迟或延迟了一个时问段,这个时间段即为传输延时。8.6 8.6 仿真延时仿真延时 8.6.3 8.6.3 仿真仿真 在VHDL语言仿真中,仿真(即仿真中的延时)是至关重要的。它能使那些零延时事件得到适当的排队,以便在仿真过程中得到一致的结果。 VHDL

19、语言所描述的仅仅是系统的行为和构造,最终表现为门电路之间的连接关系。因此,在处理中对某些部分先处理,对另外一些部分后处理并不要求有非常严格的顺序关系。 但在实际仿真过程中,仿真次序不一致就会产生不同的仿真结果。8.6 8.6 仿真延时仿真延时 8.6 8.6 仿真延时仿真延时 n上面分析显示了仿真次序的不一致造成的不同仿真结果,这当然是不允许的。为了取得与硬件动作一致的仿真结果,EDA仿真工具必须引入一个适当的仿真同步机制,使仿真结果和处理次序先后无关。这种仿真同步机制就是延时同步机制或称仿真机制。n所谓延时同步机制就是对那些零延时事件,在仿真中加一个无限小的时间量,例如在VHDL语言中时间量

20、的最小单位为1fs(1015s),那么延时就不能超过这个值。也就是说即使加有限个延时的时间量,也决不会超过仿真时间的最小分辨率。8.6 8.6 仿真延时仿真延时 8.7 VHDL8.7 VHDL的描述风格的描述风格 8.7.1 RTL8.7.1 RTL描述描述 从前几章可以看出,VHDL的模块结构具有描述整个设计实体的逻辑功能,对于所希望的电路功能行为,可以在模块中用不同的语句类型和描述方式来表达,对于相同的逻辑行为,可以有不同的语句表达方式。这种不同的描述方式,或者说建模方法,传统上可归纳为行为描述、RTL描述和结构描述,也有分为所谓数据流建模、行为级建模、结构化建模的。通过这三种描述方法,

21、或称描述风格,从不同的侧面描述模块的功能或行为方式。RTL(Register Transport Level) 级描述是以规定设计中的各种寄存器形式为特征,然后在寄存器之间插入组合逻辑。现在所谓的RTL仿真,即功能仿真就是指不涉及电路细节(如门级细节)的RTL模块级构建的系统的仿真;而涉及电路细节和时序性能的时序仿真就称为门级仿真。8.7 VHDL8.7 VHDL的描述风格的描述风格 8.7.1 RTL8.7.1 RTL描述描述 此概念进入EDA技术领域后,有了进一步的引申,且向两个不同的方向分化: (1)硬件描述语言HDL中包含可综合与不可综合(主要用于仿真)的语句,用可综合的语句构建的电路

22、描述代码可以通过HDL综合器生成可实现的电路,于是就把一切用可综合的语句表述的,可由综合器生成实际电路的HDL代码形式称为RTL描述。 (2)将RTL表述确定为数字系统表述的某一层次级别,即RTL级(可用电路模块表述的电路层次,与此对应的电路就称为RTL电路),在其之上分别是行为级(只能用HDL语言表述)和系统级(最高级);在RTL下,依次还有门级(也称技术级,即对应集成电路底层基本电路单元)、晶体管级和物理级。8.7 VHDL8.7 VHDL的描述风格的描述风格 8.7.2 8.7.2 行为描述行为描述 所谓行为描述就是只表达输入与输出间转换的行为,它不包含任何结构信息。 在应用VHDL进行

23、系统设计时,行为描述方式是最重要的逻辑描述方式,是VHDL编程设计的核心。因此只有VHDL作为硬件电路的行为描述语言,才能满足自项向下设计流程的要求,从而成为电子线路系统级仿真和设计的最佳选择。 8.7 VHDL8.7 VHDL的描述风格的描述风格 8.7.3 8.7.3 数据流描述数据流描述 数据流描述风格,传统上也称RTL描述方式。数据流描述主要是指非结构化的并行语句描述。 数据流的描述风格常常是建立在用连续赋值语句等并行语句描述基础上的。 当语句中任一输入变量的值发生改变时,赋值语句就被激活,随着这种语句对电路行为的描述,大量的有关这种结构的信息也从这种逻辑描述中“流出”。认为数据是从一

24、个设计中流出,从输入到输出流出的观点称为数据流风格。数据流描述方式能比较直观地表达底层逻辑行为。8.7 VHDL8.7 VHDL的描述风格的描述风格 8.7.4 8.7.4 结构描述结构描述 VHDL结构型描述风格是基于基本元件和底层模块例化语句的应用,利用这种语句可以用不同类型的结构来完成多层次的工程,即从简单的门到非常复杂的元件(包括各种已完成的设计实体子模块、LPM模块和各类IP核等)来描述整个系统。 结构描述就是表示元件之问的互连,这种描述允许互连元件的层次式安置,像网表本身的构建一样。元件的定义或使用声明以及元件例化是用VHDL实现层次化、模块化设计的手段,与传统原理图设计输入方式相

25、仿。 结构描述方式就是采用模块化设计思想,将一个大的设计划分为许多小模块,逐一设计调试完成,然后利用结构描述方法将其组装起来形成更为复杂的设计。8.7 VHDL8.7 VHDL的描述风格的描述风格 结构描述结构描述8.7 VHDL8.7 VHDL的描述风格的描述风格 数据流描述数据流描述8.7 VHDL8.7 VHDL的描述风格的描述风格 行为描述行为描述7.3.5 数据类型定义语句n除此前曾介绍过的一些标准的预定义数据类型,如整数类型INTEGER、布尔类型BOOLEAN、标准逻辑位类型STD_LOGIC等类型外,VHDL还允许用户自行定义新的数据类型。由用户定义的数据类型可以有多种,如枚举

26、类型(Enumeration Type)、整数类型(Integer Type)、数组类型(Array Type)、记录类型(Record Type)、时间类型(Time Type)、实数类型(Real Type)等。n用户自定义数据类型是用类型定义语句TYPE和子类型定义语句SUBTYPE实现的。7.3.5 数据类型定义语句nTYPE语句最常用的用法有如下两种: 第一种属于数组型数据类型定义语句, 第二种属于枚举型数据类型定义语句。 数组类型又分限定性数组和非限定性数组类型,VHDL允许定义这两种不同类型的数组。它们的区别是,限定性数组下标的取值范围在数组定义时就被确定了,而非限定性数组下标的

27、取值范围需留待随后确定。7.3.5 数据类型定义语句n数组类型属复合类型,是将一组具有相同数据类型的元素集合在一起,作为一个数据对象来处理的数据类型。数组可以是一维数组(每个元素只有一个下标)或多维数组(每个元素有多个下标)。nVHDL仿真器支持多维数组,VHDL综合器通常只支持一维和二维数组。数组的元素可以是任何一种数据类型,用以定义数组元素的下标范围子句决定了数组中元素的个数,以及元素的排序方向,即下标数是由低到高,或是由高到低。n限定性数绍定义语句格式如下:1. 限定性数组型数据类型定义限定性数组型数据类型定义 7.3.5 数据类型定义语句7.3.5 数据类型定义语句n数组的另一种定义方式就是不说明所定义的数组下标的取值范围,而是定义某一数据对象为此数组类型时,再确定该数组下标取值范围。这样就可以通过不同的定义取值,使相同的数据对

温馨提示

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

评论

0/150

提交评论