计算机 / AI · 初中 /高中 · 数字电路 · 逻辑门 · 二进制 · CPU
二进制加法器
计算机怎么算 1+1 ?XOR 和 AND 两种逻辑门,拼出半加器、全加器,串起来就是 CPU 加法的原型。
两个逻辑门
整个 CPU 的加法器都建立在这两个逻辑门上:
XOR(异或):两输入不同时为 1
0 XOR 0 = 0 1 XOR 0 = 1
0 XOR 1 = 1 1 XOR 1 = 0
AND(与):两输入都为 1 时为 1
0 AND 0 = 0 1 AND 0 = 0
0 AND 1 = 0 1 AND 1 = 1
半加器:1 位加法
加两位二进制位 A、B(不考虑进位):
| A | B | Sum | Carry |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
观察:
- Sum = A XOR B
- Carry = A AND B
这就是半加器。1 个 XOR 加 1 个 AND 就是全部。
全加器:带”进位输入”
实际多位加法每一位都要接收前一位送来的进位。所以输入变成 3 个:A、B、C_in。
| A | B | C_in | Sum | C_out |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
公式:
- Sum = A XOR B XOR C_in
- C_out = (A AND B) OR (C_in AND (A XOR B))
全加器 = 两个半加器 + 一个 OR 门。
4 位加法器:串起来
4 个全加器首尾相接,前一位的 C_out 接下一位的 C_in。最低位的 C_in 接 0(没有更低的位送进位)。
这种结构叫行波进位加法器(ripple-carry adder):
- 优点:电路最简单,每位只用了 ~5 个门
- 缺点:高位要等低位的进位”传播”过来,速度由位数线性决定
调上面的 A 和 B,看进位怎么从右往左传播。红色线 = 1,灰色线 = 0。
从这里到现代 CPU
- 64 位加法器:64 个全加器,串起来要等 64 级延迟,太慢
- 超前进位加法器(CLA):预先并行算出”是否会产生进位”,把延迟从 O(n) 降到 O(log n)
- 乘法器:累加移位的加法器
- 除法器:减法 + 比较 + 移位
- 浮点单元:复杂得多,但本质还是定点运算 + 指数处理
整个 CPU 算术逻辑单元(ALU)就是几百万个这样的门拼起来。
- Intel i9 大约 200 亿晶体管
- 每个 NAND / NOR 门 ≈ 4 个晶体管
- 所以 i9 内部 ≈ 50 亿个逻辑门
从”原子的开关”到 ChatGPT
逻辑门可以用任何能”被控制开关”的东西做:
- 19 世纪:机械继电器
- 20 世纪初:真空管(早期计算机)
- 1947 年:晶体管发明
- 1958 年:集成电路
- 今天:纳米级 CMOS 晶体管
无论物理实现是什么,只要能稳定地表示 0 和 1,并且实现 NAND / NOR,就能构造出整个计算机。NAND 是”通用逻辑门” —— 单独靠它能组合出 AND、OR、XOR、半加器、全加器、寄存器、内存、CPU…… 一切。
ChatGPT 跑的几万亿次乘加,最终归结到的就是这种 4 位加法器的放大版。