第 161 篇

考研数电·零基础讲义 第12讲|组合逻辑电路中的竞争-冒险

约 15 分钟 5253 字 华南师范大学数字电子技术考研数电零基础讲义

考研数电·零基础讲义 · 第 12 讲|组合逻辑电路中的竞争-冒险 学完这一讲,你能说清"竞争"和"冒险"分别是什么、毛刺是怎么产生的,会用代数法和卡诺图法判断一个电路有没有竞争-冒险,并掌握三种消除方法(滤波电容、选通脉冲、增加冗余项)及各自的优缺点。预计用时 1.5~2 小时。

本讲地图

  • 问题从哪来:前几讲都只看"稳定以后"的输出;实际门电路有延迟,输入跳变的一瞬间,输出可能出现极窄的错误脉冲(毛刺)。
  • 竞争:门的两个输入同时向相反方向跳变;竞争-冒险:因竞争而可能在输出端产生毛刺。
  • 判断:代数法——某些变量取定值后,式子能化成Y=A+A‾Y=A+\overline{A}或Y=A⋅A‾Y=A\cdot\overline{A}⁠;卡诺图法——两个圈"相切"。
  • 消除:接滤波电容、引入选通脉冲、修改逻辑设计(增加冗余项)。
  • 华师怎么考:概念填空、简答(三种方法比较),或给一个函数判断有无冒险并用冗余项消除。
  • 教材对应:第 4 章 4.9 节。

前置知识

  • 门电路的传输延迟时间tpdt_{pd}(见第 05 讲下、第 08 讲)。
  • 卡诺图化简、相邻格的含义(见第 04 讲中)。
  • 常用公式AB+A‾C+BC=AB+A‾CAB+\overline{A}C+BC=AB+\overline{A}C(冗余项定理,见第 04 讲上)。

一、稳态看不见的问题

1.1 大白话:两个人换岗

想象一个仓库门口有两个保安:甲在白天值班、乙在晚上值班,规定"任何时候至少有一个人在岗"。交接班时,如果甲先走了,乙还没到,就会有一小段时间门口没人——这就是"漏洞"。稳定的白天、稳定的晚上都没问题,问题只出在切换的瞬间。

数字电路也是这样。每个门都有传输延迟,同一个信号走不同的路径,到达的时间不一样。在信号切换的一瞬间,就可能出现短暂的"错误状态"。

1.2 一个与门的例子(教材图 4.9.1)

与门Y=ABY=AB⁠。稳态下A=1,B=0A=1,B=0或A=0,B=1A=0,B=1⁠,输出都是 0。现在让AA从 1 变 0,同时BB从 0 变 1:

  • 如果AA先降下去、BB再升上来:中间经过A=0,B=0A=0,B=0⁠,YY一直是 0,没问题。
  • 如果BB先升上来、AA还没降下去:中间有极短的时间A=1,B=1A=1,B=1⁠,YY冒出一个极窄的 1——这就是尖峰脉冲,俗称毛刺。

或门Y=A+BY=A+B同理:两个输入一个 1→0、一个 0→1,如果"1 先走、另一个 1 还没来",输出会冒出一个极窄的 0。

1.3 正式定义

  • 竞争:门电路的两个输入信号同时向相反的逻辑电平跳变(一个从 1 变 0,另一个从 0 变 1)的现象。
  • 竞争-冒险:由于竞争而在电路输出端可能产生尖峰脉冲的现象。

逐词拆解:

  • "同时":不是严格同时,而是在差不多的时间里各自变化,谁先谁后说不准。
  • "可能":有竞争不一定就有毛刺——要看谁先到。但设计时往往没法精确知道两路信号的先后(它们走了不同的路径、上升下降时间也有差别),所以只要有竞争,就认为有产生毛刺的风险。

1.4 毛刺有什么危害?

毛刺很窄(一般在几十纳秒以内),接到灯泡上人眼根本看不见。但如果后面接的是对脉冲敏感的电路——比如第 13 讲的触发器,一个毛刺就可能让它误翻转,导致整个系统状态出错。教材举的 2 线-4 线译码器例子中,输入ABAB从 10 变为 01 时,本应保持 0 的输出端就会冒出毛刺。

1.5 易错点 ⚠️

  • 竞争-冒险是动态现象,用真值表(稳态)是看不出来的。真值表正确的电路,照样可能有毛刺。
  • "竞争"是原因,"冒险"是可能的后果。两个词别混用。

二、一个完整的例子:Y=AB+A‾CY=AB+\overline{A}C

2.1 电路

这是教材例 4.9.1 的电路:AA经过一个非门得到A‾\overline{A}⁠;与门G1G_1算P=ABP=AB⁠,与门G2G_2算Q=A‾CQ=\overline{A}C⁠;或门算Y=P+QY=P+Q⁠。

2.2 稳态分析

令B=C=1B=C=1⁠:

Y=A⋅1+A‾⋅1=A+A‾=1Y=A\cdot1+\overline{A}\cdot1=A+\overline{A}=1

无论AA是 0 还是 1,YY都应该恒为 1。

2.3 动态分析:逐步追踪

假设每个门的延迟都是 1 个单位tpdt_{pd}⁠。AA在某时刻从 1 跳到 0:

  1. 第 0 步:AA变成 0。
  2. 1 个tpdt_{pd}后:非门输出A‾\overline{A}才从 0 变成 1;同时与门G1G_1看到A=0A=0⁠,PP从 1 变成 0。
  3. 2 个tpdt_{pd}后:与门G2G_2看到A‾=1\overline{A}=1⁠,QQ才从 0 变成 1。
  4. 或门的两个输入:PP在第 1 步后就变 0 了,QQ要到第 2 步后才变 1——中间有 1 个tpdt_{pd}的时间 P=Q=0P=Q=0!
  5. 再经过或门的 1 个tpdt_{pd}⁠,输出YY出现一个宽约1tpd1t_{pd}的 0 毛刺。

关键原因:AA走到或门有两条路——一条直接经过G1G_1(1 级门),一条先过非门再经过G2G_2(2 级门)。两条路长度不同,到达时间不同,于是在或门处形成了竞争。

Y等于AB加A非C在B和C为1时,A从1变0产生毛刺的波形,加冗余项BC后消失(动画扫描线) A A′(非门输出) P = AB Q = A′C Y = P+Q Y(加 BC 后) ← 毛刺:本应恒为 1,却跌落为 0(宽约 1 个 tpd) 时间(每格 = 1 个门延迟 tpd;B = C = 1)

图 1:Y=AB+A‾CY=AB+\overline{A}C在B=C=1B=C=1时的波形(按每门 1 个单位延迟逐拍模拟得到)。AA由 1 变 0 后,YY冒出一个 0 毛刺;加冗余项BCBC后(绿线)毛刺消失(动画扫描线)

2.4 反方向呢?

AA从 0 跳到 1 时:PP在 1 个tpdt_{pd}后变 1,QQ在 2 个tpdt_{pd}后才变 0。这次是"新的 1 先到、旧的 1 后走",或门两个输入有一段时间同时为 1,输出保持 1,不出毛刺。图 1 右半部分也能看到这一点。

所以竞争不一定产生冒险,要看具体的先后。但正如前面所说,实际电路的延迟有偏差,设计上两个方向都要当作有风险来对待。

2.5 两类毛刺

类型 稳态应为 毛刺 典型式子
"1 型"冒险(静态 1 冒险) 恒 1 跌落成极窄的 0 与或式化成Y=A+A‾Y=A+\overline{A}
"0 型"冒险(静态 0 冒险) 恒 0 冒出极窄的 1 或与式化成Y=A⋅A‾Y=A\cdot\overline{A}

("静态 1/0 冒险"这个叫法教材没有展开,知道"输出应保持不变却出现毛刺"这个意思就够了。)


三、怎样判断有没有竞争-冒险

3.1 代数法(教材方法)

前提:每次只有一个输入变量改变状态。

判据:如果输出的逻辑式在其他变量取某组定值时,能化简成

Y=A+A‾或Y=A⋅A‾Y=A+\overline{A}\qquad\text{或}\qquad Y=A\cdot\overline{A}

就说明变量AA经过两条不同路径到达输出门,存在竞争-冒险。输出门是与非门、或非门时,对应写成Y=A+A‾‾Y=\overline{A+\overline{A}}或Y=A⋅A‾‾Y=\overline{A\cdot\overline{A}}⁠,同样有竞争-冒险。

操作步骤:

  1. 找出在式子中同时以原变量和反变量出现的变量(只有这种变量才可能"自己和自己竞争");
  2. 对每个这样的变量,把其余变量的各种取值代进去;
  3. 看能不能化成A+A‾A+\overline{A}或AA‾A\overline{A}的形式。

3.2 例题 1:与或式(教材例 4.9.1(a))

题目:判断Y=AB+A‾CY=AB+\overline{A}C有无竞争-冒险。

解:只有AA同时以AA和A‾\overline{A}出现。考察BB⁠、CC的四种取值:

BB CC YY化为 结论
0 0 00 无
0 1 A‾\overline{A} 无
1 0 AA 无
1 1 A+A‾A+\overline{A} 有

所以B=C=1B=C=1时,AA变化会产生竞争-冒险(1 型)。

3.3 例题 2:或与式(教材例 4.9.1(b))

题目:判断Y=(A+B)(B‾+C)Y=(A+B)(\overline{B}+C)有无竞争-冒险。

解:BB同时以BB和B‾\overline{B}出现。当A=C=0A=C=0时:

Y=(0+B)(B‾+0)=B⋅B‾Y=(0+B)(\overline{B}+0)=B\cdot\overline{B}

所以A=C=0A=C=0时,BB变化会产生竞争-冒险(0 型)。

3.4 卡诺图法(补充,非常直观)

原理:在与或式的卡诺图上,每个乘积项是一个圈。如果两个圈相邻但不重叠(俗称"相切"),说明存在一对相邻的 1 格分属两个圈——从一格走到相邻格(只变一个变量),就要从一个乘积项"交接"到另一个乘积项,正如两个保安换岗,可能出现空档。

判据:卡诺图中两个圈相切(有相邻的格分别属于两个圈,而这两格没有被任何一个公共圈同时圈住),就存在竞争-冒险。

卡诺图上两个圈相切表示可能存在竞争冒险,加冗余圈BC消除 A BC 00 01 11 10 0 0 m0 1 m1 1 m3 0 m2 1 0 m4 0 m5 1 m7 1 m6 A′C AB 蓝圈与橙圈相邻却不重叠(相切)→ 有冒险;绿色虚线圈 BC 把它们连起来

图 2:Y=AB+A‾CY=AB+\overline{A}C的卡诺图。A‾C\overline{A}C(蓝)与ABAB(橙)在m3m_3⁠、m7m_7处相切;绿色虚线圈BCBC把两格圈在一起,即为消除冒险需要的冗余项

看图:m3m_3(⁠A‾BC\overline{A}BC⁠)属于蓝圈,m7m_7(⁠ABCABC⁠)属于橙圈,它们上下相邻(只差AA⁠)。从m7m_7走到m3m_3就是"B=C=1B=C=1时AA由 1 变 0",正是代数法找到的那种情况。两种方法结论一致。

3.5 其他方法

教材还指出:代数法要求"每次只有一个变量变化",局限很大;实际中多个输入可能同时变化,变量一多更难找全。因此还有:

  • 计算机辅助分析:用数字电路模拟软件检查;
  • 实验检查:给输入加上包含所有可能变化的信号,用示波器看输出有没有毛刺。

教材强调:软件模拟用的是典型参数,和实际电路可能有出入,只有实验检查的结果才是最终结论。

3.6 易错点 ⚠️

  • 只有原变量、反变量同时出现的变量才需要检查;一个变量如果只以原变量(或只以反变量)出现,它单独变化不会引起这类冒险。
  • 代数法只针对"单个变量变化"。两个变量同时变化的竞争,代数法查不出来。
  • 卡诺图上"相切"是指相邻但不重叠;如果两个圈本身有重叠的格,就不算相切。

四、怎样消除竞争-冒险

4.1 方法一:接入滤波电容

大白话:毛刺又窄又快,像水面上一个小小的涟漪。给输出端并一个小电容,就像在水管上加一个小水箱,突然的小波动会被"吸收"掉。

做法:在输出端与地之间并接一个很小的电容CfC_f⁠。毛刺一般只有几十纳秒宽,电容来不及充放电,毛刺的幅度就被削弱到门电路的阈值电压以下。TTL 电路中CfC_f通常为几十至几百皮法;输出电阻较高的 CMOS 电路可以选得更小。

优点:简单易行。 缺点:输出波形的上升时间和下降时间变长,波形变坏。只适用于对输出波形前后沿要求不严格的场合。

4.2 方法二:引入选通脉冲

大白话:既然毛刺只发生在输入切换的瞬间,那就让输出"闭眼"度过这段时间——等电路稳定了再"睁眼"看结果。

做法:在输出门上加一个选通脉冲pp⁠。pp的高电平只在电路已经稳定之后才出现;p=0p=0期间输出被封锁,毛刺出不来。

优点:比较简单,一般不需要增加电路元件。 缺点:

  • 正常输出也变成了脉冲形式,宽度与选通脉冲相同——比如输入变成 11 以后,输出并不马上变高,要等选通脉冲来了才给出一个正脉冲;
  • 必须设法得到一个与输入信号同步的选通脉冲,对它的宽度和作用时间都有严格要求。

4.3 方法三:修改逻辑设计(增加冗余项)

大白话:保安换岗出空档?那就再安排一个"机动保安",专门在交接班时站岗。

做法:以Y=AB+A‾CY=AB+\overline{A}C为例,冒险发生在B=C=1B=C=1⁠、AA变化时。由冗余项定理(第 04 讲上):

Y=AB+A‾C=AB+A‾C+BCY=AB+\overline{A}C=AB+\overline{A}C+BC

加上BCBC这一项,函数值完全不变(⁠BCBC对函数来说是多余的,所以叫冗余项),但在B=C=1B=C=1时,BC=1BC=1直接把输出"撑"在 1,AA怎么变都不影响。图 1 的绿线就是加上BCBC后模拟的结果:毛刺消失。

在卡诺图上:冗余项就是把两个相切的圈"桥接"起来的那个圈(图 2 绿色虚线圈)。

对或与式:Y=(A+B)(B‾+C)Y=(A+B)(\overline{B}+C)在A=C=0A=C=0时有BB‾B\overline{B}型冒险,对偶地乘上冗余因子(A+C)(A+C)⁠:

Y=(A+B)(B‾+C)(A+C)Y=(A+B)(\overline{B}+C)(A+C)

A=C=0A=C=0时(A+C)=0(A+C)=0⁠,直接把输出压在 0。(已用程序核对加入冗余项后函数不变、冒险消失。)

优点:运用得当时效果很好。如果需要的门本来就存在(比如BCBC这个与门电路中已有),只需加一根连线,既不增加门,也不给电路带来别的不利影响。 缺点:适用范围很有限。增加冗余项BCBC只消除了"B=C=1B=C=1时AA单独变化"引起的冒险;如果AA和BB同时变化(比如ABAB从 10 变到 01),电路仍然可能有竞争-冒险。

4.4 三种方法对比(简答题模板)

方法 做法 优点 缺点
接滤波电容 输出端并小电容 简单易行 波形前后沿变坏;只适合对波形要求不严的场合
引入选通脉冲 稳定后才用脉冲打开输出 简单,不需增加元件 输出变为脉冲;选通脉冲须与输入同步,宽度、时间要求严
修改逻辑设计 增加冗余项 运用得当效果好,有时只需加一根线 适用范围有限,只能消除特定单变量变化引起的冒险

4.5 例题 3:判断并消除

题目:Y=AC‾+BCY=A\overline{C}+BC⁠,判断是否存在竞争-冒险;如有,用增加冗余项的方法消除。

解:

  1. 同时以原、反变量出现的是CC⁠。
  2. 考察AA⁠、BB的取值:A=B=1A=B=1时Y=C‾+CY=\overline{C}+C——存在竞争-冒险(⁠CC变化时)。其他取值:A=1,B=0A=1,B=0时Y=C‾Y=\overline{C}⁠;A=0,B=1A=0,B=1时Y=CY=C⁠;A=B=0A=B=0时Y=0Y=0⁠,都没有问题。
  3. 消除:在A=B=1A=B=1时让某一项恒为 1,加冗余项ABAB⁠:
Y=AC‾+BC+ABY=A\overline{C}+BC+AB

由冗余项定理,函数不变。在卡诺图上,AC‾A\overline{C}和BCBC两个圈在m6m_6(⁠ABC‾AB\overline{C}⁠)与m7m_7(⁠ABCABC⁠)处相切,ABAB圈把这两格圈在一起。

4.6 易错点 ⚠️

  • 冗余项的找法:把发生冒险时其余变量的取值写成乘积项。B=C=1B=C=1 → BCBC⁠;A=B=1A=B=1 → ABAB⁠;若是A=0,C=1A=0,C=1 → A‾C\overline{A}C⁠。
  • 加冗余项后一定要确认函数没变(冗余项定理保证,但最好代几组数或用卡诺图看一眼)。
  • 别把"消除冒险"误做成"化简":化简会把冗余项删掉,恰好把冒险带回来。最简电路未必是最可靠的电路。

五、把本讲和前几讲串起来

  • 第 08 讲说组合电路"输出只取决于当前输入"——这句话说的是稳态;本讲补上了动态的一面。
  • 第 09 讲的译码器输出接到触发器的时钟端时,一定要考虑毛刺,常用选通(使能端)来消除——74HC138 的片选端S1S_1恰好可以接选通脉冲。
  • 第 13 讲以后的时序电路,正是对毛刺最敏感的"负载"。

速记卡

项目 要点
竞争 门的两个输入同时向相反电平跳变
竞争-冒险 因竞争而输出可能出现尖峰脉冲(毛刺)
根本原因 同一信号经不同路径(延迟不同)到达同一个门
代数判别 其他变量取定值后能化成A+A‾A+\overline{A}(1 型)或AA‾A\overline{A}(0 型)
卡诺图判别 两个圈相切(相邻不重叠)
消除①电容 简单;波形变坏
消除②选通 不增元件;输出变脉冲,选通须同步
消除③冗余项 运用得当效果好;只消除特定单变量变化的冒险
冗余项怎么找 冒险条件下其余变量的乘积项(或与式用对偶的和项)
最终结论 以实验检查为准

自测练习

1. 什么是竞争?什么是竞争-冒险?有竞争是否一定会产生毛刺?

答案与提示

竞争:门电路两个输入信号同时向相反的逻辑电平跳变。竞争-冒险:由于竞争而在输出端可能产生尖峰脉冲的现象。有竞争不一定产生毛刺,取决于两个信号变化的先后(例如与门中AA先降到低电平、BB后升高,就不会有毛刺),但设计时难以确知先后,所以视为存在风险。

2. 判断Y=AB+BCY=AB+BC是否存在竞争-冒险。

答案与提示

没有任何变量同时以原变量和反变量出现,单个变量变化不会化成X+X‾X+\overline{X}⁠,不存在(单变量变化引起的)竞争-冒险。已用程序核对。

3. 判断Y=(A+B)(A‾+C)Y=(A+B)(\overline{A}+C)是否存在竞争-冒险;若有,写出消除冒险后的表达式。

答案与提示

B=C=0B=C=0时Y=A⋅A‾Y=A\cdot\overline{A}⁠,AA变化时存在(0 型)竞争-冒险。乘上冗余因子(B+C)(B+C)⁠:Y=(A+B)(A‾+C)(B+C)Y=(A+B)(\overline{A}+C)(B+C)⁠,函数不变。已用程序核对。

4. 判断Y=A‾B+AC+B‾ C‾Y=\overline{A}B+AC+\overline{B}\,\overline{C}在单变量变化时有哪些竞争-冒险,并用增加冗余项的方法全部消除。

答案与提示

三个变量都同时以原、反变量出现,逐个检查:B=C=1B=C=1时Y=A‾+AY=\overline{A}+A(⁠AA变化有冒险);A=0,C=0A=0,C=0时Y=B+B‾Y=B+\overline{B}(⁠BB变化有冒险);A=1,B=0A=1,B=0时Y=C+C‾Y=C+\overline{C}(⁠CC变化有冒险)。分别加冗余项BCBC⁠、A‾ C‾\overline{A}\,\overline{C}⁠、AB‾A\overline{B}⁠:Y=A‾B+AC+B‾ C‾+BC+A‾ C‾+AB‾Y=\overline{A}B+AC+\overline{B}\,\overline{C}+BC+\overline{A}\,\overline{C}+A\overline{B}⁠。三个冗余项加入后函数不变,三处冒险全部消除。已用程序逐一核对。

5.(华师真题风格)比较消除竞争-冒险的三种方法的优缺点。

答案与提示

见本讲 4.4 表格:滤波电容简单但使波形变坏;选通脉冲简单不增元件,但输出变为脉冲、选通脉冲须与输入同步且对宽度和时间要求严格;增加冗余项运用得当效果好,但适用范围有限,只能消除特定条件下单变量变化引起的冒险。

6. 为什么说"化简得到的最简与或式电路,不一定是最好的电路"?举例说明。

答案与提示

最简式会删去冗余项,而冗余项恰好可能是消除竞争-冒险所需的。例如Y=AB+A‾C+BCY=AB+\overline{A}C+BC化简后为AB+A‾CAB+\overline{A}C⁠,但后者在B=C=1B=C=1⁠、AA变化时存在竞争-冒险,前者没有(单变量变化时)。

7. 在Y=AB+A‾CY=AB+\overline{A}C中,若非门延迟为2tpd2t_{pd}⁠,与门、或门延迟为tpdt_{pd}⁠,B=C=1B=C=1⁠,AA由 1 变 0,毛刺宽度约为多少?

答案与提示

P=ABP=AB在1tpd1t_{pd}后变 0;A‾\overline{A}在2tpd2t_{pd}后变 1,Q=A‾CQ=\overline{A}C在3tpd3t_{pd}后变 1。或门两个输入同时为 0 的时间是2tpd2t_{pd}⁠,所以毛刺宽约2tpd2t_{pd}(再晚1tpd1t_{pd}出现在输出端)。规律:两条路径的延迟差就是毛刺宽度。


下一讲预告

组合逻辑部分到此结束。第 13 讲(上)进入时序逻辑:先认识能"记住"一位二进制数的 SR 锁存器,以及电平触发的触发器。

👉 点击进入下一讲:第13讲(上)|SR 锁存器与电平触发的触发器

评论

还没有评论。 来写第一条。

留下一条评论

选填,不会公开

纯文本,链接会自动识别。