数字电路域逻辑设计4-5.ppt
文本预览下载声明
判断逻辑电路存在竞争冒险可能的方法有很多,也比较复杂。特别是如果输入的变量数目较多,很难进行判别。目前已有较成熟的计算机辅助分析。 我们主要了解如何防止竞争冒险。 4.4 VHDL描述组合逻辑电路 1.VHDL表达式 表达式中包括变量与信号. 定义: VARIABLE 变量名:类型名 SIGNAL 信号名:类型名 赋值: 变量名:=值 信号名=值 2.VHDL运算符:其中逻辑运算符用得最多. 3.数据类型 预定义: BIT;BIT_VECTOR;BOOLEAN;INTEGER; CHARACTER 用户自定义:枚举类型;数组类型;子类型 4. 并行语句 5.顺序描述语句 6.结构描述 结构描述是描述电路之间的连接.也就是组成电路系统各部件之间的连接.这些部件可以来自于库,也可以是用户自定义的.结构描述包括以下二部分: 部件声明语句(COMPONENT语句):要使用用户已经定义好的部件,必须先声明,格式为:见书. 部件描述语句(PORT MAP语句):PORT MAP语句其实是说明实际部件上的端口与被调用部件上的端口的对应关系. (后详,略) 例4-14 二选一数据选择器 主要有3种方法描述 数学模型描述:直接从逻辑关系进行描述. 用RTL描述方式(硬件描述语言方式):这种方法能够体现出VHDL描述电子系统的特点:不需要了解电路结构,直接描述端口及实现的功能. 结构化描述方法 entity mux2_1 is port(d0,d1:in bit;st:in bit;y:out bit); end mux2_1; architecture rt1 of mux2_1 is begin y=d0 when st=‘1’ else ‘条件赋值 d1; end rt1; 结构化描述方式 本例使用结构化描述方式并没有优势,但通过这个例子,可以了解VHDL的多模块设计方式。 多模块设计的方法是:首先设计好各模块,(本例缺),在顶层文件中,首先声明这些模块(COMPONENT语句),然后再进行组装(PORT MAP语句) 例4-15 8-3线优先编码器 真值表见121页4-1-3 Temp_in,temp_out:中间变量, 矢量类型. temp_in一一对应了8个输入端(in0…in7),用一种巧妙的办法将输入端的各种组合用一个矢量表达. Temp_out一一对应了5个输出端(y2,y1,y0,yex,ys). 进程的敏感信号表为st或temp_in,9个输入量中有一个发生变化,均可引起进程的执行,相应地temp_out均有一个对应值. 进程的最后将temp_out拆开,分赋到各输出端. 本描述完全将真值表表达了出来. 选读:1位全加器的VHDL描述 如果已经有半加器,或门等设计单元,全加器可以用半加器及或门组成,顶层文件为全加器,调用底层的二个文件(相当于元件). * * 4.3.2 静态逻辑冒险 例4-12 分析如图4-3-1(a)所示的组合电路,当输入信号abc由000变化到010及abc由000变化到110时的输出波形。 ≥1 a b c F 1 1 1 0 1 0 0 0 00 01 11 10 0 1 ab c Y1 Y2 b 1 2 (a) (b) 图4-3-1 例4-12逻辑图和卡诺图 (1) 当输入信号abc由000变化到010时,在稳定状态下输出应为1。若tpd2tpd1(延迟时间),则在输出波形F=1中出现短暂的0,这就是静态0冒险--即由于门延迟,产生了不期望的尖峰信号。 b b Y2 Y1 F 图4-3-2 门延迟产生冒险 (2) 当输入信号abc由000变化到110时,在稳定状态下,输出保持为1。若tpd2tpd1 ,则在输出信号中也会出现静态0冒险,如图4-3-3。 Y2 Y1 F td 图4-3-3 多个输入信号变化时产生冒险举例 结论:静态逻辑冒险仅仅发生在输入信号变化的瞬间,而在输入稳定的状态下是不会发生的。但是,输入信号发生变化的瞬间,并不一定会发生静态冒险。 例如,当输入信号abc由000变化到010时,若tpd2tpd1,则输出信号稳定,F中不会出现0毛刺。 Y1 Y2 F 4.3.4 如何避免逻辑冒险 1.修改逻辑设计 有一种竞争冒险是由于逻辑式中出现A+A所产生的。 通过F=AB+AC+BC,增加多余项BC,以消除由于A变化而引起的逻辑冒险。因为当B=1、C=1时,存在F=A+A情况,由于增加了BC项,不论A如何变化,BC项始终为1,输出始终为1,输出不会出现逻辑冒险。由于BC为多余项,此方法又
显示全部