【读书笔记】《编码:隐匿在计算机软硬件背后的语言》02 门
【读书笔记】《编码:隐匿在计算机软硬件背后的语言》02 门
- 前言
- 02 门
- 总结
前言
上一篇作者主要讲述了布尔代数在电路中的表达,即:“或”(or)=并(+)=并联、“与”(and)=交(×)=串联,这一篇看看逻辑门中有哪些有趣的知识吧!
什么是逻辑门?继电器串联或并联在电路中执行简单的逻辑任务。这种继电器的组合叫做逻辑门(logic gates)。
02 门
看书评有人说,原作标题是:Gates(Not Bill),这个冷笑话让我忍俊不禁。
上一章我们去宠物店买猫(M代表公猫,F代表母猫,T代表褐色的猫,B代表黑猫,W代表白猫,O代表不在T、B或W集合中的其他颜色的猫,N表示已被绝育的猫,U表示未被绝育的猫。),要求:“一只公猫,已绝育的,白色或褐色都可以,或者一只母猫,也要是已绝育的,除了白色任何颜色都可以;或者,只要是黑猫“就可以用以下公式表示:
( M × N × ( W + T ) ) + ( F × N × ( 1 − W ) ) + B (M×N×(W+T))+(F×N×(1−W))+B (M×N×(W+T))+(F×N×(1−W))+B
同样也可以用一个由开关和灯泡组成的电路来表示,这样的电路有时被称为网络(network),如下图所示。
我们可以通过简化一个描述网络的布尔表达式,来简化相应的网络。
我们试着简化下刚刚的公式:
( M × N × ( W + T ) ) + ( F × N × ( 1 − W ) ) + B (M×N×(W+T))+(F×N×(1−W))+B (M×N×(W+T))+(F×N×(1−W))+B
->利用交换律
( N × M × ( W + T ) ) + ( N × F × ( 1 − W ) ) + B (N×M×(W+T))+(N×F×(1-W))+B (N×M×(W+T))+(N×F×(1−W))+B
-> 提个N出来:
( N × [ ( M × ( W + T ) + F × ( 1 − W ) ] + B (N×[(M×(W+T)+F×(1-W)]+B (N×[(M×(W+T)+F×(1−W)]+B
虽然这个表达式看起来很复杂,但是这个表达式中少了一个变量,也就意味着在网络中少了一个开关。以下就是简化后的电路图。
这个电路和上面的电路实现的功能等价,但事实上,里面的开关数量还是冗余了,其实每个开关都是一个二进制数。我们用四个开关加一个灯泡制作一个控制面板即可实现上面的电路功能。
如上图所示,一个开关代表猫的性别(开关断开表示公猫M,而闭合表示母猫F),另一个开关表示猫是否有生育能力(开关断开表示未绝育U,而闭合则表示已绝育N)。另两个开关表示猫的颜色(两个开关同时断开表示白色W,一个闭合表示黑色B,另一个闭合表示褐色T,同时闭合表示其他颜色O)。
开关打到上面是指开关闭合,反之向下开关断开(ps:我记得初中物理老师好像说过电路开关最好向上闭合,向下断开,因为开关可能会因为老化和松动以及自身的重力作用向下掉,如果开关打到下面闭合,那么电路将自动通电会很不安全)。
如何制作这样一个控制面板呢?接下来就是这一章的重点内容啦!
相信大家对继电器这个东西并不陌生,我们在初中物理就学过由电磁铁组成的电磁继电器。继电器优于开关之处就在于,继电器可以被其他继电器所控制,可以作为一个电流控制而非人工控制的开关。
我们可以将继电器、开关、灯泡和两节电池按照下图连接。
当闭合开关的时候,左端电池产生电流流过缠在铁芯上的圆线圈。于是铁芯产生了磁性,将上面的弹性金属簧片拉下,使回路接通,灯泡发光。
在后续内容需要反复用到这样的继电器,因此可以对这个电路进行简化,用大写字母V(代表电压)来代替上图中的电池正极,用接地来代替负极,如下所示:
这是我在网上找到的继电器的图片,像一个小冰块一样。
既然继电器和开关的功能一样,那么继电器也可用串联和并联的形式组合在一起构成逻辑门单元。
- 串联(与门)
- 并联(或门)
继电器还有个特别的地方就在于也可以用另外一种连接方式,当开关断开时灯泡被点亮。
以这种方式连接的继电器叫做反向器(inverter)。反向器不是逻辑门(一个逻辑门通常有两个或多个输入),尽管如此,它的用处还是很广。反向器可以用如下的专门符号来表示。
同样我们将这种反向器串联和并联也可构成或非门和与非门。
- 或非门
- 与非门
至此我们就可以利用反向器、与门和或门着手去设计一个自动选择理想猫咪的控制面板了。
-
第一个开关代表猫的性别(开关断开表示公猫M,而闭合表示母猫F)
-
第二个开关表示猫是否有生育能力(开关断开表示未绝育U,而闭合则表示已绝育N)
-
另两个开关表示猫的颜色(两个开关同时断开表示白色W,一个闭合表示黑色B,另一个闭合表示褐色T,同时闭合表示其他颜色O)。
-
上面这个电路看着很复杂,但我们一个个沿着线路走,电路的工作原理就会一目了然。
-
这个由4个与门和2个反向器连接成的电路叫做2-4译码器。输入为2个二进制位,各种组合共表示4个不同的值。利用同样的原理我们也能构造出3-8译码器或者4-16译码器。
让我们回到刚刚简化的公式: ( N × [ ( M × ( W + T ) + F × ( 1 − W ) ] + B (N×[(M×(W+T)+F×(1-W)]+B (N×[(M×(W+T)+F×(1−W)]+B,这时在这个表达式中,每个加号(+),必定对应电路中的一个或门。对于每一个乘号(×),则对应一个与门,电路图如下所示。
注意表达式中(1-W)部分的反向器的用法。
总结
四个逻辑门输出与输入的关系可总结为以下几个表格。:
本文中的四个逻辑门和一个反向器都是由最原始的继电器组成的,如下图所示:
通常也把这个叫做缓冲器(buffer),可用如下符号表示:
除了输入端的小圆圈,这个符号与反向器是很相似的。虽然缓冲器“没有什么作用”,它的输入与输出是相同的,但缓冲器有两个重要功能:放大信号和延迟信号。
从此以后继电器将会极少出现了。取而代之地,以后的电路会由缓冲器、反向器、四种基本逻辑门和其他由逻辑门组成的复杂电路(如2-4译码器)组成。当然,所有这些器件也是由继电器构成的,但我们用不着直接使用它了。
最后还有两个值得注意的点:
- 带有两个反向输入的与门和或非门是等价的。
- 只有当输入都为0的时候,其输出才为1。
- 带有两个反向输入的或门和与非门也是等价的。
- 只有当输入全为1时,输出才为0。
这就是大名鼎鼎的摩根定律(我们在概率论部分学到的)在电路中的实现,摩根定律可以简单地表示为如下形式:
A + B ‾ = A ‾ × B ‾ \overline{A + B} = \overline{A}× \overline{B} A+B=A×B
A × B ‾ = A ‾ + B ‾ \overline{A × B} = \overline{A}+ \overline{B} A×B=A+B
摩根定律是简化布尔表达式的一种重要手段,因此也可以用来简化电路。
以上就是这一篇的全部内容啦,有了这一篇的基础知识,下一章作者将会带着我们进行加法器的设计!