关于《编码》一书的总结【二】

10、逻辑与开关


引出布尔代数:

在布尔代数中,操作数不是数字而是类,一个类就是一个事物的的群体(集合)。

+:表示求两个集合并集

×:表示求两个集合的交集

1:全集

0:空集

例如:我们也可以用别的字母代表猫的颜色,例如:M代表公猫,F代表母猫,T可以代表褐色的猫,B可以代表黑猫,W代表白猫,O代表不在T、B或W集合中的其他颜色的猫。

有:

  • F×M=0

  • F×F=F

    等等。

表示想要一只猫:

要一只公猫,已绝育的,白色或褐色都可以,或者一只母猫,也要是已绝育的,除了白色任何颜色都可以;或者,只要是黑猫就可以。

可以表示成:(M×N×(W+T))+(F×N×(1-W))+B

符合条件则该项为1否则为0,带入计算布尔代数,得到该式子的结果,为1则该猫符合条件,为0则不符合条件。

通过串联电路,我们可以抽象与运算,并联电路我们可以抽象或运算,由此我们布尔代数与电路联系起来

11、门

通过串联或并联的开关组成继电器完成简单的逻辑任务,继电器的组合叫做逻辑门

继电器优于开关之处就在于,继电器可以被其他继电器所控制,而不必由人工控制。这就意味着,这些简单的逻辑门组合起来可以实现更复杂的功能

继电器对于电报系统的工作而言是至关重要的。在长距离情况下,连接电报站的电线具有很高的电阻。这就需要釆取一些措施来接收微弱信号并把它增强后再发射出去。继电器就是通过电磁铁控制开关来实现这一目的的。实际上,继电器是通过放大微弱信号来生成强信号的。就我们的目的而言,我们对于继电器放大微弱信号的功能并不感兴趣。我们真正感兴趣的是继电器可以作为一个电流控制而非人工控制的开关。

继电器串联:与门

为了避免复杂图示,电气工程师门这样表示:

输入输出关系:

同样的更多的串联:

表示为:

继电器并联:或门

表示为:

输入输出关系:

多个并联:同理。不在举例

继电器制作非门(反向器)

其重点在于输出端(在此为灯泡)的接口位于上端而不是下端

![](https://lyxf2000-1259802619.cos.ap-beijing.myqcloud.com/20190913110118.png)

表示:

通过与门或门非门我们可以制造一个喵咪选择器啦

对比之前的纯开关电路:

充分体现了减少人工操作的特点,方便选择。

或非门

其重点在于,第二个电源输入接口为第一个的输出接口,两者输出接口均位于上端

![](https://lyxf2000-1259802619.cos.ap-beijing.myqcloud.com/20190913111020.png)

表示:

输出输入关系:

与非门

其重点在于,两继电器电源输入均独立,输出接口位于上端

![](https://lyxf2000-1259802619.cos.ap-beijing.myqcloud.com/20190913111504.png)

表示:

输入输出:

缓冲器

表示:

输入输出:不改变。

用途为1.增强信号2.延迟信号:因为继电器需要一点时间(几分之一秒)才会被出发

#### 最后

本书从这里开始,继电器将会极少出现了。取而代之地,以后的电路会由缓冲器、
反向器、四种基本逻辑门和其他由逻辑门组成的复杂电路(如2-4译码器)组成。当然,
所有这些器件也是由继电器构成的,但我们用不着直接使用它了。

12、二进制加法器


进行二进制加法,和我们十进制相似,我们对每个位置进行相加,同时产生进位。

而在电路中我门需要对加法位进位进行分别处理。

通过已构建的门构造异或门

表示:

输入输出:

分析可知,构造一个异或门需要2+2+2=6个继电器

半加器

计算出 加和位 和进位

表示:

分析可知,一个半加器,需要8个继电器

全加器

我们需要对每一位计算中考虑进位的加入,所以我们要构建全加器。

全加器用来对三个数据进行两次加和运算。

对某一位置来说,有三个数据需要计算,加数、被加数、进位数,先进行加数求和,再将加数和与进位数相加。通过该电路可以使得输出一个加和输出一个进位输出

分析输入的所有情况:

了解所有可能后 我们知道两次加和不可能产生两个进位1所以下面使用一个或门作为总进位足够,不需要再加入一个半加器计算两次进位加和

表示:

分析可知我们需要8+8+2=18个继电器

构造八位二进制加法器

面板:

最右端:

最左端:

我们需要考虑第第八位也产生进位,家和最终位9位,所以需要在最左端的进位处加一个灯泡来表示是否有第九位

其他:

最终连接:

我们进行对该元件封装:

我们最终可以推断一个8位加法器用到了8*18=144个继电器

构建16位二进制加法器

在已经构建了8位二进制加法器的基础上,我们很容易就可以构建更多位的加法器:

最后

  • 该方法的加法器是行波进位每一个运算都需要等待前一个运算完成。更快的加法器运用了一个前置进位的电路来提高运算的速度。
  • 现代计算机可不用继电器,用晶体管。它们速度更快、体积更小、噪声弱、耗能低、更便宜,但是晶体管的工作原理和继电器基本相同

13、如何实现减法


减法没有进位,但是有着更为头痛的借位,想要实现减法,我们需要另辟蹊径。

补数

为了避免借位,我们需要了解一个概念:补数。

操作数是三位数,则使用999。如果操作数是4位,则用9999。从一串9中减去一个数叫做对9求补数。176对9的补数是823。反之亦然:823对9的补数是176。这样的好处就是无论减数是多少,计算对9的补数都不需要借位

结果非负数时的方法

减数求补。

例如:

​ 253-176=253-176+1000-1000

​ =253-176+999+1-1000

​ =253+(999-176)+1-1000

这样做就避免了借位,同样的方法,我们可以用于二进制,而且会更加简便。

例如将253-176变为二进制:

当计算十进制数减法的时候,减数是从一串9中减去的,结果称为9的补数。在二
进制数减法中,减数是从一串1中减去的,结果称为1的补数。但是请注意,我们在求
对1的补数时并不需要用到减法。在求对1的补数时,只需将原来的二进制数中的1变
为0,将0变为1即可。因此对1求补数有时也会称为相反数(negation )或反码(inverse )。
这里你可能会想起第11章中的反向器,它的作用就是将0变为1,将1变为0。

实践电路

第九个灯泡表示上溢或者下溢,加法中得到超过255或者减法中得到负数它就会发光。

若我们只需要进行减法运算则在加法器中添加求反电路即可,但此处我们要做一个可加可减的机器。所以我们可以这样设计:

根据异或门特点,当取反信号为0时,输入输出相同,取反信号为1时输入输入相反

我们将其封装成求补器,接入加法器,同时加入一个异或门,来判别加减法:

做加法时:SUB全为0,

​ 1.取反SUB为0,求补器不工作,输入和输入相同,

​ 2.进位CI的SUB为0,表示最低位进位为0

​ 3.接入异或门的SUB为0,表示只有CO段为1时刻灯泡才亮,此时为加法上溢为9位。

做减法时:SUB全为1

​ 1.取反SUB为1求补器工作,进行求补

​ 2.进位CI的SUB为1,表示求补后+1的工作

​ 3.接入异或门的SUB为1,当减数小于被减数时,加和工作全部完成时,最终为9位数,需要减去 100000000,所以此时CO为1,灯不亮而对于我们而言,第九位为1-1=0,后八位每个位 置都减0,为不变,所以减数小于被减数的减法,到此时就可以显示结果了,就是加和工作完毕 后的后八位。

​ 4.接入异或门的SUB为1,当减数大于被减数时,加和工作全部完成时,为8位数,往后操作为 减去10000000,此时CI=0,灯亮,表示下溢,为减数大于被减数的减法

​ 5.即减数求补—->+1—–>+被减数

值得说明的是,虽然有指示减数小于被减数的说明,但是该机器暂时还没有处理的这样减法的功能

关于结果为负数(减数大于被减数)

也就是对减数-->求补-->加上被减数->再次求补--->添加负号

**但是这里我们提供另一种思路来对负数进行处理。**
  • 首先我们预先划分出我们需要的正负数字个数
  • 对该个数后半段进行用“正数代表负数”

实施:

十进制:

这种负数的标记方法称为10的补数(ten’s complement )。为了将三位负数转化为10的补数,
我们用999减去它再加1。也就是说,对10求补数就是对9的补数再加1。例如想要得
到-255对10的补数,用999减去255得到744,然后再加1,得到745。

这样我们将不会用到减法,所有的步骤都用加法来进行。

假设你有-个余额为143美元的支票账户。你开了一张78美元的支票,也就意味着
要将一个值为负的78美元加到143美元上。-78对10的补数为999-078+1,即922。因
此新余额为M 3美元+922美元,相当于65美元(忽略溢出)。如果我们又开了–张150
美元的支票,需要在余额h加上-150, -150对10求补数为850。因此先前的余额加上850
等于915,就是新的账户余额。而这个佘额实际上是-85美元。

二进制应用:这样的方法在二进制中被称为2的补数。于是负数的表示方法为计算其绝对值的1的补数再加上1

我们可以观察到,最左面一位为1全为负数,为0全为正数,所以最高有效位(最左位)作为符号位(sign bit),符号位中1表示负数,0表示正数

#### 应用符号数后的加减法

应用了符号数后,我们就可以自由的用加法法则将正负数相加了。

例如-127+124:

值得注意的是,这里涉及了上溢/下溢的问题:

例如125+125=-6

-125+(-125)=+6

所以一般地说,如果两个操作数的符号相同,而结果的负号与操作数的负号不相同,这样的加法就是无效的

14、反馈与触发器


振荡器

开关闭合后金属簧片将会上下不断摆动。如果簧片上安装和锤子,端口安装个锣你就可以制造出一个简易的电铃。

你可能会联想到继电器,所以该图可以简化为:

由于继电器的工作具有一些延迟,所以该电路是可以工作的,输出在0和1之间不断改变。

我们把这种电路称为振荡器

周期、频率

我们用图像来描述振荡器的输出可以得到:

我们可以发现输出在0和1之间规律的变化,所以振荡器也被称为时钟(Clock),通过振荡器计时也是一种计时方式。但是值得注意的是每个振荡器的振动快慢都不同,这与他们的内部构造和物理属性有关

我们将一个初始状态到下一个初始状态的间隔定义为一个循环,或者称为一个周期

假设我们的振荡器周期为0.05S,则有:

1/0.05=20(次)

该振荡器每秒钟变化20次,我们称其为频率计为20Hz

所以T=1/f

#### 反馈和触发器

左边或非门的输出是右边或非门的输入,而右边或非门的输出是左边或非门的输入。这种连接方式我们称之为反馈(feedback)。 和我们在振荡器中见到的很相似

该电路的开关闭合结果:

  • 接通上面的开关,灯泡被点亮,断开此开关灯泡仍然亮着。
  • 接通下面的开关,灯泡被熄灭,断开此开关灯泡仍然不亮。

结合或非门有1则0,全0则1的特性也容易分析原因

电路的奇怪之处是:同样是在两个开关都断开的状态下,灯泡有时亮着,有时却不亮。当两个开关都断开时,电路有两个稳定态,这类电路统称为触发器(Flip-Flop),

触发器最重要的特性就是:它可以“记住”某些信息

触发器种类繁多,这里我们介绍几种最简单的触发器:

1.RS(Reset(复位)-Set(置位))触发器

置位:Q=1

复位:Q=0

简化为:

RS触发器最大的特点是可以记住哪个输入端最终状态为1

**2.D型触发器**

有时候我们需要一种记忆能力更加强大的电路,例如能记住在某个特定时间点上的一个信号是0还是1在构造具备这种功能的电路之前,让我们先来思考一下它的具体行为。这个电路存在两个输入。其中一个我们称之为数据端(Data)0与所有数字信号一样,数据端取值为0或1;另一个输入被称为保持位(HoldThatBit),保持位的作用就是使当前的状态被“记住”,通常情况下保持位被设置为0,在这种情况下数据端对电路不产生影响。当保持位置1时,数据端的值就会在电路系统中被“记住”。随后保持位又置为0,这时电路已经“记住”了数据端的最后一次输入,而之后数据端的输入无论如何变化都不会对电路产生影响

实现:

当保持位为0时,复位置位信号对输出无影响,当保持位位1时,功能与RS触发器一致

减少输入端后:

保持位为0时,输出端不变,保持位为1时Q端与输入端数据变化相同另一端则相反

锁存器

1.D型锁存器:

我们将D型触发器的保持位接入时钟信号:

这个电路可被称为1位存储器,它可以锁存一位数据并保持,以便将来使用,在第16章我们将会介绍如何将一位存储器连接起来构成多位存储器

#### 锁存器和加法器(暂不考虑减法器)的联合

开关:均为8个,控制每位数字的0和1

关于2-1选择器的解释:它使用了8个下面的电路:

缺点:如果加和超过8位,则第九位不会纳入下一步计算,一个可能的解决方案是将加法器锁存器、选择器均设置为16位宽、或者至少必你可能遇到的最大的数多一位

其他改进:去除B端2-1选择器和其A端八个数据输入开关

但是首先我们要为D触发器增加清零功能:

这样当清零信号为1时Q段会强制为0另一端为1,而使用数据置0再通过时钟输入的方法不够简便精准

改进后的加法器:

你可能会发现这个加法器比前面的那个好用,特别是当你需要加上一长串数字时。
先按下清零开关,这个操作会使锁存器的输出为0,并且熄灭了所有的灯泡,同时使8
位加法器的第2行输入全为0。然后,通过开关输入第一个加数,并且闭合“相加”开关,
这个加数的值就反映在灯泡上。再输入第二个加数并再次闭合“相加”开关。由开关输
入的8位操作数加到前面的结果上,所得的和体现到灯泡上。反复如此操作,可以连续
进行很多次加运算。

边沿触发器

D型边沿触发器

边沿触发器只会在时钟信号上升或下降的瞬间进行工作

原理图:![](https://lyxf2000-1259802619.cos.ap-beijing.myqcloud.com/20190913183036.png)

分析可知:由于第一个时钟信号取反,所以时钟信号位0时第一个触发器工作,记录变化,第二个不变,时钟信号位1时,第一个触发器不再变化第二个触发器存储第一个触发器状态,本质其实是在时钟信号为1时刻虽然第二个触发器可以随时记录,但是其数据来源在此时段不在变化,所以表现为只在边沿触发,至于正跳变,负跳变,改变非门所在前后触发器位置即可

分频器和计数器

我们运用边沿触发器构造该电路(虽然可能由于继电器的延迟快慢问题运行不合乎预想,但是我们假设其能够运行且合乎预期):

得到该表:

时序图:

我们发现Q的输出频率是振荡器的一半,我们称这种电路为分频器

**分频器的输出可以作为另一个分频器的时钟输入,我们可以构造下图:**

时序图

我们把它标记上0和1:

我们发现每一数列,都是四位二进制数,并且是0~15进行逐个递增,且不断循环

**我们将8个D型边沿触发器按照上图连接在一起就构成了一个8位计数器:**

个计数器称为“8位行波计数器”,因为每一个触发器的输出都是下一个触发器的
时钟输入。变化是在触发器中一级一级地顺序传递的,最后一级触发器的变化必定会有
一些延迟,更先进的计数器是“并行(同步)计数器”,这种计数器的所有输出是在同一
时刻改变的。

最终我们可以得到:

最后

我们为边沿D触发器再增加一些功能:

清零信号为1时使Q为0,预置信号为1时使Q为1,另一端相反变化

-----------------------本文结束 感谢阅读-----------------------
坚持原创技术分享,您的支持将鼓励我继续创作!恰饭^.^~