打印
[牛人杂谈]

自己动手制作一台四位计算机

[复制链接]
1331|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
598330983|  楼主 | 2016-5-6 10:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

你是否想过,计算机为什么会加减乘除?或者更直接一点,计算机的原理到底是什么?

  Waitingforfriday有一篇详细的教程,讲解了如何自己动手,制作一台四位计算机。从中可以看到,二进制、数理逻辑、电子学怎样融合在一起,构成了现代计算机的基础。

  一、什么是二进制?

  首先,从最简单的讲起。

  计算机内部采用二进制,每一个数位只有两种可能”0″和”1″,运算规则是”逢二进一”。举例来说,有两个位A和B,它们相加的结果只可能有四种。

  

  这张表就叫做”真值表”(truth table),其中的sum表示”和位”,carry表示”进位”。如果A和B都是0,和就是0,因此”和位”和”进位”都是0;如果A和B有一个为1,另一个为0,和就是1,不需要进位;如果A和B都是1,和就是10,因此”和位”为0,”进位”为1。

  二、逻辑门(Logic Gate)

  布尔运算(Boolean operation)的规则,可以套用在二进制加法上。布尔运算有三个基本运算符:AND,OR,NOT,又称”与门”、”或门”、”非门”,合称”逻辑门”。它们的运算规则是:

  AND:如果( A=1 AND B=1 ),则输出结果为1。

  OR:如果( A=1 OR B=1 ),则输出结果为1。

  NOT:如果( A=1 ),则输出结果为0。

  两个输入(A和B)都为1,AND(与门)就输出1;只要有任意一个输入(A或B)为1,OR(或门)就输出1;NOT(非门)的作用,则是输出一个输入值的相反值。它们的图形表示如下:

  

  三、真值表的逻辑门表示

  现在把”真值表”的运算规则,改写为逻辑门的形式。

  先看sum(和位),我们需要的是这样一种逻辑:当两个输入不相同时,输出为1,因此运算符应该是OR;当两个输入相同时,输出为0,这可以用两组AND和NOT的组合实现。最后的逻辑组合图如下:

  

  再看carry(进位)。它比较简单,两个输入A和B都为1就输出1,否则就输出0,因此用一个AND运算符就行了。

  

  现在把sum和carry组合起来,就能得到整张真值表了。这被称为”半加器”(half-adder),因为它只考虑了单独两个位的相加,没有考虑可能还存在低位进上来的位。

  

  四、扩展的真值表和全加器

  如果把低位进上来的位,当做第三个输入(input),也就是说,除了两个输入值A和B以外,还存在一个输入(input)的carry,那么问题就变成了如何在三个输入的情况下,得到输出(output)的sum(和位)和carry(进位)。

  这时,真值表被扩展成下面的形式:

  

  如果你理解了半加器的设计思路,就不难把它扩展到新的真值表,这就是”全加器”(full-adder)了。

  


沙发
598330983|  楼主 | 2016-5-6 10:55 | 只看该作者

五、全加器的串联

  多个全加器串联起来,就能进行二进制的多位运算了。

  先把全加器简写成方块形式,注明三个输入(A、B、Cin)和两个输出(S和Cout)。

  

  然后,将四个全加器串联起来,就得到了四位加法器的逻辑图。

  

  六、逻辑门的晶体管实现

  下一步,就是用晶体管做出逻辑门的电路。

  先看NOT。晶体管的基极(Base)作为输入,集电极(collector)作为输出,发射极(emitter)接地。当输入为1(高电平),电流流向发射极,因此输出为0;当输入为0(低电平),电流从集电极流出,因此输出为1。

  

  接着是AND。这需要两个晶体管,只有当两个基极的输入都为1(高电平),电流才会流向输出端,得到1。

  

  最后是OR。这也需要两个晶体管,只要两个基极中有一个为1(高电平),电流就会流向输出端,得到1。

  

  七、全加器的电路

  将三种逻辑门的晶体管实现,代入全加器的设计图,就可以画出电路图了。

  

  (点击看大图)

  按照电路图,用晶体管和电路板组装出全加器的集成电路。

  

  左边的三根黄线,分别代表三个输入A、B、Cin;右边的两根绿线,分别代表输出S和Cout。

  八、制作计算机

  将四块全加器的电路串联起来,就是一台货真价实的四位晶体管计算机了,可以计算0000~1111之间的加法。

  

  电路板的下方有两组各四个开关,标注着”A”和”B”,代表两个输入数。从上图可以看到,A组开关是”上下上上”,代表1011(11);B组开关是”上下下下”,代表1000(8)。它们的相加结果用五个LED灯表示,上图中是”亮暗暗亮亮”,代表10011(19),正是1011与1000的和。

  九、结论

  虽然这个四位计算机非常简陋,但是从中不难体会到现代计算机的原理。

  完成上面的四位加法,需要用到88个晶体管。虽然当代处理器包含的晶体管数以亿计,但是本质上都是上面这样简单电路的累加。


使用特权

评论回复
板凳
QQ715209572| | 2016-5-6 12:23 | 只看该作者
涨姿势了 谢谢楼主

使用特权

评论回复
地板
天灵灵地灵灵| | 2016-5-6 20:45 | 只看该作者
如果当时学数字电路时候就学这些岂不是更好,我觉得应该是好多大学老师都不懂

使用特权

评论回复
5
玛尼玛尼哄| | 2016-5-7 11:46 | 只看该作者
这如果扩展起来是不是就可以做个51单片机的内核了。

使用特权

评论回复
6
dentsgot| | 2016-5-7 22:42 | 只看该作者
自己都能做出计算机来,确实不容易啊,用的是FPGA吗

使用特权

评论回复
7
戈卫东| | 2016-5-8 11:33 | 只看该作者
四位加法器距离四位计算机还远着呢。。。。。。。。

使用特权

评论回复
8
戈卫东| | 2016-5-8 11:34 | 只看该作者
九、结论

  虽然这个四位计算机非常简陋,但是从中不难体会到现代计算机的原理。
------------------------------------------------------
其实还是很难。。。。。。。。

使用特权

评论回复
9
598330983|  楼主 | 2016-5-10 10:47 | 只看该作者
这个CPU能用吗

使用特权

评论回复
10
598330983|  楼主 | 2016-5-10 10:59 | 只看该作者
加法器和乘法器触发器都要有吧。

使用特权

评论回复
11
deviceplugs| | 2016-5-11 22:52 | 只看该作者
楼主真是厉害,连这都能模拟出来,学习了

使用特权

评论回复
12
keyu886| | 2016-5-11 23:35 | 只看该作者
看来楼主用最基本三极管做的了,直接用数字逻辑电路不更加好简洁吗?

使用特权

评论回复
13
lizemin314| | 2016-5-12 15:04 | 只看该作者
关注一下,作为学习入门来说慢不错的,赞一个。

使用特权

评论回复
14
supercpf| | 2016-5-16 23:45 | 只看该作者
学习这个可以了解计算机原理

使用特权

评论回复
15
598330983|  楼主 | 2016-5-19 18:25 | 只看该作者
复杂的东西都是简单的东西堆积而成的,因此想学高深的,先学简单的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

249

主题

5397

帖子

22

粉丝