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

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

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

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

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

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

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

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

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

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

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

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

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

用继电器做个与门

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

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

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

用继电器做个或门

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

用继电器做个异或门

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

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

做一些看起来可用的东西

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

小小约定

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

振荡器

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

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

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

加法器

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

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

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

寄存器

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

R-S触发器

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

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

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)。

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

上升沿D触发器

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

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

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

乒乓触发器

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

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

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

走马灯

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

寄存器

终于到这个小玩意了!

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

想保存数据的时候,调整好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!

继电器是如何成为CPU的(1)【转】的更多相关文章

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

    继电器是如何成为CPU的(1) ——<穿越计算机的迷雾>整理和总结 究竟是如何设计的电路,具有计算和控制的智力? 这一点也不高深.本系列文章从初中学的最简单的电路图说起,看看能不能从最初的 ...

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

    继电器是如何成为CPU的(2) ——<穿越计算机的迷雾>整理和总结 上一篇已经从电池.开关.灯泡和继电器开始,画出了设计CPU所需的基本器件.这些器件将成为设计CPU的砖瓦木料.这一篇就用 ...

  3. 电路相关知识--读<<继电器是如何成为CPU的>>

    电路相关知识–读<<继电器是如何成为CPU的>> */--> *///--> *///--> 电路相关知识–读<<继电器是如何成为CPU的> ...

  4. 继电器是如何成为CPU的

    阅读目录(Content) 从电池.开关和继电器开始 用继电器做个与门 用继电器做个或门 用继电器做个异或门 做一些看起来可用的东西 小小约定 振荡器 加法器 寄存器 R-S触发器 D触发器 上升沿D ...

  5. BIT祝威博客汇总(Blog Index)

    +BIT祝威+悄悄在此留下版了个权的信息说: 关于硬件(Hardware) <穿越计算机的迷雾>笔记 继电器是如何成为CPU的(1) 继电器是如何成为CPU的(2) 关于操作系统(Oper ...

  6. 十天学会单片机Day0点亮LED (锁存器、三极管、继电器)

    C51常用的数据类型 数据类型 关键字 所占位数 表示数范围 无符号字符型 unsigned char 8 0~255 有符号字符型 char 8 -128~127 无符号整型 unsigned in ...

  7. CPU与外设传送数据方式

    7.2 CPU与外设之间数据传送的方式 在微型计算机系统中,CPU与外设之间的数据传送方式主要有程序传送方式.中断传送方式和直接存储器存取(DMA)传送方式,分别介绍如下.     7.2.1 程序传 ...

  8. cpu怎么实现运算的

      这么好玩的问题,没人回答说不过去.不懂电子元件的码农我要强答一发了.太学术的我不会,你们也听不懂.所以臭不要脸非常不严谨地科普一记.说错不许打我.另外关于这个问题,推荐<编码 (豆瓣)> ...

  9. 【零基础】一文读懂CPU(从二极管到超大规模集成电路)

    一.前言 我们都知道芯片,也知道芯片技术在21世纪是最重要的技术之一,但很少有人能知道芯片技术的一些细节,如芯片是如何构造的.为什么它可以运行程序.芯片又是如何被设计制造出来的等等.本文就尝试从最底层 ...

随机推荐

  1. HDU4759_Poker Shuffle

    这是一个很好的题目,来自2013长春网赛. 题目的意思是给你2^N张扑克牌,每次洗牌前分别把从下开始数为奇数和偶数的牌分别拿出来放在一堆,两堆可以任意一个放在上面. 现在问你是否存在一种情况使得经过若 ...

  2. wp如何代码重启手机

    用过windows phone手机操作系统的人都知道,wp的系统设置界面很长一串,我们并不能快速进入想要的设置项,更受不了的是有些常用的设置项竟然在最下边.因为前段时间没事做,于是乎写了个wp的工具类 ...

  3. 编写高效SQL语句(转)

    转至http://blog.csdn.net/u012150457/article/details/41846299 一.编写高效SQL语句 1) 选择最有效的表名顺序(仅适用于RBO模式) ORAC ...

  4. C++解析(30):关于指针判别、构造异常和模板二义性的疑问

    0.目录 1.指针的判别 2.构造中的异常 2.1 如果构造函数中抛出异常会发生什么? 2.2 如果析构函数中抛出异常会发生什么? 3.令人迷惑的写法 3.1 模板中的二义性 3.2 函数异常声明 4 ...

  5. hdu5279 YJC plays Minecraft 【分治NTT】

    题目链接 hdu5279 题解 给出若干个完全图,然后完全图之间首尾相连并成环,要求删边使得两点之间路径数不超过\(1\),求方案数 容易想到各个完全图是独立的,每个完全图要删成一个森林,其实就是询问 ...

  6. linux内核分析 第二周 操作系统是如何工作的

    银雪纯 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.计算机是如何工作的 ...

  7. HDU.1846 Brave Game (博弈论 巴什博弈)

    HDU.1846 Brave Game (博弈论 巴什博弈) 题意分析 巴什博奕裸题 博弈论快速入门 代码总览 include <bits/stdc++.h> using namespac ...

  8. 解题:SCOI 2014 方伯伯运椰子

    题面 很有趣的一道题,看起来是个神奇网络流,其实我们只要知道网络的一些性质就可以做这道题了 因为题目要求流量守恒,所以我们其实是在网络中搬运流量,最终使得总费用减小,具体来说我们可以直接把这种“搬运” ...

  9. [JSOI2009]瓶子和燃料

    Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy 的飞船上共有 N个瓶子(1<=N& ...

  10. python基础----内置函数----匿名函数(lambda)

    Python3版本所有的内置函数: 1. abs() 获取绝对值 >>> abs(-) >>> abs() >>> abs() >>& ...