第1-1章 vhdl设计初步

上传人:aa****6 文档编号:50952370 上传时间:2018-08-11 格式:PPT 页数:83 大小:1.50MB
返回 下载 相关 举报
第1-1章 vhdl设计初步_第1页
第1页 / 共83页
第1-1章 vhdl设计初步_第2页
第2页 / 共83页
第1-1章 vhdl设计初步_第3页
第3页 / 共83页
第1-1章 vhdl设计初步_第4页
第4页 / 共83页
第1-1章 vhdl设计初步_第5页
第5页 / 共83页
点击查看更多>>
资源描述

《第1-1章 vhdl设计初步》由会员分享,可在线阅读,更多相关《第1-1章 vhdl设计初步(83页珍藏版)》请在金锄头文库上搜索。

1、VHDL 设计初 步物理科学与电子工程系参考资料v1 潘松,黄继业. EDA技术实用教程. 北京 ,科学出版社. 2002v2潘松,黄继业. 现代DSP技术. 西安,西 安电子科技大学出版社. 2003v VHDL是非常高速集成电路硬件描述语言 (Very High speed Integrated Circuit Hardware Description Language)的英文缩写。v语法和风格:(1)类似与现代高级编程语言,如C语言。(2)VHDL描述的是硬件,它包含许多硬件特有的结构。 VHDL程序的基本结构Include “stdio.h”; Include “math.h”;int

2、 main(void) int a,b,c;a=8;b=9;c=a+b;return c; Library IEEE; Use IEEE.STD_LOGIC_1164.all ; Entity and2 is Port( a, b : in bit;c : out bit); End and2; Architecture a1 of and2 is Beginc fb), 当s 为高电平时, y 输出fb,而当s 为低电平时, y 输出fa。显然,图3-3 的波型证实了VHDL 逻辑 设计的正确性。v注意, 以上各例的实体和结构体分别是以“ END ENTITY xxx ” 和“ END AR

3、CHITECTURE xx ”语 句结尾的,这是符合VHDL 的IEEE STD 1076_1993 版的语法要求的。若根据VHDL87 版本,即IEEE STD 1076_1987 的语法要求,这 两条结尾语句只需写成“END;”或“END xx”。但考 虑到目前绝大多数常用的EDA 工具中的VHDL 综 合器都兼容两种VHDL 版本的语法规则,且许多 最新的VHDL 方面的资料,仍然使用VHDL87版 本语言规则,因此,出于实用的目的,对于以后 出现的示例,不再特意指出VHDL 两种版本的语 法差异处。但对于不同的EDA 工具,仍需根据设 计程序不同的VHDL 版本表述,在综合前作相应 的

4、设置。v【例3-2】见文件夹Mux21a1ENTITY mux21a ISPORT ( a, b : IN BIT;s : IN BIT;y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a ISSIGNAL d,e : BIT;BEGINd ;USE ALL ;STD_LOGIC 数据类型定义在被称为STD_LOGIC_1164 的程序包中,此包由IEEE 定义,而且此程序包所在的程 序库的库名被取名为IEEE。由于IEEE 库不属于VHDL 标 准库,所以在使用其库中内容前,必须事先给予声明。即 如例3-6 最上的两句语句:L

5、IBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;正是出于需要定义端口信号的数据类型为STD_LOGIC 的目的,当然也可以定义为BIT类型或其他数据类型,但 一般应用中推荐定义STD_LOGIC 类型。 3. 信号定义和数据对象例3-6 中的语句“SIGNAL Q1:STD_LOGIC;”表示在 描述的器件DFF1 内部定义标识符Q1 的数据对象为信号 SIGNAL,其数据类型为STD_LOGIC。由于Q1 被定义为 器件的内部节点信号,数据的进出不像端口信号那样受限 制,所以不必定义其端口模式(如IN、OUT 等)。定义Q1 的目的是为了在设计更大的电路时

6、使用由此引入的时序电 路的信号,这是一种常用的时序电路设计的方式。事实上 ,如果在例3-6 中不作Q1 的定义,其结构体(如将其中的 赋值语句Q1 EVENT短语“clockEVENT”就是对clock 标识符的信号在当 前的一个极小的时间段内发生事件的情况进行检测。所谓 发生事件,就是clock 在其数据类型的取值范围内发生变 化,从一种取值转变到另一种取值(或电平方式)。如果 clock 的数据类型定义为STD_LOGIC,则在 时间段内 ,clock 从其数据类型允许的9 种值中的任何一个值向另 一值跳变,如由0变成1、由1变成0或由Z变成0,都 认为发生了事件,于是此表式将输出一个布尔

7、值true,否 则为false。如果将以上短语clockEVENT 改成语句: clockEVENT AND clock=1,则表示一旦“clockEVENT” 在时间内测得clock 有一个跳变,而此小时间段之后又测 得clock 为高电平1,即满足此语句右侧的clock =1的条 件,于是两者相与(AND)后返回值为true,由此便可以从当 前的clock =1推断在此前的 时间段内,clock必为0 (设 clock 的数据类型是BIT)。因此,以上的表达式就可以用来 对信号clock的上升沿进行检测,于是语句clockEVENT AND clock =1就成了边沿测试语句。 5. 不完

8、整条件语句与时序电路现在来分析例3-6 中对D 触发器功能的描述。首先考察时钟信号CLK 上升沿出现的情况(即满足IF 语句条件的情况)。当CLK 发生变化时,PROCESS 语句 被启动,IF 语句将测定条件表式“CLKEVENT AND CLK=1”是否满足条件,如果CLK 的确出现了上升沿,则 满足条件表式对是上升沿检测,于是执行语句Q1 b1 THEN q1 b1 THEN q1 = 1 ;ELSE q1 = 0 ; END IF;END PROCESS ;END ;图3-6 例3-8的电路图(Synplify综合 )图3-5 例3-7的电路图(Synplify综合)3.2.3 实现时

9、序电路的不同表述例3-6 通过利用表式“CLKEVENT AND CLK=1”来检 测CLK 的上升沿,从而实现了边沿触发寄存器的设计。事 实上,VHDL 还有其他多种实现时序元件的方式。严格地说,如果信号CLK 的数据类型是STD_LOGIC ,则它可能的取值有9 种,而CLKEVENT 为真的条件是 CLK 在9 种数据中的任何两种间的跳变,因而当表式:CLKEVENT AND CLK=1 为真时,并不能推定CLK 在 时刻前是0 (例如,它可以 从Z变到1),从而即使CLK 有“事件”发生也不能肯定CLK 发生了一次由0到1的上升沿的跳变。为了确保此CLK 发 生的是一次上升沿的跳变,例

10、3-9 采用了如下的条件判断 表式:CLKEVENT AND (CLK=1) AND (CLKLAST_VALUE=0)与EVENT 一样,LAST_VALUE 也属于预定义的信 号属性函数,它表示最近一次事件发生前的值。 CLKLAST_VALUE=0为TRUE,表示CLK 在 时刻前 为0。CLKEVENT AND CLK=1和CLKLAST_VALUE=0 相与为真的话,则保证了CLK在 时刻内的跳变是从0 变到1的。例3-9、3-10、3-11 都有相同的用意,只是例 3-11 调用了一个测定CLK 上升沿的函数rising edge( )。rising edge( )是VHDL 在I

11、EEE 库中标准程序包 STD_LOGIC_1164 内的预定义函数,这条语句只能用于 标准逻辑位数据类型STD_LOGIC 的信号。因此必须打开 IEEE 库和程序包STD_LOGIC_1164,然后定义相关的信 号(如CLK)的数据类型为标准逻辑位数据类型 STD_LOGIC。在此CLK 的数据类型必须是STD_LOGIC 。测下降沿可用的语句有:falling edge( )、 CLKEVENT AND (CLK=0) 、CLK=0 AND CLKLAST_VALUE=1 等。【例3-9】 .PROCESS (CLK)BEGINIF CLKEVENT AND (CLK=1) AND (C

12、LKLAST_VALUE=0)THEN Q = D ; -确保CLK的变化是一次上升沿的跳变END IF;END PROCESS ; 【例3-10】 .PROCESS (CLK)BEGINIF CLK=1 AND CLKLAST_VALUE=0 -同例3-9THEN Q = D ;END IF;END PROCESS ;【例3-11】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 ISPORT (CLK,D : IN STD_LOGIC ;Q : OUT STD_LOGIC );END ;ARCHITECTURE bhv OF

13、 DFF3 ISSIGNAL Q1 : STD_LOGIC;BEGINPROCESS (CLK)BEGINIF rising_edge(CLK) - 必须打开STD_LOGIC_1164程序包THEN Q1 = D ;END IF;END PROCESS ;Q = Q1 ; -在此,赋值语句可以放在进程外,作为并行赋值语句 END ;例3-12 则是利用了一条wait until 语句实现时序电路设 计的,含义是如果CLK 当前的值不是1,就等待并保持Q 的原值不变,直到CLK 变为1时才对Q 进行赋值更新。 VHDL要求,当进程语句中使用wait 语句后,就不必列出 敏感信号。例3-13 描

14、述的D 触发器的CLK边沿检测是由 PROCESS 语句和IF 语句相结合实现的。其原理是:当 CLK 为0时,PROCESS 语句处于等待状态,直到发生一 次由0到1的跳变才启动进程语句,而在执行IF 语句时, 又满足了CLK 为1的条件,于是对Q 进行赋值更新,而此 前,Q 一直保持原值不变,直到下一次上跳时钟边沿的到 来。因此例3-9 至例3-13描述的都是相同的D 触发器,其 电路的仿真测试波形如图3-7 所示。由波形可见,Q 的变 化仅发生于CLK 的上升后。与例3-13 相比,例3-14 仅在敏感信号表中多加了电 路输入信号D,但综合后的电路功能却发生了很大的变化 。由时序图3-8

15、 可见,它表现的是电平式触发的锁存器功 能,与图3-7 表现的波形有很大的区别。在CLK 处于高电 平时,输出Q 随D 的变化而变化,而CLK仅在低电平时保 持数据不变。由例3-14 的语句分析可知,当CLK为1不变时,输 入数据D 的任何变化都会启动进程PROCESS,从而实现 输出信号Q 的更新,而当CLK 原来为0时,即使由于D 的 变化启动了PROCESS,但由于不满足IF 语句的条件,Q 仍然必须处于数据原值保存的状态。显然,例3-14 提供了 一个电平型触发的时序元件(锁存器)的设计方法。但需要指出,此类功能只有MaxplusII、QuartusII 等 EDA 工具中含有,许多其

16、他VHDL综合器不承认这类语法 表述,它们都要求将进程中的所有输入信号都列进敏感信 号表中,否则给予警告信息。因此,对于这种综合器,无 法利用此类表述实现电平型触发的时序元件,显然,具体 情况需要根据设计者使用的EDA 软件的功能具体确定。在 一般情况下,不推荐使用例3-14 的表达方式产生时序电路 。由例3-9 至例3-14 可见,时序电路的建立只能利用 进程中的顺序语句来建立。此外,考虑到多数综合器并不 理会边沿检测语句中的信号的STD_LOGIC 数据类型,因 此最常用和通用的边沿检测表式仍然是CLKEVENT AND CLK=1。【例3-12】 .PROCESSBEGINwait until CLK = 1 ; -利用

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > 教育/培训/课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号