逻辑门与布尔代数

本页目录

两个表达式的真值表完全相同,做成门电路后仍可能出现不同的毛刺;一个输出被称作“高电平”,也不保证能被另一个芯片可靠识别。数字逻辑需要同时处理布尔功能、传播时序和模拟电平。本篇先把代数写清,再用卡诺图和路径延迟解释这三层关系。

要判断的事项使用的工具阅读位置
输入组合对应什么输出真值表、布尔表达式运算与取反范围
怎样减少逻辑项恒等式、卡诺图从真值表到覆盖
同一功能为何仍有毛刺路径延迟与冒险逻辑等价不等于时序等价
两个引脚能否直接连接输出保证值与输入门限0/1 是电压范围
静态和切换怎样耗电CMOS 导通路径与负载电容理想门与真实芯片

运算与取反范围

布尔变量只有 0、1。本文使用 A·B 表示 AND,A+B 表示 OR,¬A 表示 NOT,A⊕B 表示 XOR;这里的加号不是普通整数加法,1+1 仍为 1。括号明确取反范围,¬(A·B) 不能误写成 A·¬B。

ABANDORNANDNORXORXNOR
00001101
01011010
10011010
11110001

NOT 将 0 变 1、1 变 0。二输入 XOR 表示不同为 1,XNOR 为其取反;多个输入连续异或表示 1 的个数为奇数时输出 1,不能继续理解成“所有输入两两不同”。

化简靠恒等式,而非普通代数直觉

关系表达式作用
幂等A+A=A,A·A=A去掉重复条件
互补A+¬A=1,A·¬A=0识别恒真与矛盾
双重否定¬(¬A)=A恢复原变量
吸收A+A·B=A已覆盖的项不改变功能
分配A(B+C)=AB+AC在积与和之间展开
对偶分配A+BC=(A+B)(A+C)布尔代数特有的常用形式
德摩根¬(AB)=¬A+¬B;¬(A+B)=¬A·¬B取反时同时交换 AND/OR

例如 AB+A¬B=A(B+¬B)=A。又如 Y=¬(AB)+C,经德摩根得到 ¬A+¬B+C;如果只把 B 取反,就已经改变函数。

NAND 具有功能完备性:A NAND A 得到 NOT;将 NAND 结果再取反得到 AND;(A NAND A) NAND (B NAND B) 得到 OR。因此在无状态布尔函数层面能由 NAND 构造任意组合逻辑,NOR 同理。这不证明只用一种门一定面积最小、速度最快;存储器 NAND/NOR 的名称也不是由“门能实现所有函数”这一事实推导出来的。

从真值表到覆盖

对 n 个输入,完整真值表有 2ⁿ 行。若把每个输出为 1 的行写成一个最小项,再将这些项 OR 起来,就得到积之和表达式。例如三变量编码按 ABC 从高到低,二进制 001 对应 ¬A¬BC。

卡诺图把行列按 Gray 顺序排列,使相邻格只改变一位。可以把相邻的 1 组成矩形,格数为 1、2、4、8 等二的幂;组内变化的变量被消去,保持不变的变量留下。每个组得到的是覆盖多个最小项的蕴含项,不是“圈得越大又写出更多最小项”。MIT:组合逻辑与卡诺图

取 Y=Σm(1,3,6,7),图中 BC 按 00、01、11、10 排列。上行两个 1 中 B 变化而 A=0、C=1,得到 ¬AC;下行两个 1 中 C 变化而 A=1、B=1,得到 AB。所以 Y=¬AC+AB。

A / BC000111100011010011紫:¬A·C绿:A·B橙:冗余项 B·C卡诺图:相邻格只改变一位,跨行的 BC 还能覆盖静态冒险上下边界、左右边界也相邻;两行 BC=11 的 1 若没有共同覆盖项,A 切换时可能出现低脉冲。

边缘也相邻,四角在适当尺寸图中可形成跨边界组;分组可以重叠,不应包含确定为 0 的格。“无关项”只能来自任务保证不会发生或输出无要求的条件,不能因为某输入难处理就任意标成 X。未初始化和故障状态若可能出现,应考虑相应行为。

门数量、输入数、逻辑深度、扇出和目标工艺都会影响实现代价,字面最短表达式不一定对应最快或最小电路。复杂逻辑通常借助综合工具,但真值表与覆盖仍是理解结果的基础。

逻辑等价不等于时序等价

继续使用 Y=AB+¬AC,令 B=C=1。在稳态无论 A 为 0 还是 1,Y 都为 1;但 A 从 1 变 0 时,AB 路径可能先变 0,经过反相器的 ¬AC 路径稍后才变 1,中间出现两个乘积项都为 0 的空档。这叫静态 1 冒险。

AA·B¬A·C原输出 Y加 B·C 后短暂低脉冲B = C = 1,A 从 1 变 0:稳态恒为 1,路径交接却可能出现空档仅模式図路径先后关系,省略末级门的共同传播延迟;冗余覆盖结论针对指定两级实现与单输入变化。

加入冗余项 BC 得 Y=AB+¬AC+BC,不改变真值表,却在 B=C=1、A 切换时提供一个保持为 1 的路径。卡诺图上,就是增加覆盖上下两个 BC=11 格的公共组。MIT:组合逻辑冒险与覆盖

这个结论针对相应两级实现和一次只有 A 改变的条件,不能保证任意多级映射、多个输入同时变化都无毛刺。综合工具若为面积再次删除冗余项,还需要确认实现后的目标约束。动态冒险和多输入功能冒险也不全由这一项解决。

同步系统可以在组合逻辑充分稳定后由寄存器采样,但要满足建立/保持时间,毛刺也可能增加动态功耗。时钟、异步复位或直接驱动外部动作的信号对毛刺尤其敏感。不能随意在普通门输出并电容当成通用修复:它会增加负载、拖慢边沿并可能违背输入转换时间要求;需要滤波时应设计明确的 RC 与适当输入结构。

同一真值表,为什么有毛刺?

不必播放逐步门动画,直接把两次到达时间错开就能看到空档。交换先后顺序,空档变成重叠,静态1冒险在这个模型中消失。加入BC后两种顺序都保持高,但这个结论只覆盖正文约定的单输入变化。

正在呈现知识画面
同一真值表,为什么有毛刺?

稳态等价不保证切换等价;BC在指定单输入切换期间保持为1,可以覆盖两条路径都为0的空档。

0/1 是电压范围

V_IL(max) 是保证识别为低的输入上限,V_IH(min) 是保证识别为高的输入下限;两者之间的输入值不保证逻辑结果,不等于器件有第三种稳定布尔值。普通输入的实际翻转点还会随器件、供电和温度变化。

连接前级与后级,要用前级在规定电流下的 V_OH(min)、V_OL(max),分别与后级 V_IH(min)、V_IL(max) 对照:高电平静态噪声裕量 NM_H=V_OH(min)−V_IH(min),低电平为 NM_L=V_IL(max)−V_OL(max)。

假设前级高输出至少 2.9 V、低输出最多 0.2 V;后级要求高至少 2.0 V、低最多 0.8 V,则两边裕量分别为 0.9 V 和 0.6 V。这只检查静态电平,还要核对绝对最大输入电压、未供电容忍、参考地偏移和边沿条件。

TTL/CMOS 不是足够精细的电平规格。即使同属 CMOS 实现,HC 与 HCT 等系列的输入门限也可不同;电源相同不保证接口兼容,也不能由“CMOS”三个字推出噪声裕量一定优于所有 TTL。Nexperia:74HC00 / 74HCT00

浮空、慢边沿与施密特输入

CMOS 输入浮空时,漏电和耦合可能把电压带到转换区域,使输出不确定并增加内部电流。慢边沿或噪声多次跨过翻转点,也可能造成重复切换。施密特输入有不同的上升与下降阈值,可提供迟滞,但仍应遵守它的电压和使用条件。TI:慢边沿与浮空 CMOS 输入

未使用输入按器件要求固定到有效状态,可以直接连接或用合适电阻;输出脚不能当输入随意绑到电源轨。推挽输出通常也不能直接并联“增强驱动”,开漏等结构则需要按对应规则使用上拉与线与逻辑。

理想门与真实芯片

CMOS 反相器用上拉 PMOS 和下拉 NMOS。输入接近低轨时 PMOS 导通、NMOS 关闭,输出被拉高;输入接近高轨时相反。过渡期间两管可能同时部分导通,输出负载电容也要充放电,因此实际不仅有静态漏电,还有短路电流和动态功耗。

常用估计 P_dyn≈αC_LV_DD²f,本文 α 定义为每个参考周期中输出发生 0→1 充电事件的平均次数。不同资料对活动因子的定义可能包含不同计数约定,不能遗漏这个条件。输出不切换时也仍可能有漏电、输入偏置和内部其他活动,不能写成“只有切换瞬间才耗电”。

扇出不只是最多接几个输入:静态输入电流、电容、走线与所需时序共同决定驱动负担。传播延迟 t_pLH/t_pHL 依赖供电、温度、负载与输入转换条件,真值表不包含这些信息。

常见功能编号示例逻辑功能使用前再查
00、02四路二输入 NAND、NOR具体系列与封装引脚
04、14六路反相器;14 常为施密特输入输入类型与门限
08、32、86AND、OR、XOR供电、输出驱动和延迟
595、165移位/锁存相关功能已是含状态器件,不能只用组合真值表描述

编号只是定位入口,完整型号的前后缀、逻辑系列和封装决定实际规格。下一篇 组合逻辑电路 用这些门组织加法器、译码器和多路选择器。

from itertools import product

def nand(a,b): return not (a and b)
for a,b,c in product([False,True], repeat=3):
    original = (a and b) or ((not a) and c)
    covered = original or (b and c)
    assert original == covered
    index = 4*int(a)+2*int(b)+int(c)
    assert original == (index in {1,3,6,7})
    assert (not (a and b)) == ((not a) or (not b))
    assert nand(nand(a,a),nand(b,b)) == (a or b)
assert (False or False) is False
assert (False or False or True) is True
print("8 种输入:卡诺图、冗余覆盖、德摩根和 NAND 构造均一致")

这段穷举验证布尔功能,不验证门延迟、实际毛刺或接口电平;物理实现仍需对应时序和电气检查。