继电器是如何成为CPU的(1)【转】

转自:http://www.cnblogs.com/bitzhuwei/p/from_relay_to_tiny_CPU.html

继电器是如何成为CPU的(1)

——《穿越计算机的迷雾》整理和总结

究竟是如何设计的电路,具有计算和控制的智力?

这一点也不高深。本系列文章从初中学的最简单的电路图说起,看看能不能从最初的有一个继电器的电路,画到一个简单的CPU。电路图用multisim12.0绘制,这样就可以看到效果了。

(注:虽然现代计算机是用半导体材料制作芯片的,但是电路原理和继电器材料没有不同。本人愚钝,只理解了继电器,还没有研究电子管、晶体管这些器件的工作原理。而继电器原理简单,用作讲解数字电路原理再好不过。)

从电池、开关和继电器开始

001电源开关和灯泡

上图左上角是一个很普通的电路,由电池、开关电流表和灯泡组成。这个是初中物理学过的。

上图右上角是对左上角电路的简单变形,用VCC代替了电池,用接地符号实现了回路。相当于把电池拆开来画了。电路功能是一样的。本文此后的电路图一般都采用VCC和接地表示电源。因为你会发现只有这样的画法能够让我们方便理解之后的电路图。

然后往下看,第三个电路图,那个圈圈里圈着个K的蓝色的东西,表示的是继电器。当继电器左侧有电流通过时,右侧的电路就断开;反之则联通。(对应地,也有那种左侧有电流通过时,右侧的电路就联通;反之则断开的继电器,稍后会用到)这个电路想让你知道的是,可以用继电器实现这样的功能:控制左侧的电路的通断,即可改变右侧电路的通断。换个方式说,就是左侧的电路通断情况决定了右侧的电路的通断情况。再往抽象了说,就是左侧电路代表了"输入"(Input)这个概念,右侧电路代表了"输出"(Output)这个概念。继电器则代表了"计算"(或者"算法"、"处理"等)(CPU)这个概念。硬件就是用这种电器设备的固有物理性质提供了最初的计算能力。

再往下看第四个电路图,它和第三个的区别就在于用VCC和接地符号代替了电池。初次看电路,我们有必要经历一次从电池到VCC和接地符号的过渡。以后的电路图,我们将直接使用VCC和接地符号,请务必在此处适应这样的画法。

然后是最下边这个电路。和第四个电路相比,它用一个"非门"的符号代替了"继电器、右侧电路电源和继电器的接地"这三个符号。也就是说一个"非门"实际上就是"继电器、右侧电路电源和继电器的接地"这三个东西的组合,而且画的时候省略了电源和接地符号。

之前在学校里学数字电路,我就是想不明白逻辑门的电源在哪儿,整个电路的通路在哪儿,所以一直学不好。现在有个这个电路图,感觉一切豁然开朗。

用继电器做个与门

刚刚我们用继电器做出了"非门"。可以看到只要用一个继电器就可以了。与门的电路如下图所示。

002用继电器做与门电路

与门由两个继电器(这两个继电器用的都是跟做非门的继电器通断情形相反的那种)构成,只有当两个继电器左侧都通电时,右侧电路才能联通。这样就实现了"与"的功能。"与门"的符号是一个躺着封口的U形。

注:本文里我做的电路图片都是GIF格式的,你可以在浏览器里看到随着开关的开闭,输入和输出电路上的灯泡是如何变化的。每个图上都有(http://bitzhuwei.cnblogs.com)标识我的博客地址,不过每个GIF图的最后一帧都去掉了这个标识。这样,看到一帧没有标识的时候,就知道下一帧将是GIF图的第一帧了。

用继电器做个或门

"非门"、"与门"做出来了,"或门"也就不难理解了,直接上图大家体会吧。(导线交叉的地方,如果有个红点,表示是联通的,否则就是互不相干的)"或门"的符号像一个子弹。

003用继电器做或门电路

用继电器做个异或门

"异或门"的功能是:左侧的两个输入电路一个联通另一个不联通时,右侧电路联通;否则右侧电路不联通。这次先画符号,大家可以先自己尝试用继电器画"异或门",锻炼一下思维,然后再向下看答案。

005用继电器做异或门电路2

答案揭晓!"异或门"的实现如下图所示。乍看很复杂,其实是有逻辑的。最右边的两个继电器其实是一个"或门",最左边两个继电器是两个"非门",中间两上两下共四个继电器,是两个"与门"。这样就好理解了。AB两个输入电路为A通、B不通的时候,整个"异或门"会通过下方的路线使灯泡亮;若A不通、B通,则会通过上方的线路使灯泡亮。其他情况灯泡都不会亮。

004用继电器做异或门电路1

 

做一些看起来可用的东西

与或非异或逻辑门电路虽然重要,却离构造CPU相距较远,做出来似乎也没什么成就感。那么我们用这些过于基础的器件,做一些有用的东西吧!

小小约定

为了表达方便,我们约定一下,逻辑门电路的输入(输出)线上有电流的时候,我们说输入为1(输出为1),否则就说输入为0(输出为0)。

振荡器

振荡器能够不断地输出0、1、0、1、0、1、0、1……这样的信号。这种东西虽然一时说不上有什么用,不过一定是有用到的时候的。振荡器做起来也简单得离谱。看下图所示电路。

006振荡器2

把非门的输出端连到输入端上。当输出为1时,输入也就成了1,那么输出就得变成0;然后输入也跟着变成0,这样输出又变回了1。循环翻转无休无止。振荡器能翻转多快,就看继电器的反应有多快了。(现代计算机用晶体管代替了继电器,晶体管比继电器翻转速度快得多,所以能够得到的频率更高,计算机的速度更快。而且晶体管比继电器省电)话说multisim12仿真的翻转速度也够可以的,本人截图也费了不少劲。

顺便给一个用继电器做振荡器的实际应用的例子:上学的时候上下课的铃声就是用继电器做的振荡器完成的。0101信号用锤子敲打铁盔表达了出来。

加法器

刚刚约定了,用1和0表示电路的通断。电路只有通断这两种状态,所以计算机只用0和1来表示数,这就是二进制啊。关于二进制和十进制的内容别人写得太多了,我就不提啦。要计算两个多位二进制数的和,可以分别计算各个数位上的结果,而各个数位的计算方法又是相同的,即"被加数+加数=>和的值+进位的值"。这用逻辑门表示如下图。

007加法器1

A和B表示加数和被加数,C表示前一位计算的进位的值,C1灯泡表示本次计算的进位的值,S1灯泡表示本次计算的和的值。我找了半天,也没在multisim12里找到一位二进制数的加法器件的符号,大家看这个图就可以了。

要计算多位数,把单位数加法器首尾相连就可以了,如下图所示。这两张图是从《穿越计算机的迷雾》中拿来的。如果侵权,请告诉我,不然我就偷个懒不自己画啦。

寄存器

学汇编的时候听过这个东西,"寄存"这个词让我感觉寄人篱下可怜巴巴的。寄存器的功能是把数据(约定里说的0和1,实际就是电路的通断状态)保存下来,以后还可以取出来用。寄存器这东西比之前的器件都复杂,需要一步一步来做。

R-S触发器

先看下面这个电路,这是各种有存储功能的器件的基础。

009R-S触发器1

上图展示的是在R和S开关都断开的情况下启动电路得到的结果。《穿越计算机的迷雾》里说这种情况下,哪个灯泡亮是不一定的,就看哪个逻辑门转的快了。不过我用multisim12仿真的时候,两个灯泡是在忽亮忽灭不停地闪。这可以说是非正常人类使用R-S触发器的情况。下面再看看正常人类使用R-S触发器的情况。

009R-S触发器2

R-S触发器的R是Reset,意思是把Q灯泡重置为0,S是Set,意思是把Q灯泡置为1。可以看到,只闭合S,则Q亮NQ不亮;只闭合R,则Q不亮NQ亮;同时闭合RS,则Q和NQ都不亮;同时断开RS,则Q和NQ保持刚才的状态不变。

D触发器

既然要保存数据,我们就要求只在希望保存某个数据的时候存进去,否则就不理他。所以我们给R-S触发器加一个新的输入作为控制端,只有控制端为1的时候才能保存新来的数据。这里也把RS端合并为一个D端,用一个非门实现了只能使R和S有且只有一个开关是闭合的(即要么Q灯泡变为1要么Q灯泡变为0)。

010D触发器

D触发器的符号我也没在multisim里找到,大家看这个吧。

上升沿D触发器

我们只希望在某一瞬间把数据存起来,而不是像D触发器那样,控制端为1的整个时间端都会保存新数据。(这样最安全)于是我们在D触发器基础上设计了上升沿D触发器。这个触发器只在控制端从0变为1的瞬间存储新数据。是不是很奇妙的设计?

011上升沿D触发器

上升沿D触发器使用了两个D触发器,再加一个非门,就OK了。平时,我们把要存储的数据(D开关)放好。然后,当控制端CP为断开时,图中上面那个D触发器是能够存数据的,但是下面那个存不了。就是说新数据已经到了两个D触发器之间的导线上。在控制端CP闭合的瞬间,上面的D触发器无法再存新数据了,而下面的D触发器可以存新数据了,那么它存的是哪个新数据?只能是刚刚在两个D触发器之间的导线上的数据了。这个瞬间之后,新数据无法通过上面的D触发器,自然也就无法保存了。

这次我终于在multisim12里找到了上升沿D触发器的符号。

乒乓触发器

这是个有点类似振荡器的器件。两者的区别在于,振荡器是自动地改变输出,乒乓触发器是在输入一个上升沿的时候改变输出。电路图如下所示。

013乒乓触发器

可以看出,乒乓触发器其实就是把上升沿D触发器的非Q输出端接到了输入端。很显然每次存的新数据总是和输出信号相反。

乒乓触发器可以用来做计数器。计数器有这样的功能:每收到一个上升沿的信号,就增加1。例如下图所示的能统计二进制的00000到11111(即0到31)这32个数。计数器的每一位计数器件都是一个乒乓触发器。灯泡亮表示1,灯泡灭表示0。

014计数器

走马灯

利用上升沿D触发器还可以做"走马灯"。走马灯是每次都让前面一个灯泡亮的设备,最后一个灯泡亮过之后,又从第一个灯泡开始亮,循环往复。下图所示电路就是一个有5个灯泡循环走马的走马灯。为了在电路刚接通的时候让第一个灯亮起来,我加了两个开关S1和S2,大家可以分析一下怎么用S1和S2。这有助于加深体会上升沿D触发器的功能,并加速对更复杂器件的理解。

012走马灯

寄存器

终于到这个小玩意了!

能保存5位二进制数的寄存器如下图所示。其实就是5个上升沿D触发器并列起来而已。

015寄存器

想保存数据的时候,调整好D0、D1、D2、D3、D4五个开关(实际应用的时候就可能是其他电路的输出导线了),然后断开再闭合一下控制端的开关S5即可,数据就保存到了5个上升沿D触发器的Q端。

我这里只画了保存5位数的寄存器,是因为再画就太大了,在word里图就看不清楚了。我们知道现在计算机的寄存器已经到32位或者64位了。那就是有32或64个并列的上升沿D触发器组成一个寄存器。我们也看到了一个上升沿D触发器需要几十个继电器(晶体管),那么一个寄存器就需要上千个继电器(晶体管)了。而CPU里包含的寄存器、加法器等运算器还有各种控制器,其包含的继电器(晶体管)数目上百万也就很好理解了。内存条里的内存也是用上升沿D触发器和一个门电路组成存储一位(一个bit,8个bit是一个字节)的存储结构的,其包含的继电器(晶体管)数目可想而知有多少。

 

中场休息

到这里,做CPU需要的基础器件就差不多全了。不过再写下去就太长了,不利于理解和记忆。因此暂且中场休息,下一篇再继续介绍如何构造一个简单的CPU。

前面介绍的各自器件,可以用下表描述其继承关系。(索性把下一篇文章要介绍的器件也列出来了)

继电器

       
 

非门电路

      
 

与门电路

      
 

或门电路

      
 

异或门电路

      

振荡器

       

加法器

       

寄存器

       
 

R-S

D

D↑

乒乓

计数器

  
    

走马灯

   
    

寄存器

多个数的加法器

  
    

存储器

多bit存储器

多字存储器

有地址译码器的存储器

控制器

       
 

手动

      
 

半自动

      
 

全自动

      

 

自言自语

自大学始,学软件工程至今已有7年。一共找到这么几本好书:《穿越计算机的迷雾》、《Orange'S OS:一个操作系统的实现》、《CLR via C#》。

读《穿》就是为了弄明白一个问题:为什么计算机能够计算?《穿》在下面这张图中让我明白了我一直想不明白的问题。

读《Orange》也是为了弄明白一个问题:进程到底是什么?

读《CLR via C#》还是为了弄明白一个问题:.NET虚拟机里都有什么?

如果您愿意花几块钱请我喝杯茶的话,可以用手机扫描下方的二维码,通过微信捐赠。我会努力写出更好的文章。
微信捐赠不显示捐赠者的个人信息,如需要,请注明您的联系方式(微信留言只显示10个汉字)
Thank you for your kindly donation!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
继电器是如何成为CPU的(2).电路图 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\3-8translator.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\3-8translator.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\9ShiftRegister.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\9ShiftRegister.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\016传输门电路测试.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\016传输门电路测试.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\017寄存器测试.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\017寄存器测试.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\018四位数值显示器.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\018四位数值显示器.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\019手动CPU.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\019手动CPU.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\020半自动CPU.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\020半自动CPU.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\021保存一位的存储器.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\021保存一位的存储器.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\022存储器.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\022存储器.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\022字长4bit的存储器.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\023存储器8层4bit.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\023存储器8层4bit.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\024九位循环移位寄存器.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\024九位循环移位寄存器.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\025三位计数器 - 副本.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\025三位计数器 - 副本.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\025三位计数器.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\025三位计数器.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\026全自动CPU.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\026全自动CPU.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\ALU.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\ALU.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\Counter3bit.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\Counter3bit.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\Counter4bit.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\Counter4bit.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\RAM8F4bit.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\RAM8F4bit.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\ShiftRegister9bit.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\ShiftRegister9bit.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\Translator.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\Translator.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\Word4.ms12 CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\Word4.ms12 (Security copy) CPU 继电器是如何成为CPU的\继电器是如何成为CPU的(2).电路图\第3章基本工作原理.ppt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值