分享

计算机的奥秘原来这么简单(三)

 youxd 2017-07-19

上篇文章讲到逻辑运算、逻辑门电路的一些东西。那么这里就要想办法用继电器搭建一个加法器了。

我们知道加法是最基本的算术运算,所以,如果想要建造一台计算机,必须首先知道如何构造一种机器,它可以把两个数加起来。当你解决了这个问题,你会发现加法正是计算机唯一所做的事情,因为通过使用用于加法的机器,我们还可以构造用加法来实现减法、乘法、除法以及其他更复杂运算功能的机器。

那么我们下面要做的这台加法器同现代的计算器和计算机比起来,可能会比较笨重、速度慢且噪声大。但好在构成它的部件完全是前2篇讲过的电子设备,如开关、灯泡、电线、电池以及可构成几种逻辑门的继电器。这个加法器还有很多缺点:只能工作于二进制数,而且缺少很多现代计算机的辅助设备。它不能用键盘来敲入你想加的数,代之的你只能用一系列开关表示待加的数。它也不能用显示器显示结果,你所看到的只是一排灯泡。但我们是侧重于理解原理,况且那些辅助设备也是可以慢慢搭建的。能力有限,如有错误还请读者赐教。

二进制运算

通常现实中我们是用十进制数计数的,我们的数字系统之所以是基于1 0的(十进制数)可以理解为我们有1 0个手指头。我们同样有理由使用八进制数字系统(如果我们只有8根手指)。但是,二进制数字系统有一点儿特别:它可能是最简单的数字系统。二进制数字系统中只有两种二进制数字—0和1。开关恰好也是只有两种状态:开代表0,关代表1。我们已经知道,计算机就是由无数个开关组成,所以二进制对于计算机来说真的是得天独厚的一种存在。所以我们有必要先了解下二进制的运算法则。

0加0等于0,0加1等于1,1加0等于1,1加1等于0,进1。就是这么简单。就像下图这么表示

计算机的奥秘原来这么简单(三)

这样一来,二进制数字相加的结果是两位数,分别称为“和”和“进位”(比如“ 1加1等于0,进位是1”)。现在,可以把这张二进制加法表分成两张表,第1张是表示“和”的表:

计算机的奥秘原来这么简单(三)

第2张是表示“进位”的表:

计算机的奥秘原来这么简单(三)

以这种方式来看待二进制加法就很方便了,因为加法机会分开求和与进位。构造二进制加法机需要设计一个能执行表中所描述操作的电路。因为电路的所有部件,如开关、灯泡、电线都是可以表示成二进制数的,因而该电路由于仅工作于二进制数从而大大降低了电路的复杂性。

举个二进制加法的例子:

计算机的奥秘原来这么简单(三)

从上面的例子我们可以看到,当从右边加到第3列的时候,产生了一个进位。同样的情况也发生在第6、7、8列。我们要加多大的数呢?为了合理一些,先选择不超过8位的二进制数。也就是说,操作数的范围是从0000-0000~1111-1111,即十进制的0~255。两个8位二进制数的和最大可以是510,即1-1111-1110。

加法器初步构想

我们按照二进制加法运算的式子先初步构造一个加法器的样子

计算机的奥秘原来这么简单(三)

说明:板上有两行开关,每行8个。这些开关是输入设备,我们将用它输入两个8位数。开关往下表示0,往上表示1。输出设备在板的底部,是一行灯泡,共9个。这些灯泡用来表示加法的结果,不亮的灯泡表示0,亮的表示1。我们用了9个灯泡是因为两个8位数相加的结果可能是9位数。

加法器的余下部分包含了以不同方式连接而成的逻辑门。开关触发逻辑门中的继电器,继电器接着点亮相应的灯泡。例如,如果我们想把0110 0101和10110110加起来(即前例中显示的两个数字),需把相应的开关设置成下面的样子:

计算机的奥秘原来这么简单(三)

灯泡的亮暗表明答案是100011011。这就是我们设想的的情况,接下来我们就要把这个加法器构造出来。

半加器

前文提到我们会用继电器搭建加法器,那么本篇中的的8位加法器就至少需要144个继电器,其中每一对数进行加法操作需要18个继电器(8 x 18=144)。如果画出完整的电路图,我们将无法把一堆的继电器看得明明白白,所以此时我们将用逻辑门分步解决这个问题。

当我们看到两个1位二进制数相加的进位表时,可能立刻会想到逻辑门与门和二进制加法之间输出是一样的:

计算机的奥秘原来这么简单(三)

加法进位

计算机的奥秘原来这么简单(三)

与门

所以与门可以用来计算两个1位进制数位相加得到的进位。下一步就要看看有没有继电器能完成下面的工作了,也就是二进制加法运算中的另一半问题:

计算机的奥秘原来这么简单(三)

首先我们先想到或门的输出和我们所期望的很近似,只是右下角的结果不同:

计算机的奥秘原来这么简单(三)

而对于与非门(与门和非门的叠加)而言,除了左上角的输出不同以外,其他结果与期望的一样:

计算机的奥秘原来这么简单(三)

所以总结一下或门和与非门的输出,并将其结果和加法机所要求的结果进行比较就一目了然了:

计算机的奥秘原来这么简单(三)

结论:当或门和与非门的输出都为1时,就可以得到期望的结果1,这暗示着把两个输出作为与门的输入就可以满足上面提的要求了。

计算机的奥秘原来这么简单(三)

整个电路有两个输入,一个输出。两个输入既连到了或门,也连到了与非门。或门和与非门的输出作为与门的输入,从而得到预期的结果,这个电路也有它自己的名字,称为“异或门XOR”。它也有规定的符号来表示,不用一次次把上图全画出来了:



计算机的奥秘原来这么简单(三)

它的逻辑运算是这样的:

计算机的奥秘原来这么简单(三)

总结:两个二进制数相加产生的“和”以及“进位”结果,就可以用两个逻辑门电路得以匹配:

计算机的奥秘原来这么简单(三)

计算机的奥秘原来这么简单(三)

所以这里可以把异或门和与门结合起来来完成两个二进制数A和B的加法:

计算机的奥秘原来这么简单(三)

然后我们把上图搭建成的电路用盒子封装好,因为我们已经没必要看到里面具体线路了,然后用下图表示。

计算机的奥秘原来这么简单(三)

我们给它起个名字叫:“半加器(Half Adder)”,它可以把两个二进制位A和B相加,从而得到一个和输出(简称S)和一个进位输出(简称CO)。因为大部分二进制数是多于1位的,半加器不能够把前一步的进位加到本次运算中。所以姑且叫做半加器。

全加器

前面讲到了半加器,但是实际上我们遇到的问题可能是这样的:

计算机的奥秘原来这么简单(三)

如果用半加器来计算就只能算最右边一列数:即1加1等于0,进位为1。对于右边第2列数,由于进位的存在,需要加3个数。接下来的几列都有这个问题,每一列二进制位的加法都包括了来自前一列的进位。要把3个二进制数相加,需要按如下方式把两个半加器和一个或门连接起来才可以:(这里要结合下面的原理好好理解

计算机的奥秘原来这么简单(三)

它的工作原理:先从最左边第一个半加器的A输入和B输入开始,其输出是一个和及相应的进位。这个和必须和前一列的进位输入(简称CI) 加起来,然后把它们输入到第二个半加器。第二个半加器的和输出是最后的和。两个半加器的进位输出又输入到一个或门,或门产生了本次加法的进位输出。

你可能会想这里还需要一个半加器,当然可以的。但当我们把所有的可能情况考虑完,就会发现两个进位不可能同时为1。当两个输入不能同时为1时,或门已足够用于表示两个进位的加法。

同样的道理,我们把上图搭建成的电路用盒子封装好简化表示为下面的方块图,称其为“全加器(Full Adder)”:

计算机的奥秘原来这么简单(三)

可以结合输入输出表理解

计算机的奥秘原来这么简单(三)

前面引入的有点多了,这里篇幅有限,就先讲到全加器,下一篇讲下利用全加器构造8位加法器(当然16位,32位也是一样的道理),然后引入减法器的设计构想和基本原理。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多