小镇上开了一家“瞬息茶铺”,招牌是一台全自动奶茶机。顾客按下几颗配料按钮(加珍珠?加布丁?加茶底?),机器立刻按固定配方“呲啦”一声出杯,从不停顿、从不赖账、也从不记得上一位顾客点了什么。它不靠记忆,只靠一张贴在机器肚子里的配方表——你按下什么组合,就立刻出对应饮品。这台机器的全部秘密,就是“组合逻辑电路设计”:从顾客的所有可能点法(真值表),提炼成一句浓缩配方(布尔表达式),再把配方翻译成一根根管道和阀门(逻辑图)。后来老板还发现,管道交接处偶尔会“手抖”洒出几滴(竞争冒险),于是又给它加装了防抖装置。本文就带你走进这台机器的设计工坊,从一张配方表开始,亲手做出一台既快又稳的奶茶自动机。
组合逻辑是数字世界的“肌肉”,理解它的设计流程、化简方法和冒险消除,是通往芯片设计、FPGA开发与硬件验证的第一块敲门砖,也是软件工程师读懂底层硬件的起点。
可视化演示
展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。
本节配有交互动效(进入视口后自动加载,约 3KB)。
系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T
组合逻辑初识
老板的“瞬息茶铺”有个原则:机器只看顾客此刻按下的按钮,上一单是冰是热、是甜是淡,一概不记得。你按“珍珠+茶底”,它就是珍珠奶茶;按“布丁+茶底”,就是布丁奶茶。没有人会问机器“你刚才做过什么”,因为它的大脑里没有“过去”这个抽屉。这种“当下决定一切”的机器,在数字世界里就是组合逻辑电路。
组合逻辑电路的核心特征由此而来:输出仅仅是当前输入的函数。它不需要时钟、不存状态,信号从输入端进去,经过一串门电路,立刻在输出端浮现结果。与之相对的是时序逻辑电路,后者像有账本的掌柜,记着每一笔旧账,输出受历史影响。
设计组合逻辑的第一步,就是把它抽象成一个数学上的多输入单输出映射。如果把所有输入看成一个有序数组,输出就是由这个数组唯一决定的函数值:
在接下来几节,我们会把这张“灵魂契约”一步步变成一张可施工的图纸。记住:这台机器没有记忆,所以每一步设计都只围绕“当前组合”展开。
- 函数关系符号F 与 f 之间是映射关系,表示输出由输入决定。
- 输入集合A、B、C 是三个独立的输入变量,每个只能取 0 或 1,像三个开关。
- 唯一输出给定一组输入取值,F 只有一个确定结果,对应奶茶机“按下即出杯”。
真值表建模
要让机器学会所有配方,老板得先把“所有可能的点法”写下来:珍珠加不加?布丁加不加?茶底选红茶还是绿茶?每个配料只有两种状态(0 表示不加,1 表示加),三种配料就有 2 的 3 次方等于 8 种组合。把每种组合和对应出杯结果列成一张表,这就是传说中的“真值表”。
真值表是组合逻辑设计的“需求文档”,它穷举了输入的全部取值组合,并写出每一行对应的输出。n 个输入变量就会产生 2 的 n 次方行。设计者先要定义变量含义——比如 A 表示“加珍珠”,B 表示“加布丁”,C 表示“选红茶”——再逐行决策输出。这就像老板站在柜台前,把顾客可能问出口的每一种点法都在脑中过一遍。
真值表里那些输出为 1 的行,每一行都能用一个“最小项”表示。最小项就是恰好锁定一种输入组合的与表达式,例如 A=1、B=0、C=1 对应最小项 A·B'·C。把所有最小项用或运算拼起来,就得到输出函数的标准形式:
真值表做出来后,老板手里就有了一张完整的“配方表”。但 8 行还算小意思,如果配料增加到 8 种,表格会膨胀到 256 行,直接照着接线能把工坊淹了。所以下一步,得把这表浓缩成一句好记的顺口溜。
- 求和符号Σ 在这里不是算术加法,而是表示“把若干最小项做或运算”。
- 最小项下标括号中的 1、2、4、7 是使输出为 1 的输入组合的十进制编号。
- 完整展开把四项最小项全部写出来,构成输出的标准“配方”。
表达式化简
配方表越来越长,老板决定把它浓缩成一句话:“有红茶就要布丁,没红茶就加珍珠”。这句话比表格省地方,出杯也快。在布尔代数里,这种压缩过程叫“化简”。化简最重要的工具是布尔代数的各种定律,其中“吸收律”最为常用:一个东西和“它加上别的”取或,结果还是它自己,因为已经包含在里面了。
化简的目标是把冗长的与或表达式变成“最简与或式”,让门的数量最少、层次最浅。除了公式法,工程上最常用的是卡诺图——把真值表改画成一张行列相邻的方格图,相邻格子之间只差一个变量,于是可以成组圈起来。圈里的格子数必须是 2 的幂,每圈一次就消掉一批变量。圈的圈越大,化简效果越好,就像把好几条配料规则合并成一句更概括的顺口溜。
吸收律是公式法化简中最常用的规则之一,它专门处理“多余项”:
有了顺口溜,老板下一步要做的,就是把这句口头配方翻译成机器里能实际安装的管道和阀门。
- 两个子项A 和 AB,前者是单独条件,后者是“A 且 B”。
- 提取公因子把 AB 拆成 A·(1+B),其中 1 是恒真信号。
- 消去恒真1+B 永远为 1,所谓“或上什么事都没发生”。
逻辑图实现
顺口溜背熟了,还得落地成图纸。老板请来管道师傅,师傅说:我们有三种标准管件——“与门”是串联阀门,两头都通才出水;“或门”是并联阀门,任一通则出水;“非门”是反向开关,把通变断、断变通。每个管件都有固定的图形符号,把表达式画成由这些符号连成的网络,就是逻辑图。
从表达式画逻辑图几乎是一步一译:见到“·”就画与门,见到“+”就画或门,见到变量上面的横线就画非门。比如 F = A·(B+C),先让 B 和 C 进一个或门,再把结果和 A 一起进与门。这种先算内部再算外部的画法,天然形成了层级,就像先准备小料、再调和茶底。
同一个函数可以用不同结构的逻辑图实现,成本差别很大。F 的两种写法——先用或门再与,或先用两个与门再或——门数量不同,延迟也不同。工程师就是要在面积、速度、功耗之间做权衡。表达式与逻辑图的对应关系本质上是对布尔运算的几何翻译:
管道图画好,师傅们说这只能做“单杯机”。但顾客一次可能点两杯、三杯,甚至一整个公司的下午茶——那就要把单杯逻辑组装成更复杂的计算部件了。
- 两个与项把 A·B 和 A·C 看成两条并联的支路。
- 或门汇合两条支路的结果进入同一个或门,任一为 1 则输出 1。
- 共享输入A 被两个与门共用,像一根主管道分出两个接头。
加法器设计
老板想给机器加一个“自动算账”功能:顾客点两杯奶茶,机器要算出总价、找零。算账得先会做二进制加法。机器只知道 0 和 1,所以“1+1”要进位,就像“满十进一”。先做一个最简单的单元:把两个一位数 A 和 B 相加,得到本位和 S 与进位 C。这个单元叫“半加器”,它有两个输入,两个输出,真值表只有四行。
半加器的行为和“异或”运算完全一致:相同输出 0,不同输出 1,所以 S 用异或门实现;进位 C 只有两个输入都为 1 时才为 1,这正是与门。于是有:
半加器有个缺陷:它不管低位有没有进位。实际多位加法中,个位满二要向十位进 1,十位相加时要把这个进位也算进去。于是把两个半加器拼起来,中间再汇入一个或门,就得到“全加器”。全加器比半加器多一个输入 C\_in,描述它的逻辑更加完整:
把 N 个全加器从低到高首尾相连,就像收银台前顾客排成一队,每个人的“进位”递给后面伙伴,N 位二进制加法器就诞生了。这种设计叫“行波进位加法器”,简单直观,只是进位要一串传下去,稍慢。
- 本位数都是 1A 与 B 同时为 1,无论低位进位如何,本位必然向高位进位。
- 一奇一偶加进位A、B 恰好一个为 1,且低位进位也是 1,两个 1 凑在一起也要进位。
- 两种情况取或任一条件成立,进位输出就为 1。
比较器设计
奶茶店搞满减活动:订单满 15 元减 3 元。机器得能判断“这份订单够不够 15 元”——本质上是在做数值比较。比较器是另一类经典组合逻辑电路,它输出三个信号:A>B、A=B、A<B。判断两个一位数谁大,逻辑很直白:A 是 1 且 B 是 0,则 A 大;二者相同则相等;A 是 0 且 B 是 1,则 A 小。
相等判断尤其好用:A 和 B 相同,意味着 A 异或 B 的结果是 0,取反之后就是 1。所以“相等”信号可以用异或门加非门实现。A 大于 B 的条件,用布尔表达式写出来是:
要多位比较,就从最高位开始逐位往下:高位能分出胜负就直接出结果,高位相等才看下一位,像比价时先看十位数再看个位数。每一位的比较器都输出“上级判定结果”,逐级串联,就是完整的数值比较器。
- B 取反先把 B 翻转,变成“非 B”。
- 求交A 与“非 B”同时为 1,说明 A=1 且 B=0。
- 结论输出该条件成立,A 一定大于 B。
竞争与冒险
机器运行一阵子后,老板发现了一个怪现象:某杯茶在极短的一瞬会“闪断”——像是管道里突然没水又立刻恢复。拆开机器检查,发现是一个配料阀门的信号要绕很远的路,而另一个信号走的是近路,两条信号同时奔向同一个或门时,先后脚不一致,导致那一瞬间两个阀门都暂时关闭。
这在数字电路里叫“竞争”与“冒险”。竞争指的是同一个输入信号经过不同路径到达逻辑门时,因为路径延迟不同而出现时间差;冒险则是这种竞争在输出端造成的短暂错误脉冲,也叫“毛刺”。最经典的例子是 F = A·B + A'·C:当 B=C=1 时,表达式退化成 F = A + A'——理论上恒为 1,但 A 翻转瞬间,A 和 A' 可能同时为 0,输出短暂跌到 0。表达式的逻辑分析如下:
冒险分两类:输出本应为 1 却瞬时变 0,叫静态 1 冒险;反过来输出本应为 0 却瞬时变 1,叫静态 0 冒险。毛刺持续时间极短,但足以让后级电路误判——就像茶里的一粒沙子,虽小却硌牙。
- 原始表达式A、B 相与,与 A'、C 相与后取或。
- 输入固定令 B=C=1,两个与门都只剩一个变量控制。
- 退化为互补逻辑上 A 与 A' 的或永远为 1,但物理延迟会撕开这个恒等式。
优化与消除
知道了毛刺来自“路径长短不一”,老板想了两招补救。第一招:在容易闪断的管道旁边,额外加一根“备用管道”,让它们在关键时段互相兜底——这就是“冗余项法”。第二招:在管道出口装一个闸门,等管路里的水稳定了再放行,平时先憋住——这就是“选通脉冲法”。
冗余项法的原理非常巧妙。还是那个出问题的式子 F = A·B + A'·C,毛刺出现在 B=C=1 时。那就干脆把 B 和 C 的相与也写进表达式,作为第三条支路。当 B=C=1 时,这条支路强行把输出拉成 1,无论 A 怎么翻都不再闪断:
如果不想加门,还可以在输出端接一个选通脉冲:等输入信号稳定后再打开一个锁存窗口,把毛刺时段整个“隔离”在窗口之外。或者干脆在输出端加一个小电容做滤波,把毛刺这种高频尖峰“吸收”掉。三种手段组合使用,一台又快又稳的自动奶茶机就终于完工了——它只看当下、反应迅速,还绝不会在交接瞬间洒出一滴茶。
- 原两项不变AB 和 A'C 仍然保留,保证正常逻辑。
- 新增冗余项把 B·C 作为第三项加入。
- 关键覆盖当 B=C=1 时,第三项恒为 1,输出被牢牢钉在高电平。
AI 应用场景
数字芯片的逻辑综合
阶段:数字前端设计(逻辑综合)
解决的问题:设计者用 Verilog/VHDL 描述功能时,写出的往往是“行为级”代码,不能直接下厂。传统手工化简大型真值表几乎不可能,AI 时代的 EDA 综合工具会自动把 RTL 描述综合成门级网表,内部大量运用布尔化简和卡诺图等价变换,就像把顾客所有点法自动浓缩成最简配方,再映射成标准管件。它还会自动插入冗余逻辑来抑制冒险,保证时序收敛。
具体案例:在 28nm 工艺的 AI 加速芯片项目中,前端工程师使用 Design Compiler(DC)综合一个 32 位比较器。工具自动将行为代码化简成面积最小的与或门网络,并优化掉可能产生毛刺的路径,综合后网表的门数比手写方案少 18%。
形式验证与等价性检查
阶段:芯片验证
解决的问题:化简前后、综合前后的电路必须“味道完全一样”——逻辑等价。手工比对成千上万个逻辑门不现实,形式化验证工具把功能建模成布尔公式,通过 BDD(二叉决策图)等算法证明两个版本的表达式对所有输入组合输出一致,像用数学方法确认“浓缩配方”和“原始配方”做出来的茶一模一样。
具体案例:某 AI 芯片团队在完成逻辑综合后,用 Cadence Conformal EC 对综合前 RTL 和综合后网表做等价性检查。工具在几小时内发现了一处由冗余项删除引起的功能差异,避免了芯片流片后才发现缺陷的数百万损失。
FPGA 信号毛刺诊断与消除
阶段:硬件调试与部署
解决的问题:FPGA 上运行的组合逻辑一旦出现竞争冒险,输出毛刺会让采样模块误采数据。工程师通过时序分析报告定位到延迟不匹配的路径,之后使用增加冗余项、输出寄存器(选通脉冲思想)或滤波电路三类手段消除毛刺。这类“防抖”操作在高速接口和传感器采集场景中至关重要。
具体案例:一个边缘 AI 推理设备使用 FPGA 读取温度传感器数据,发现 ADC 采样值偶尔跳变。示波器抓到 3ns 宽的毛刺,工程师在比较器输出后增加了一级流水线寄存器,毛刺被完全隔离,采样数据恢复稳定。
Python 演示
# -*- coding: utf-8 -*-"""组合逻辑电路设计演示: 从门电路到加法器、比较器与竞争冒险""" def NOT(a): return 1 - a def AND(a, b): return a & b def OR(a, b): return a | b def XOR(a, b): return a ^ b def half_adder(a, b): """半加器: 返回(和S, 进位C)""" s = XOR(a, b) c = AND(a, b) return s, c def full_adder(a, b, cin): """全加器: 返回(和S, 进位Cout)""" s1, c1 = half_adder(a, b) s2, c2 = half_adder(s1, cin) cout = OR(c1, c2) return s2, cout def compare(a, b): """1位比较器: 返回(gt, eq, lt)""" gt = AND(a, NOT(b)) eq = NOT(XOR(a, b)) lt = AND(NOT(a), b) return gt, eq, lt def ripple_carry_add(a_bits, b_bits): """4位行波进位加法器""" result = [] carry = 0 for i in range(len(a_bits)): s, carry = full_adder(a_bits[i], b_bits[i], carry) result.append(s) result.append(carry) return result def final_expression(a, b, c): """消除冒险后的表达式: F = AB + A'C + BC""" return OR(OR(AND(a, b), AND(NOT(a), c)), AND(b, c)) def glitch_simulation(): """模拟A翻转瞬间, NOT门延迟2步导致的毛刺""" delay = 2 a_hist = [1, 1, 1, 1, 0, 0, 0, 0] f_hist = [] for t in range(len(a_hist)): a = a_hist[t] a_not_hist = a_hist[t - delay] if t >= delay else 0 f = OR(a, NOT(a_not_hist)) f_hist.append(f) print("t=%d A=%d A'(延迟)=%d F=%d" % (t, a, NOT(a_not_hist), f)) return f_hist def main(): print("== 半加器真值表 ==") for a in (0, 1): for b in (0, 1): s, c = half_adder(a, b) print("A=%d B=%d -> S=%d C=%d" % (a, b, s, c)) print("\n== 全加器真值表(选三行) ==") for a, b, cin in ((0, 0, 1), (1, 1, 0), (1, 1, 1)): s, cout = full_adder(a, b, cin) print("A=%d B=%d Cin=%d -> S=%d Cout=%d" % (a, b, cin, s, cout)) print("\n== 4位加法器: 0110 + 0101 = ==") a_bits = [0, 1, 1, 0] b_bits = [1, 0, 1, 0] sum_bits = ripple_carry_add(a_bits, b_bits) print("".join(str(x) for x in reversed(sum_bits))) print("\n== 比较器: 1 vs 0 ==") gt, eq, lt = compare(1, 0) print("A>B:%d A=B:%d A<B:%d" % (gt, eq, lt)) print("\n== 消除冒险前后表达式输出 ==") print("B=C=1时, 消除后F=%d (恒为1)" % final_expression(0, 1, 1)) print("\n== 竞争冒险模拟(NOT延迟2步) ==") f_hist = glitch_simulation() if 0 in f_hist: print("检测到毛刺! 输出出现瞬时0电平") if __name__ == "__main__": main()
def AND(a, b): return a & b用 Python 位与运算模拟一个与门,两个输入都为 1 才输出 1,对应管道中“串联阀门”。s = XOR(a, b)半加器的和位由异或门产生,两个输入不同则输出 1,正是“1+0”和“0+1”都出 1 的原因。cout = OR(c1, c2)全加器把两个半加器的进位取或,形成最终进位输出。for i in range(len(a_bits)):从最低位开始逐位遍历,把当前位的进位传给下一位,模拟行波进位加法器的级联结构。a_not_hist = a_hist[t - delay]读取 delay 步之前的 A 值来表示反相器的延迟,这是触发毛刺的关键机制。f = OR(a, NOT(a_not_hist))计算 F = A + A',当原始 A 已翻转而延迟后的 A' 还没跟上时,OR 输出短暂为 0。if 0 in f_hist:检查输出序列中是否出现 0,一旦出现即证明竞争冒险产生了毛刺。sum_bits = ripple_carry_add(a_bits, b_bits)调用 4 位加法器完成 0110 + 0101 = 1011,验证级联设计正确。
常见误区
误区组合逻辑电路的名字里带“逻辑”,感觉像有智能、有记忆,输出应该会受上一次输入的影响,就像人做决定时会参考经验。
正解组合逻辑恰恰是最“没记性”的电路。它的输出只由当前输入决定,跟历史毫无关系,就像瞬息茶铺的机器只认当下的按钮组合。真正有记忆的是时序逻辑电路,它们用触发器等存储元件记录状态,配合时钟节拍工作。判断一个电路是组合还是时序,唯一标准就是看它输出是否依赖“过去”。
为何常见:人们习惯把“逻辑”和“思考”挂钩,而思考天然带着记忆,于是把人类决策模式投射到电路上,忽略了数字电路“无状态”的本质。
误区竞争就是冒险,冒险就是竞争,反正都是电路“抖动”出错,不用区分。
正解竞争是“因”,冒险是“果”。竞争是指同一信号经不同路径到达逻辑门时出现时间差——比如两条管道长短不一;冒险则是这种时间差在输出端引起的瞬时毛刺。有竞争不一定有冒险:只有输出真正出现了错误的窄脉冲,才能称为冒险。判断时先找路径延迟差异(竞争),再验证输出是否闪断(冒险)。
为何常见:两者总是成对出现,教科书也常把“竞争冒险”连写,初学者就不加区分地当成一个词。实际上竞争是客观现象,冒险是劣质结果,工程师要消除的是冒险。
误区圈卡诺图时,只圈确定的 1,不圈相邻的大块,认为圈得小、选得少才最精确,以免引入多余变量。
正解卡诺图化简的黄金法则是“圈得越大越简”。相邻格子只差一个变量,每次把圈扩大一倍,就能多消掉一个变量,得到更短的表达式。圈 4 个相邻 1 比圈 2 个得到的项更简洁,就像把“红茶加珍珠”和“红茶加布丁”合并成一句“要红茶就加任意小料”。当然,圈必须满足 2 的幂个、必须成矩形且跨越边界有效。
为何常见:直觉上“少选一点”总是更安全,避免圈到不确定的区域。但卡诺图的本质恰恰是利用相邻性合并,合并越充分函数越简,反直觉的地方正是它容易出错的地方。
误区逻辑化简的目标就是表达式最短,一旦化简出“多余”的项,就说明前面化简不到位,冗余项应该一律删除。
正解化简得到的“最简式”只是逻辑意义上的最简,不一定是物理意义上的最优。为了消除竞争冒险,我们经常要故意加回一个冗余项,比如在 F = A·B + A'·C 中加上 B·C,虽然逻辑上它不改变输出,却能在 B=C=1 时把输出拉稳。这叫“以冗余换可靠”,像给易闪断的管道加一根备用水管,表面多余却至关重要。
为何常见:教材讲化简时强调“去掉多余项”,学生记住了结论却没记住前提——那时考虑的是逻辑等价和面积,而不是时序稳定性。遇到冒险时自然想不到“加项”这种反直觉操作。
面试题
Q1. 组合逻辑电路最核心的特征是?
- A.输出只由当前输入决定← 正确答案
- B.输出会记住上次输入
- C.输出依赖时钟节拍
- D.输出随历史状态变化
答案:A。组合逻辑像瞬间出茶的机器,只认当下的输入组合,不存状态、不看时钟。B、C、D 描述的都是时序逻辑的特征,故排除。
Q2. 有 3 个输入变量的真值表共有多少行?
- A.3 行
- B.6 行
- C.8 行← 正确答案
- D.9 行
答案:C。n 个输入变量所有取值组合为 2 的 n 次方,3 个输入就是 8 种组合,对应 8 行。3、6、9 都不是 2 的幂,无法穷举全部输入状态。
Q3. 关于最小项 m(4),下列说法正确的是?
- A.对应输入 100 的组合← 正确答案
- B.对应输入 010 的组合
- C.对应输入 001 的组合
- D.对应输入 111 的组合
答案:A。最小项下标是该输入组合的十进制编号,100 转换成十进制是 4,所以 m(4) 表示 A=1、B=0、C=0 这一行。其余选项的二进制值分别是 2、1、7。
Q4. 卡诺图上要消除两个变量,至少应圈几个相邻的 1?
- A.2 个
- B.4 个← 正确答案
- C.8 个
- D.16 个
答案:B。卡诺图每扩大一倍圈的大小就多消一个变量,圈 2 个消 1 个变量,圈 4 个消 2 个变量,圈 8 个消 3 个变量。要消两个变量必须圈 4 个相邻 1。
Q5. 组合逻辑电路的竞争冒险现象通常出现在?
- A.输出信号完全稳定之后
- B.输入信号跳变的瞬间← 正确答案
- C.时钟上升沿到来之时
- D.电源电压波动的过程
答案:B。冒险源于输入翻转时多条路径延迟不同,A 和 A' 短暂同时为 0 造成毛刺,所以只出现在输入变化的瞬间。时钟沿是时序电路的节奏点,与竞争冒险无直接关系。
Q6. 用冗余项消除 F = A·B + A'·C 的静态 1 冒险,应加入?
- A.非门一个
- B.冗余与项 B·C← 正确答案
- C.选通脉冲信号
- D.输出端接地
答案:B。当 B=C=1 时 F 退化为 A+A',加入 B·C 后该冗余项恒为 1,能把输出拉稳。非门、选通脉冲和接地都无法在该条件下提供恒定高电平。
Q7. 函数 F(A,B,C) = Σm(1,3,6,7) 的最简与或式是?
- A.A'C + AB← 正确答案
- B.A'B + AC
- C.AB + BC
- D.A'C + BC
答案:A。m(1)=001、m(3)=011 相邻合并为 A'C;m(6)=110、m(7)=111 相邻合并为 AB。因此最简式为 A'C+AB。B、C、D 都对应了其他最小项集合,与给定函数不等价。
Q8. 某组合电路卡诺图在 AB=11、C=0 时输出 1,其余输出 0,其最简式为?
- A.F = AB·C'← 正确答案
- B.F = AB + C'
- C.F = A + B + C'
- D.F = A'B'C
答案:A。仅当 A=1、B=1、C=0 时 F=1,这是唯一的最小项,直接写成 AB·C' 即为最简式。B、C 会在其他输入组合下误输出 1,D 对应的取值组合是 000。
Q9. 以下哪些属于组合逻辑电路?
- A.半加器← 正确答案
- B.数据选择器← 正确答案
- C.D 触发器
- D.数值比较器← 正确答案
答案:ABD。半加器、数据选择器、比较器的输出都只取决于当前输入,属于组合逻辑。D 触发器是典型的时序元件,靠时钟存储状态,不属于组合逻辑。
Q10. 消除组合逻辑冒险的常用手段有哪些?
- A.增加冗余与项← 正确答案
- B.输出端加选通脉冲← 正确答案
- C.提高电源电压
- D.输出端加滤波电容← 正确答案
答案:ABD。冗余项能在关键条件下拉稳输出,选通脉冲可避开毛刺时段采样,滤波电容吸收高频毛刺,三者都能有效消除冒险。提高电源电压与毛刺无关,反而可能加剧功耗问题。