前进笔记

从继电器到CPU ---- 用继电器设计逻辑门

说在前面

本文因为篇幅过长分多部分编写,本篇为 用继电器设计逻辑门
下篇文章(未完成)

很久没更新了,因为快开学了,最近一直在忙着整理东西。抽出零碎时间完成的这篇一直想写却没完成文章,如有疏漏疑问还请指出。

下文会使用 KiCad 以及名叫 Logisim 的简单工具进行演示。

引言

很多很多年以前,人们还使用继电器造出过计算器,计算机等计算工具。
现如今这些东西可能只能在博物馆中出现,这里提供一些资料。

Timeline of Computer History
Relay computers of George Stibitz
Wikipedia_马克一号
计算机史话

M-1 计算器可能实现了世界上最早的 “云计算”

本篇主要对继电器搭建逻辑门进行讲解,内容基础。

继电器与真值表

继电器(Relay),一种常见电子控制器件,初中时我们就学习过它的原理,小学时我们知道通电线圈加上铁芯可以变成一个电磁铁,常见的电磁继电器正是依靠电磁铁工作的。

如左下图 D,E 点通电时,衔铁被吸下,B,C 连通;未通电时则 B,A 连通。

继电器工作原理的动画(Stefan Riepl 作品

根据这一原理,我们可以将继电器简化为如下原理图(使用 KiCad 绘制)

有了继电器,我们先来点亮一个灯泡。

可见电路中只有 “有” 和 “无” 两种信号。

现在,我们来定义一下,开关 SW1 称为 输入端1(A) ,灯泡称为 输出端(Y) ,电平信号的高低分别定义为 1 和 0 。根据电路的逻辑关系可以得到以下的对应关系,我们将它称为 真值表:

输入端1输出端
00
11
由于逻辑电路与逻辑代数总是分不开的,下文会以 字母 A,B 代表输入,Y 代表输出,简单列出逻辑运算表达式,运算符等不做赘述,不同浏览器可能会对公式阅读产生影响,看不明白可以先忽略这一部分:$Y = A$

虽然这还称不上是一个逻辑门,但是在了解这些基础知识之后,马上就可以开始搭建逻辑门了。

不过遗憾的是 Logisim 中并没有提供这一组件,所以接下来有关图解主要以上面的电器原理图手绘为主,并由浅至深,循序渐进地进行讲解。

基础逻辑门入门

首先来看一下,这个表格所罗列出的是基本逻辑门(摘自 Wikipedia_逻辑门

基本逻辑门
缓冲
与非
或非
异或同或
蕴含蕴含非

现在先从最基本的 与门(AND),或门(OR),非门(NOT) 入手,根据它们的英文名很容易理解各自特性。

简单逻辑门的制作 ----与或非

与门 AND

取来两个继电器,如图串联

显然,只有在两个开关全部接通的情况下(即电平信号为 1 ),灯泡才会点亮。

现在我们多了一个开关 SW2 ,称它为输入端2
它的真值表如下:

输入端1输入端2输出端
000
010
100
111

现在我们把这一整部分称之为 与门 ,它有两个输入一个输出。只有在两个输入均为 1 时输出才为 1 。

逻辑表达式:$Y = A \times B$

这是它的符号
ANSIIEEE 标准,下文符号均按照此标准,公有领域图片)

或门 OR

取来两个继电器,如图并联

现在,不论是只闭合 SW1 还是 SW2 甚至是同时闭合两个开关,灯泡都能被点亮。

很好,我们得到了一个 或门 ,这是它的真值表

输入端1输入端2输出端
000
101
011
111

和 与门 一样 ,它也有两个输入一个输出,只要满足任意输入为 1 时,输出值就是 1 。

逻辑表达式:$Y = A + B$

这是它的符号

非门 NOT

这个逻辑门看上去与点灯示例很像,看仔细了!

这个接线意味着灯泡一开始就是通电亮的,闭合 SW1 后电路断路,灯就灭了。

这个门电路叫做 非门 ,这是它的真值表:

输入端1输出端
01
10

与前两个逻辑门不同的是,他只有一个输入和输出,而且输入与输出总是相反。

逻辑表达式:$Y = \overline{A}$

它的符号长这样

更进一步 ---- 与非? 或非?

现在,终于可以转战 Logisim 了,使用 KiCad 手绘电路状态并不是一件轻松的事。

在得到 与或非 这三个逻辑门后,我们不妨试试将不同的逻辑门连接在一起,这样可以组成更多新的门电路,我们称他们为 复合逻辑门

我们已经知道, 非门 的输入与输出总是相反,因此可以利用它的反相功能实现电平翻转。

试着将 非门 与另外连个逻辑门连接,现在制造出了这样两个逻辑门。

相互连接两个 非门 似乎毫无意义,但事实上也制造了一个新的逻辑门 缓冲门 ,这个在后面会讲到。

与非门 NAND

左边是一个 与门 连上了一个 非门 ,简化一下就变成了右边的符号。

这个逻辑门叫做 与非门,它的逻辑与 与门 相反,对应真值表如下:

输入端1输入端2输出端
001
011
101
110

逻辑表达式:$Y = \overline{A \times B}$

或非门 NOR

同样的,这是 或非门

这是 或非门 的真值表:

输入端1输入端2输出端
001
010
100
110

逻辑表达式:$Y = \overline{A + B}$

难度提升 ---- 异或? 同或?

现在已经得到了 与门,或门,非门,与非门,或非门 这五种不同的逻辑门,那其他逻辑门该怎么制造呢?

与门 + 或门?

非门 用完了,现在就只有 与门 和 或门 的连接没有尝试了。但是这两个逻辑门都有两个输入一个输出,这怎么连?

这两个逻辑门都是有两个输入端的逻辑门,每个门只使用一次的话,不论怎么连接都会缺少输入端,当然不能直接连接,之后需要至少三个逻辑门才能组成新的逻辑门。

顺便提一下,与非门 或非门 可以制造出任意的门电路,因此也被称为 通用逻辑门

异或门 XOR

先给出 异或门 的真值表:

输入端1输入端2输出端
000
011
101
110

试着推导一下,这是讲解到目前为止最复杂的一个逻辑门,如果能推导出来,说明已经掌握了上面的知识。

可以结合异或运算法则:$a⊕b = (¬a ∧ b) ∨ (a ∧¬b)$

当输入端均为 1 时,输出为 0 ,意味着电路中一定包含了反相器,根据 $A \times \overline{B} + \overline{A} \times B$ 推理出原理图。

这里还没有使用到 与非门 和 或非门

其实有多种方式制作 异或门:

仅使用 或非门 制作 异或门:

仅使用 与非门 制造 异或门:

与非门,或门,与门 制作 异或门:

逻辑表达式:$Y = A \bigoplus B$

同或门 XNOR

这是 同或门 的真值表:

输入端1输入端2输出端
001
010
100
111

简单!这是反相过的 异或门,你也可以叫它 异或非门

逻辑表达式:$Y = \overline{A \bigoplus B}$

特别的逻辑门

缓冲门 BUF

这是一个比较特别的逻辑门,也叫做 同相器

缓冲门 真值表:

输入端1输出端
00
11

连接两个非门似乎毫无意义,事实上,它可以做一个中继器。玩过 Minecraft 的红石电路对于这一点一定不陌生,中继器能将一个微弱的信号增强为较强的信号。实际应用中,也常常将它作为信号延迟元件,所以叫做缓冲门。

逻辑表达式:$Y = A$

蕴涵门

蕴涵门 和 蕴涵非门 似乎很少在实际应用中出现,具体作用我还不太理解,感兴趣可以参考一下 这篇文章

蕴涵门 的真值表:

输入端1输入端2输出端
001
011
100
111

逻辑表达式:$Y = \overline{A} + B$

蕴涵非门

反相后的蕴涵门。

蕴涵非门 的真值表:

输入端1输入端2输出端
000
010
101
110

逻辑表达式:$Y = \overline{ \overline{A} + B }$

KiCad 组件合照

我还没有开始使用像 Multisim 这样的软件,所以每一步演示图都是手工画的,文字部分使用 PhotoShop 补充。

继电器原理图是用变压器和单刀双掷开关改的。

关于情怀

话说这个项目从某种程度上讲,其实早在初二的时候就已经完成了。有一段时间因为玩 我的世界(Minecraft)会犯3D眩晕症,按贴吧大佬的指示入坑了名为 生存战争(Survivalcraft)的沙盒游戏。

相比较我的世界,生存战争中的世界更加贴近于现实,最重要的是还拥有先进的电路系统,而那时的移动端原版我的世界还未加入红石电路,而生存战争不仅有基础的逻辑门甚至还有更加复杂的 RS锁存器,数模转换模块等等。事实上,因为制作耗时耗力占空间,我不太喜欢红石电路,而 Survivalcraft 对常用器件进行了模块化,所以玩起电路更方便。接触这个游戏后我不禁感叹 "电路原来还能这样玩!",这也是我的数字电路的启蒙游戏。

恰巧那段时间又热衷于研究操作系统和底层硬件,便萌生了在游戏里制作简单的 CPU 的这样一个想法,甚至还一度希望在现实中实现这样一个设计。经过一段时间,在了解了一些基础知识之后,我意识到要想制作 CPU 有点困难,便决定先从最简单的一部分开始尝试 ———— CPU 主要组件之一 运算单元(ALU)中的 全加器(Full Adder)。

通过搜索引擎渐渐了解并学习了 Logisim 这款简单的电路仿真软件,在知道甚至有同龄人使用它设计出了简易的 CPU 后,发觉自己真的是才疏学浅,不禁对自己狭窄的知识面感到不安惭愧。
待续。

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »