如何搭建一台计算机
1. 二进制数
- 1比特是可能存在的最小的信息量。
- 举个例子,通用产品代码(UPC)就是最常见的二进制数的表现形式
2. 逻辑与开关 - 布尔的天才之处就在于他把代数从数的概念中抽离出来而是其更加抽象。在布尔代数中,操作数不在是字,而是类。在布尔代数中,“+”指的是两个集合的并集;“x”表示两个集合的交集。传统代数中的交换律、分配率和结合律都在布尔代数中成立。1代表“全集”,0代表“空集”
3.搭建加法器
回顾我们之前学习的过程,发现加法是一切计算的基础。有了加法就有了乘法,有了乘法就有了乘方。。。。之后就有了一个完整的数学体系。
所以如何搭建加法器呢?
众所周知,计算机用的是二进制,那么,加法出现进位(1+1)时,计算机如何表示的二进制的2呢?计算机又是如何处理进位的呢?这里,牛逼的上古大神们用了两个办法来简化并解决问题:
- 使用进位位和加法位分开的方法。
- 先考虑一位的加减问题。考虑完一位加法,输出加法位和进位位,再同样的输入下一个类似的装置中循环往复。
所以,我们下面先实现一个两个一位二进制数相加得到进位位和加法位输出的情况
我们可以对比发现,进位位实际上和与门是一样的,只有当两个都是1的时候才输出1,否则输出0
但是加法位的实现并没有那么简单。我们对比一下几种结果: 加法:
或门:
与非门
将或门和与非门连接到相同的输入上,就能够做到漂亮的加法输出:
这个电路也有自己的名字,叫做异或门,简写为XOR。或门是两端输入只要有一个为1就输出1,而异或门加一个“异”字
就是体现了,要让两个门输入相异,否则输出1.
异或门也有自己的图标:
再加上之前做好的进位输出,就是这样:
更抽象之后的图形表述是:
这玩意儿叫做半加器(Half Adder)。之所以叫做半加器。。。很明显,这个计算器只能算1+1,1+0,0+0,0+1这些一位数加法,但是这明显是远远不够的,所以我们还要搞一个全加器出来。
下面我们对半加器进行扩展,得到一个全加器
当我们用竖式除法将两个二进制数相加的时候,
我们只能将半加器用于最右边的两个数相加,1+1=0;而后面数相加的时候一,由于进制位的而存在,实际需要将三个二进制数相加,而后每一列的加法都是这样的。随后的每一列二进制数相加都需要将进位位算进来
所以,问题来了,我们要做一个有三个输入的玩意儿,其中一个输入是进位输入
从最左边第一个半加器的输入A和输入B开始,其输出是一个加和及相应的进位。这个和必须与前一列的进位输入相加,然后再吧他们输入到第二个半加器中。第二个把家其输出和是最后的结果。两个半加器的进位输出又被输入到一个或门中。
问题:这里还需要一个半加器吗?
答:不需要,实际上,两个半加器的进位输出是不可能同时为1的。或门在这里已经足够了,因为或门除了输入都为1的时候以外,其他情况下结果和异或门结果都相同。
同样的,我么把全加器更加抽象地表示为:z
最后,让我们有机的结合需要的全加器,我们就可以做出一个简陋的加法器了
工作原理是这样的:
实现记忆功能
我们实现了基本的运算逻辑,要实现计算机,我们当然还需要各种记忆功能的实现。比如,计算机实现简单的计数,如果光靠单纯的计算,不进行储存,那就只能原地踏步。所以我们接下来实现一个简单的记忆功能
第一层:继电器层
我们还是用继电器来构建最底层的实现
- 触发:
我们还记得初中学过的振荡器吧,这个玩意儿就是一个可以自主触发不用人工干预的装置,甚至这个还可以做成一个时钟(clock)
电路可以简化为如下:
其中这个东东叫做反向器,当反向器的输入是0的时候,输出是1,输入是1时,输出就是0 - 反馈
反馈两个字总让人联想到高中生物里面的反馈信息。。。事实上,还真有点类似,连图都差不多的。黄色部分就是反馈的最典型特征。左边的或非门的输出是右边或非门的输入,而右边或非门的输出示左边或非门的输入。
在初始状态下,电路中只有左边的或非门输出电流,这是因为其连个输入均为0,如下图
上面开关闭合后,左边或非门将立刻输出0,右边或非门输出也会随之变为1,如下图
奇妙的是,这时一旦你关闭上边的开关,灯泡依然闪闪发光。这是由于左边的或非门的输入里仍有一个为1,其输出依然是0,而左边或非门的输出不变,所以灯泡依然亮着
【 - 我们不难发现,第三附图和第一幅图描述的场景是一模一样的。但是灯泡的状态却不同
- 之前的电路输出仅且依赖于其输入,但这里变了,电路输出依赖于之前的一个已经发生过了的状态,说明之前的状态被储存了
- 无论上面的开关是否闭合,灯泡总是亮着,说明这个被储存的状态有一定的稳定性】
如果要更加直观的理解他是怎么个储存法的,我们可以直观的说,前述触发器可以记住最近一次是哪个开关线闭合的。如果你发现他的灯泡是亮着的,那他最后一次联通的是上面的开关,而如果灯泡不亮,则可以推测出最后一次联通的是下面的开关。
第二层:逻辑电路层
让我们用更加集合化,更加抽象简洁的逻辑门来阐释这个问题
我们先前所述的是最简单的一种R-S(Reset-Set,复位/置位)触发器。
我们通常把两个非或门绘制成另一种形式,如下图:
我们通常用Q来表示用于点亮灯泡的输出的状态。另一个输出Q(上面打一行)是对Q的去翻,Q是0,Q(上面打一行)就是1.输入端S用来置位(把Q设为1),R用来复位(把Q设为0)。结论如下:
总之,S输入始终等于Q输出,R输入始终等于R输出。其中要注意的是,输入端两个都为1的话是禁止的。
R-S触发器可以简化为带有输入和输出标志的小框图,就像下面的这样。
R-S触发器最突出的特点在于,他可以记住那个输入端的最终状态为1.比如,当在R=1,S=0的时候是最终状态,那么之后无论如何开关R,最后结果都不会改变
第三层:更强大功能的触发器
有时候我们需要一种记忆能力更加强大的电路,例如能记住在某个特定时间点上的一个信号是0还是1。
这说明,我们的电路有两个输入,一个是数据端,而另一个是“保持位”。
通常情况下保持位被设置为 0,在这种情况下数据端对电路不产生影响。当保持位置于1是,数据端的自豪就会在电路系统中被记录。随后保持位又置为0,这是电路已经记住了数据端的最后一次输入,而之后数据端的输入无论如何变化都不会对电路产生影响。
说白了,要实现这个,就是添加一个保持端的控制,保持短为1,输出不影响,保持端为0时,输出就被这个0控制。
自然而然的会想到与门。
只要保持位是0,则置位端对于输出结果不会有任何影响
但现在这个还是没有达到我们的要求。我们需要的是两个输入,而不是三个。注意在R-S的触发器中,两个输入端同时为1是非法的,同时为0是无意义的,所以实际上真正有意义的输入只能是S与R互相相反的时候。所以,我们可以用一个取反器来实现这个问题。
其中的保持位我们可以看做是一个时钟,
第四层:如何用锁存器来改进我们的加法器。
其中,标记为2-1选择器的方块是让你用一个开关来选择加法器的B端输入是取自第2拍开关还是取自锁存器的Q段输出,当开关闭合是,就选择了用8位锁存器的输出作为B端输入。
这是一个很神奇的设计,大家可以自试试看,如果选择端输入是1,那么或门的输出和B端的输入就是一致的。如果选择段输入的是0,那么或门的输出则和A段输入一致。
-
Q反的用处?
答:输出端Q的非,电路使用触发器的时候有时不只用到Q,还会用到Q’这样就省去了在输出端后接一个非门,而且触发器内部是靠三极管搭建的,实现Q的高低电平输出必然会令三极管的一端相反,索性接出来 -
存储器
我们之前提到过,我们一起讨论过有一个反相器、两个与门和两个活飞们构成的D型点评触发器,如图: