说在前面
本文因为篇幅过长分多部分编写,本篇为 用继电器设计逻辑门
下篇文章(未完成)
很久没更新了,因为快开学了,最近一直在忙着整理东西。抽出零碎时间完成的这篇一直想写却没完成文章,如有疏漏疑问还请指出。
下文会使用 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 | 输出端 |
---|---|
0 | 0 |
1 | 1 |
由于逻辑电路与逻辑代数总是分不开的,下文会以 字母 A,B 代表输入,Y 代表输出,简单列出逻辑运算表达式,运算符等不做赘述,不同浏览器可能会对公式阅读产生影响,看不明白可以先忽略这一部分:$Y = A$
虽然这还称不上是一个逻辑门,但是在了解这些基础知识之后,马上就可以开始搭建逻辑门了。
不过遗憾的是 Logisim 中并没有提供这一组件,所以接下来有关图解主要以上面的电器原理图手绘为主,并由浅至深,循序渐进地进行讲解。
基础逻辑门入门
首先来看一下,这个表格所罗列出的是基本逻辑门(摘自 Wikipedia_逻辑门 )
基本 | 逻辑门 |
---|---|
缓冲 | 非 |
与 | 与非 |
或 | 或非 |
异或 | 同或 |
蕴含 | 蕴含非 |
现在先从最基本的 与门(AND),或门(OR),非门(NOT) 入手,根据它们的英文名很容易理解各自特性。
简单逻辑门的制作 ----与或非
与门 AND
取来两个继电器,如图串联。
显然,只有在两个开关全部接通的情况下(即电平信号为 1 ),灯泡才会点亮。
现在我们多了一个开关 SW2 ,称它为输入端2
它的真值表如下:
输入端1 | 输入端2 | 输出端 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
现在我们把这一整部分称之为 与门 ,它有两个输入一个输出。只有在两个输入均为 1 时输出才为 1 。
逻辑表达式:$Y = A \times B$
这是它的符号
( ANSI 及 IEEE 标准,下文符号均按照此标准,公有领域图片)
或门 OR
取来两个继电器,如图并联。
现在,不论是只闭合 SW1 还是 SW2 甚至是同时闭合两个开关,灯泡都能被点亮。
很好,我们得到了一个 或门 ,这是它的真值表
输入端1 | 输入端2 | 输出端 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
和 与门 一样 ,它也有两个输入一个输出,只要满足任意输入为 1 时,输出值就是 1 。
逻辑表达式:$Y = A + B$
这是它的符号
非门 NOT
这个逻辑门看上去与点灯示例很像,看仔细了!
这个接线意味着灯泡一开始就是通电亮的,闭合 SW1 后电路断路,灯就灭了。
这个门电路叫做 非门 ,这是它的真值表:
输入端1 | 输出端 |
---|---|
0 | 1 |
1 | 0 |
与前两个逻辑门不同的是,他只有一个输入和输出,而且输入与输出总是相反。
逻辑表达式:$Y = \overline{A}$
它的符号长这样
更进一步 ---- 与非? 或非?
现在,终于可以转战 Logisim 了,使用 KiCad 手绘电路状态并不是一件轻松的事。
在得到 与或非 这三个逻辑门后,我们不妨试试将不同的逻辑门连接在一起,这样可以组成更多新的门电路,我们称他们为 复合逻辑门 。
我们已经知道, 非门 的输入与输出总是相反,因此可以利用它的反相功能实现电平翻转。
试着将 非门 与另外连个逻辑门连接,现在制造出了这样两个逻辑门。
相互连接两个 非门 似乎毫无意义,但事实上也制造了一个新的逻辑门 缓冲门 ,这个在后面会讲到。
与非门 NAND
左边是一个 与门 连上了一个 非门 ,简化一下就变成了右边的符号。
这个逻辑门叫做 与非门,它的逻辑与 与门 相反,对应真值表如下:
输入端1 | 输入端2 | 输出端 |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
逻辑表达式:$Y = \overline{A \times B}$
或非门 NOR
同样的,这是 或非门 。
这是 或非门 的真值表:
输入端1 | 输入端2 | 输出端 |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
逻辑表达式:$Y = \overline{A + B}$
难度提升 ---- 异或? 同或?
现在已经得到了 与门,或门,非门,与非门,或非门 这五种不同的逻辑门,那其他逻辑门该怎么制造呢?
与门 + 或门?
非门 用完了,现在就只有 与门 和 或门 的连接没有尝试了。但是这两个逻辑门都有两个输入一个输出,这怎么连?
这两个逻辑门都是有两个输入端的逻辑门,每个门只使用一次的话,不论怎么连接都会缺少输入端,当然不能直接连接,之后需要至少三个逻辑门才能组成新的逻辑门。
顺便提一下,与非门 或非门 可以制造出任意的门电路,因此也被称为 通用逻辑门
异或门 XOR
先给出 异或门 的真值表:
输入端1 | 输入端2 | 输出端 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
试着推导一下,这是讲解到目前为止最复杂的一个逻辑门,如果能推导出来,说明已经掌握了上面的知识。
可以结合异或运算法则:$a⊕b = (¬a ∧ b) ∨ (a ∧¬b)$
当输入端均为 1 时,输出为 0 ,意味着电路中一定包含了反相器,根据 $A \times \overline{B} + \overline{A} \times B$ 推理出原理图。
这里还没有使用到 与非门 和 或非门
其实有多种方式制作 异或门:
仅使用 或非门 制作 异或门:
仅使用 与非门 制造 异或门:
与非门,或门,与门 制作 异或门:
逻辑表达式:$Y = A \bigoplus B$
同或门 XNOR
这是 同或门 的真值表:
输入端1 | 输入端2 | 输出端 |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
简单!这是反相过的 异或门,你也可以叫它 异或非门
逻辑表达式:$Y = \overline{A \bigoplus B}$
特别的逻辑门
缓冲门 BUF
这是一个比较特别的逻辑门,也叫做 同相器
缓冲门 真值表:
输入端1 | 输出端 |
---|---|
0 | 0 |
1 | 1 |
连接两个非门似乎毫无意义,事实上,它可以做一个中继器。玩过 Minecraft 的红石电路对于这一点一定不陌生,中继器能将一个微弱的信号增强为较强的信号。实际应用中,也常常将它作为信号延迟元件,所以叫做缓冲门。
逻辑表达式:$Y = A$
蕴涵门
蕴涵门 和 蕴涵非门 似乎很少在实际应用中出现,具体作用我还不太理解,感兴趣可以参考一下 这篇文章
蕴涵门 的真值表:
输入端1 | 输入端2 | 输出端 |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 0 |
1 | 1 | 1 |
逻辑表达式:$Y = \overline{A} + B$
蕴涵非门
反相后的蕴涵门。
蕴涵非门 的真值表:
输入端1 | 输入端2 | 输出端 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 1 |
1 | 1 | 0 |
逻辑表达式:$Y = \overline{ \overline{A} + B }$
KiCad 组件合照
我还没有开始使用像 Multisim 这样的软件,所以每一步演示图都是手工画的,文字部分使用 PhotoShop 补充。
继电器原理图是用变压器和单刀双掷开关改的。
关于情怀
话说这个项目从某种程度上讲,其实早在初二的时候就已经完成了。有一段时间因为玩 我的世界(Minecraft)会犯3D眩晕症,按贴吧大佬的指示入坑了名为 生存战争(Survivalcraft)的沙盒游戏。
相比较我的世界,生存战争中的世界更加贴近于现实,最重要的是还拥有先进的电路系统,而那时的移动端原版我的世界还未加入红石电路,而生存战争不仅有基础的逻辑门甚至还有更加复杂的 RS锁存器,数模转换模块等等。事实上,因为制作耗时耗力占空间,我不太喜欢红石电路,而 Survivalcraft 对常用器件进行了模块化,所以玩起电路更方便。接触这个游戏后我不禁感叹 "电路原来还能这样玩!",这也是我的数字电路的启蒙游戏。
恰巧那段时间又热衷于研究操作系统和底层硬件,便萌生了在游戏里制作简单的 CPU 的这样一个想法,甚至还一度希望在现实中实现这样一个设计。经过一段时间,在了解了一些基础知识之后,我意识到要想制作 CPU 有点困难,便决定先从最简单的一部分开始尝试 ———— CPU 主要组件之一 运算单元(ALU)中的 全加器(Full Adder)。
通过搜索引擎渐渐了解并学习了 Logisim 这款简单的电路仿真软件,在知道甚至有同龄人使用它设计出了简易的 CPU 后,发觉自己真的是才疏学浅,不禁对自己狭窄的知识面感到不安惭愧。
待续。
本文由 CloverGit 发表
本站文章未注明出处均为本站原创
采用 知识共享署名-相同方式共享 4.0 (CC BY 4.0) 国际许可协议进行许可
转载时务必遵守许可协议进行署名
最后编辑于: 2020 年 10 月 10 日 01 时 12 分