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

下载本文档

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

文档简介

第8章VHDL设计深入

VHDL设计深入尽管前面我们对VHDL所涉及的语法做了比较详细的说明及示例诠释,但依然存在有待深入探讨的问题,及系统性归纳阐述的必要,以便我们更好的掌握VHDL数字系统设计技术。28.1数据对象

8.1.1常数

常数的定义和设置主要是为了使程序更容易阅读和修改。常数定义语句:示例:常数定义范围:实体、结构体、程序包、块、进程和子程序38.1数据对象

8.1.1常数

特点:1.全局性

在程序中,常量是一个不变的值,一旦做了数据类型和赋值定义后,在程序中就不能再改变,因而具有全局性意义。2.可视性

即常数的使用范围取决于它被定义的位置。

程序包实体结构体属于此结构体的任意单元与进程48.1数据对象

8.1.2变量

变量的赋值是一种理想化的数据传输,是立即发生的,不存在任何延时行为。其主要作用是在进程中作为临时的数据存储单元。变量定义语句及示例:变量赋值语句及示例:变量定义范围(局部量):进程、子程序5初始值非必须8.1数据对象

8.1.3信号

信号定义语句:信号赋值语句:信号的定义和使用范围:信号是描述硬件系统的基本数据对象。作为一种数值的容器,不但可以容纳当前值,也可以保持历史值。实体、结构体、程序包。在进程和子进程的顺序语句中不允许定义信号,但可使用,即赋值;进程中只能将信号列入敏感表,而对变量不敏感。process(clk,en)68.1数据对象

8.1.3信号

信号的赋值可以出现在一个进程中,也可以直接出现在结构体的并行语句结构中,但两者的赋值含义是不一样的:1.前者(进程)属于顺序信号赋值,这时的信号赋值操作要视进程是否已被启动,并且允许对同一目标信号进行多次赋值;2.后者(结构体)属于并行信号赋值,其赋值操作是各自独立并行地发生的,且不允许对同一目标信号进行无条件的多次赋值。示例:7√但,不同进程中不允许对对同一信号赋值。8.1数据对象

8.1.3信号

after语句描述赋值延迟的赋值语句还可构建在不同时间序列中对同一信号进行赋值的语句表述。信号赋值语句:示例:

after

xns语句也仅对VHDL仿真有效,无法综合出任何对应的硬件电路。8初始值8.1数据对象

8.1.4进程中的信号赋值与变量赋值

准确理解和把握一个进程中的信号和变量赋值行为的特点以及它们功能上的异同点,对利用VHDL进行正确的电路设计十分重要。98.1数据对象

8.1.4进程中的信号赋值与变量赋值

信号与变量适用范围示例:两者综合的结果相同:变量的定义与赋值只能在进程内信号的定义不能在进程内但赋值可内可外108.1数据对象

8.1.4进程中的信号赋值与变量赋值

信号与变量行为特性示例:?Why?118.1数据对象

8.1.4进程中的信号赋值与变量赋值

进程中的赋值行为应该注意以下三点:

1.信号的赋值需要有一个δ延时

。2.一个进程中的所有赋值语句,包括信号赋值和变量,都必须在一个δ延时内完成(变量在δ延时前即已完成赋值),即一个进程的运行时间固定为一个δ延时。在进程中的顺序赋值是以并行的方式“同时”完成的,执行赋值操作和完成赋值是两个不同的概念。3.当在进程中存在同一信号有多个赋值源(即对同一信号发生多次赋值)时,实际完成赋值的信号是最接近endprocess语句的信号。128.1数据对象

8.1.4进程中的信号赋值与变量赋值

执行赋值与完成赋值示例:

e1在5ns+δ被执行赋值,在5ns+

2δ完成赋值(即更新)c1的执行赋值与完成赋值时间都是5ns+δ。δ138.1数据对象

8.1.4进程中的信号赋值与变量赋值

信号与变量的差别示例:4选1多路选择器的错误描述:此三行并行执行根据进程中信号的赋值规则,只有第三行中的muxval得到更新,但由于muxval<=0并未完成赋值,故红框内的muxval始终是个未知数,这就导致了仿真时序的不正确。错误的仿真结果:148.1数据对象

8.1.4进程中的信号赋值与变量赋值

信号与变量的差别示例:4选1多路选择器的正确描述:正确的仿真结果:i0i2i1i3158.2含高阻输出的电路设计8.2.1三态门设计(知识回顾)

概述:三态指其输出既可以是一般二值逻辑电路的正常的高电平(逻辑1)或低电平(逻辑0),又可以保持特有的高阻抗状态(Z)。处于高阻抗状态时,输出电阻很大,相当于开路,没有任何逻辑控制功能。高阻态的意义在于实际电路中不可能断开电路。

三态电路的输出逻辑状态的控制,是通过一个输入引脚实现的。举例:内存里面的一个存储单元,读写控制线处于低电位时,存储单元被打开,可以向里面写入;当处于高电位时,可以读出。但是不读不写,就要用高电阻态,此时的节点处于悬空(不被拉到VDD或者GND)的状态,没有电路驱动他。应用:如果你的设备端口要挂在一个总线上,必须通过三态缓冲器。因为在一个总线上同时只能有一个端口作输出,这时其他端口必须在高阻态,同时可以输入这个输出端口的数据。

168.2含高阻输出的电路设计8.2.1三态门设计

实例:8位三态控制门电路:必须大写:IEEE库中对数据类型std_logic的预定义已经将高阻态确定为大写’Z’。178.2含高阻输出的电路设计8.2.2双向端口的设计方法

用Inout端口模式设计双向端口也必须考虑三态的使用,因为双向端口的设计与三态端口的设计十分相似,都必须考虑端口的三态控制。

由于双向端口在完成输入功能时,必须使原来呈输出模式的端口呈高阻态,否则,待输入的的外部数据势必会与端口处原有电平发生“线与”,导致无法将外部数据正确地读入。188.2含高阻输出的电路设计8.2.2双向端口的设计方法

双向端口的错误描述:错误的仿真结果:不完整:没有体现q的输出功能。导致:1.q的仿真符号仅为输出符号2.锁存器的产生198.2含高阻输出的电路设计8.2.2双向端口的设计方法

双向端口的正确描述:前者体现q的输出功能;后者体现q的输入功能。产生正确的仿真结果:1.q为输入输出符号2.消除了锁存器208.2含高阻输出的电路设计8.2.3三态总线电路设计

三态总线设计示例:8位4通道的三态总线驱动器错误描述:四个顺序完成的IF语句,为什么会综合出错误的结果呢?这是因为在进程中,顺序等价的语句,包括赋值语句和if语句等,当它们列于同一进程敏感表中的信号同时变化时,只可能对进程结束前的那一条赋值语句进行赋值操作,而忽略其上的所有等价语句。产生错误的仿真结果:除input0外,其余三个8位输入端都悬空,没能用上。218.2含高阻输出的电路设计8.2.3三态总线电路设计

三态总线设计示例:8位4通道的三态总线驱动器正确描述:四个并列的when-else并行语句综合出正确的电路结构:这是因为在结构体中,每一条并行语句都等同于一个独立运行的进程,它们的地位是平等的,它们独立且不冲突第监视各并行语句中作为敏感信号的输入值ctl。即当ctl变化时,四条when-else语句始终有一条语句被执行。产生正确的RTL电路(见设计文件)及仿真结果:228.3顺序语句归纳

8.3.1进程语句格式

一个结构体中,允许放置任意多个进程语句结构,而每一进程的内部都是由一系列顺序语句构成的。VHDL中的顺序仅是程序上的,并不意味着综合后的硬件逻辑行为也具有顺序性。1.一个结构体中可以含有多个Process结构;2.每一个Process结构对于其敏感信号参数表中定义的任一敏感参量的变化,可在任

何时刻被激活或称为启动;3.所有被激活的进程都是并行运行的;4.必须以endprocess结束进程,[is][进程标号]…可缺省。238.3顺序语句归纳

8.3.2进程结构组成

1.进程说明部分:

主要定义一些除信号和共享变量外的局部变量,如数据类型、常数、变量、属性、子程序等。

2.顺序描述部分:

信号赋值语句、变量赋值语句、进程启动语句(敏感信号参数表或wait语句)、子程序调用语句、顺序描述语句(if、case、loop等)、进程跳出语句(next、exit等)。

3.多数VHDL综合器要求敏感信号表必须列出本进程中所有输入信号名。

248.3顺序语句归纳

8.3.3进程要点

Process为一无限循环语句

进程只有两种状态:执行和等待。

2.进程中的顺序语句具有明显的顺序和并行双重性

在同一process中,10条语句和1000条语句的执行时间是一样的。这和软件语言是有本质区别的。3.信号可以是多个进程间的通信线

结构体中多个进程之所以能并行同步运行,一个很重要原因是进程之间的通信是通过具有全局特性的信号来实现的。4.一个进程中只允许描述对应于一个时钟信号的同步时序逻辑

时序电路必须由进程中的顺序语句描述,而此顺序语句必须由不完全条件语句构成。尽管在同一个进程中可顺序放置多个条件语句(如if语句),但是推荐只放置一个含有时钟边沿检测语句的条件语句。258.4并行赋值语句讨论并行语句并不等同于总是并行且同时被执行。例如进程,除非几个进程都是拥有完全相同的敏感信号,否则不可能出现完全并行运行的情况。这两个语句虽然属于并行语句,但绝大多数情况下并不可能同时执行,除非a、b、c严格同时发生变化。并行赋值语句也包含了类似进程的顺序语句特性:

假设在某一稳态条件下s0=0,s1=0;a、b、c、d均为0,此时x=0。现在假设a发生了一个事件,变为1,这时上面select赋值语句并不会被执行,因为此句并不对a敏感。这时只会执行红框内语句,因为只有其对a敏感,这时x将从原来的0变为1268.5IF语句概述

IF语句是VHDL设计中最重要和最常用的顺序条件语句,可分为以下四类:1.非完整条件语句多用来产生时序电路2.完整条件语句多用来产生组合电路3.嵌套式条件语句组合、时序电路均可产生4.多分支条件语句组合、时序电路均可产生具有向上逻辑相与的功能?278.5IF语句概述

实例:利用多分支向上逻辑相与的功能实现8-3线优先编码器。288.6仿真延时8.6.1固有延时(信号的持续时间)8.6.2传输延时(并不考虑信号持续的时间,它仅表示信号传输推迟或延迟了一个时间段。)8.6.3仿真理解:综合器不支持延时语句,干脆给并行语句和顺序语句一个

的统一延时解决客观存在的问题。延时是VHDL仿真需要的重要特性,为设计而建立的精确的延时模型,可以使用VHDL仿真器得到接近实际的精确结果。VHDL中有两类延时模型能用于行为仿真建模:固有延时和传输延时298.7VHDL的描述风格

VHDL的模块结构具有描述整个设计实体的逻辑功能,对于所希望的电路功能行为,可以在模块中用不同的语句类型和描述方

温馨提示

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

评论

0/150

提交评论