数字逻辑完整示例

从全加器真值表到卡诺图和逻辑电路

通过一个完整问题,把 DeepCalcs 的三个数字逻辑工具串联起来。我们先定义一位全加器,生成带两个输出的真值表,分别化简 SUM 和 CARRY,最后把结果转换成门电路。

打开完整的全加器真值表 →

全加器有什么作用?

全加器把三个一位输入相加:A、B 和进位输入 C。它产生两个输出:SUM 是结果的低位,CARRY 是高位,也可以作为下一级的进位输入。

SUM 输出

当三个输入中有奇数个 1 时,SUM 为 1。

SUM = A ⊕ B ⊕ C

CARRY 输出

当至少两个输入为 1 时,CARRY 为 1。

CARRY = AB + AC + BC

第 1 步:建立双输出真值表

三个输入一共产生 2³ = 8 行。每一行都可以看作 A、B 和 C 的二进制加法。例如,1 + 1 + 0 等于二进制 10,因此 SUM 为 0,CARRY 为 1。

mABCSUMCARRY含义
0000000 + 0 + 0 = 0
1001100 + 0 + 1 = 1
2010100 + 1 + 0 = 1
3011010 + 1 + 1 = 2
4100101 + 0 + 0 = 1
5101011 + 0 + 1 = 2
6110011 + 1 + 0 = 2
7111111 + 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
打开 SUM 卡诺图 →

第 3 步:化简 CARRY 输出

在最小项 3、5、6 和 7 中填入 1。最小项 7 可以同时属于三个两单元格分组:

  1. m3 与 m7 分组,B 和 C 保持为 1,得到 BC。
  2. m5 与 m7 分组,A 和 C 保持为 1,得到 AC。
  3. m6 与 m7 分组,A 和 B 保持为 1,得到 AB。
CARRY = AB + AC + BC

每个分组都是必要的,因为 m3、m5 和 m6 分别只出现在其中一个组里。因此,m7 处的重叠是必要的,而不是多余的。

打开 CARRY 卡诺图 →

第 4 步:推导门电路

直接实现时,SUM 使用两个级联异或门;CARRY 使用三个二输入与门,再接入一个或门。常见实现会先建立中间信号 P = A ⊕ B,再让两个输出共用它:

P = A ⊕ B
SUM = P ⊕ C
CARRY = 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 项,因此两种写法基于不同的实现门库。

在计算器中继续

修改输出、检查自己的分组,或输入另一条代数化简步骤。每个工具都会把当前问题保存在可分享链接中。

真值表生成器卡诺图化简器布尔代数化简器练习布尔逻辑