Menu Close

为什么只用 NAND 门就能构建一台完整的计算机?

NAND 门看起来只是一个非常小、非常简单的数字电路。

为什么只用 NAND 门就能构建一台完整的计算机?

它接收两个二进制输入,并产生一个二进制输出。

但是,这个看似简单的逻辑门却有一个非常特别的性质:

从理论上来说,一台完整的数字计算机可以只使用 NAND 门构建出来。

这听起来可能有些不可思议。

因为一台计算机需要算术电路、寄存器、存储器、控制逻辑,以及许多其他复杂的组成部分。

这么多东西,怎么可能全部来自一种逻辑门?

答案就在于:

NAND 门是一种通用逻辑门(Universal Gate)

如果我们能够使用 NAND 门重新实现最基本的逻辑运算,那么这些基本逻辑就可以进一步组合,构成越来越复杂的数字电路。

下面我们一步一步来看。

1. 什么是 NAND 门?

NAND 门和 AND 门的关系非常密切。

AND 门只有在两个输入都为 1 的时候,输出才是 1。

对于 AND 门:

0 AND 0 → 0

0 AND 1 → 0

1 AND 0 → 0

1 AND 1 → 1

NAND 的意思就是:

NOT AND

也就是说,NAND 门先执行 AND 运算,然后把结果反转。

因此,它的行为是:

0 NAND 0 → 1

0 NAND 1 → 1

1 NAND 0 → 1

1 NAND 1 → 0

只有当两个输入都是 1 的时候,NAND 门的输出才是 0。

其他所有输入组合,输出都是 1。

如果只看一个 NAND 门,它似乎并没有多么强大。

真正有意思的地方,是当多个 NAND 门连接在一起以后会发生什么。

2. NAND 可以构建 NOT 门

第一个非常有用的方法其实很简单。

一个 NAND 门通常有两个输入。

但是,如果我们把这两个输入连接在一起,让它们接收同一个信号,会发生什么?

如果输入是 0:

0 NAND 0 → 1

如果输入是 1:

1 NAND 1 → 0

这正好就是 NOT 门的行为。

因此:

把 NAND 门的两个输入连接在一起 = NOT 门

这一点非常重要。

因为这说明 NAND 已经可以实现逻辑取反。

但这还只是开始。

3. NAND 可以构建 AND 门

前面已经讲过,NAND 本质上就是 AND 的反结果。

所以,如果我们把 NAND 的输出再反转一次,就会得到 AND。

第一个 NAND 门执行:

A NAND B

然后,再使用另一个 NAND 门,把它当作 NOT 门,对第一个 NAND 的结果进行反转。

最终得到:

A AND B

因此,只需要两个 NAND 门,就可以构建出一个 AND 门。

这意味着 NAND 已经能够实现:

NOT

以及:

AND

接下来,还差另一个非常基础的逻辑操作。

4. NAND 也可以构建 OR 门

乍一看,OR 和 NAND 似乎差别很大。

但是在布尔逻辑中,我们可以使用 NOT 和 AND 来构建 OR。

这个关系来自著名的德摩根定律(De Morgan’s Law)

从概念上可以表示为:

A OR B = NOT of NOT A AND NOT B

也就是说:

先对 A 取反。

再对 B 取反。

然后对两个反转后的信号进行组合。

因为 NAND 已经可以实现 NOT,也可以实现 AND,所以它同样可以实现 OR。

最终,只使用 NAND 门,我们就可以构建:

NOT

AND

OR

这就是整个问题的关键。

5. 为什么 NAND 被称为通用逻辑门?

AND、OR 和 NOT 是最基本的布尔逻辑运算。

许多更加复杂的逻辑功能,都可以通过组合这三种基本操作构建出来。

如果 NAND 可以重新实现 AND、OR 和 NOT,那么 NAND 也就可以进一步实现任何由 AND、OR、NOT 构成的布尔逻辑电路。

这就是为什么 NAND 被称为:

通用逻辑门(Universal Gate)

这里的“通用”,并不是说一个 NAND 门自己就可以完成所有工作。

它真正的含义是:

只要有足够多的 NAND 门,并且按照正确的方法连接,就可以实现任意布尔逻辑功能。

这赋予了 NAND 非常重要的理论能力。

一旦我们能够实现任意布尔逻辑,就可以开始构建计算机内部真正使用的各种电路。

6. 从 NAND 门到算术运算

考虑计算机最重要的工作之一:

二进制加法。

一个二进制加法器,可以使用 XOR、AND 和 OR 等逻辑门构建。

但是 XOR 本身也可以使用 NAND 门构建。

AND 和 OR 前面已经证明,同样可以用 NAND 门构建。

这意味着:

一个二进制加法器,最终完全可以只使用 NAND 门实现。

多个加法器还可以继续连接起来,从而对更大的二进制数字进行加法运算。

这些加法电路可以进一步成为**算术逻辑单元(Arithmetic Logic Unit,ALU)**的一部分。

ALU 可以执行很多基本运算,例如:

加法,

减法,

逻辑 AND,

逻辑 OR,

比较,

以及其他基础计算。

于是,我们就可以看到这样一条逐渐向上的构建路径:

NAND 门 → 逻辑功能 → 加法器 → ALU

到这里,我们已经开始接近处理器内部最重要的组件之一了。

7. NAND 门也可以构建存储和控制逻辑

计算机不仅需要进行计算。

它还需要保存信息。

某些特殊的逻辑门连接方式,可以让电路保持某种状态。

这类电路进一步发展,就可以形成:

锁存器,

触发器,

寄存器,

以及各种存储结构。

这些电路同样可以使用 NAND 门构建。

例如,一个简单的锁存器,就可以通过两个交叉连接的 NAND 门实现。

这意味着 NAND 门不仅可以参与计算,还可以参与二进制信息的存储

基于 NAND 的逻辑还可以构建:

多路选择器,

译码器,

计数器,

控制电路,

寄存器选择逻辑,

以及许多其他数字组件。

这些组件还可以继续组合成更大的系统。

于是,整个层次结构可以变成:

NAND 门

逻辑门

加法器、多路选择器、译码器和触发器

寄存器、ALU 和控制逻辑

CPU

从理论上来说,一台计算机所需要的全部数字逻辑,都可以按照这样的方式构建出来。

8. 真实计算机真的只使用 NAND 门吗?

通常并不是。

现代处理器并不是通过人工连接数十亿个完全相同的 NAND 门符号设计出来的。

真实的芯片设计会使用很多不同类型的优化电路结构。

设计人员会根据不同需求选择合适的电路,例如:

速度,

功耗,

芯片面积,

时序,

以及制造工艺。

晶体管层面,现代处理器的真实电路,也远比入门教材中的简单逻辑图复杂得多。

因此,当我们说:

一台计算机可以完全使用 NAND 门构建

这里主要讨论的是一种逻辑能力

它说明 NAND 门本身具有足够强的表达能力,可以重新实现数字计算所需要的全部布尔逻辑。

但这并不意味着,在真实芯片制造中,只使用 NAND 门一定是效率最高或者性能最好的方案。

Conclusion

NAND 门是数字电子技术中最简单的基本组件之一。

它的行为非常容易描述:

只有当两个输入都是 1 时,输出才是 0。

但当大量 NAND 门连接在一起以后,就会产生非常强大的能力。

NAND 可以构建 NOT。

NAND 可以构建 AND。

NAND 可以构建 OR。

在这些基本逻辑操作之上,我们又可以继续构建更加复杂的数字电路。

这些电路可以进一步变成:

加法器,

多路选择器,

译码器,

触发器,

寄存器,

ALU,

以及控制逻辑。

最终,这些组件还可以组合成一个处理器。

因此,当我们说 NAND 是一种通用逻辑门时,其实是在描述数字计算机背后一个非常重要的基本原理:

极其复杂的计算系统,可以从极其简单的逻辑组件中逐步构建出来。

现代 CPU 可能包含数十亿个晶体管,并拥有极其复杂的内部结构。

但在这些复杂结构的最底层,依然是围绕两个状态展开的简单逻辑运算:

0 和 1。

而 NAND 门,拥有表达这些逻辑运算所需要的全部能力。

下一篇数字逻辑教程,我们继续来看另一个非常重要的逻辑门:

为什么 XOR 门在计算机内部如此重要?

Posted in 数字逻辑教程