数字逻辑完整示例
从全加器真值表到卡诺图和逻辑电路
通过一个完整问题,把 DeepCalcs 的三个数字逻辑工具串联起来。我们先定义一位全加器,生成带两个输出的真值表,分别化简 SUM 和 CARRY,最后把结果转换成门电路。
打开完整的全加器真值表 →全加器有什么作用?
全加器把三个一位输入相加:A、B 和进位输入 C。它产生两个输出:SUM 是结果的低位,CARRY 是高位,也可以作为下一级的进位输入。
SUM 输出
当三个输入中有奇数个 1 时,SUM 为 1。
SUM = A ⊕ B ⊕ CCARRY 输出
当至少两个输入为 1 时,CARRY 为 1。
CARRY = AB + AC + BC第 1 步:建立双输出真值表
三个输入一共产生 2³ = 8 行。每一行都可以看作 A、B 和 C 的二进制加法。例如,1 + 1 + 0 等于二进制 10,因此 SUM 为 0,CARRY 为 1。
| m | A | B | C | SUM | CARRY | 含义 |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 + 0 + 0 = 0 |
| 1 | 0 | 0 | 1 | 1 | 0 | 0 + 0 + 1 = 1 |
| 2 | 0 | 1 | 0 | 1 | 0 | 0 + 1 + 0 = 1 |
| 3 | 0 | 1 | 1 | 0 | 1 | 0 + 1 + 1 = 2 |
| 4 | 1 | 0 | 0 | 1 | 0 | 1 + 0 + 0 = 1 |
| 5 | 1 | 0 | 1 | 0 | 1 | 1 + 0 + 1 = 2 |
| 6 | 1 | 1 | 0 | 0 | 1 | 1 + 1 + 0 = 2 |
| 7 | 1 | 1 | 1 | 1 | 1 | 1 + 1 + 1 = 3 |
SUM 的最小项是 Σm(1,2,4,7);CARRY 的最小项是 Σm(3,5,6,7)。
第 2 步:化简 SUM 输出
在最小项 1、2、4 和 7 对应的单元格中填入 1。在三变量卡诺图中,这四个 SUM 单元格没有任意两个相邻,因此普通 SOP 分组无法消去变量。标准最简 SOP 仍然是:
SUM = A′B′C + A′BC′ + AB′C′ + ABC识别出奇偶校验模式后,可以写成更实用的异或形式:
SUM = A ⊕ B ⊕ C第 3 步:化简 CARRY 输出
在最小项 3、5、6 和 7 中填入 1。最小项 7 可以同时属于三个两单元格分组:
- m3 与 m7 分组,B 和 C 保持为 1,得到 BC。
- m5 与 m7 分组,A 和 C 保持为 1,得到 AC。
- m6 与 m7 分组,A 和 B 保持为 1,得到 AB。
CARRY = AB + AC + BC每个分组都是必要的,因为 m3、m5 和 m6 分别只出现在其中一个组里。因此,m7 处的重叠是必要的,而不是多余的。
打开 CARRY 卡诺图 →第 4 步:推导门电路
直接实现时,SUM 使用两个级联异或门;CARRY 使用三个二输入与门,再接入一个或门。常见实现会先建立中间信号 P = A ⊕ B,再让两个输出共用它:
P = A ⊕ BSUM = P ⊕ CCARRY = AB + PC这个因式分解形式与 AB + AC + BC 等价,并且可以复用 P。
因式分解后的电路是否更便宜,取决于可用门库、扇入限制,以及其他位置是否也需要这个异或信号。
查看 CARRY 推导 →这个例子中的常见错误
- 误用半加器真值表,忘记进位输入 C。
- 把 SUM 写成普通或运算,而不是三输入异或。
- 试图把卡诺图中对角线方向的 SUM 单元格分为一组。
- 因为三个 CARRY 分组在 m7 重叠,就错误地把它们排除。
- 认为最短 SOP 一定对应成本最低的硬件实现。
检查理解
为什么 SUM 在最小项 1、2、4 和 7 时为 1?
这些行含有奇数个值为 1 的输入。异或在奇校验时输出 1。
为什么 m7 可以同时属于三个 CARRY 分组?
卡诺图允许分组重叠。每个重叠组分别覆盖其他组无法覆盖的 m3、m5 或 m6。
为什么异或形式看起来比最简 SOP 更短?
SOP 成本模型使用与、或、非文字;异或是更高级的运算符,其内部代表多个 SOP 项,因此两种写法基于不同的实现门库。
在计算器中继续
修改输出、检查自己的分组,或输入另一条代数化简步骤。每个工具都会把当前问题保存在可分享链接中。
真值表生成器卡诺图化简器布尔代数化简器练习布尔逻辑