您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>电子元器件>继电器>

继电器是如何成为cpu的 - 继电器是如何成为cpu的

2018年01月26日 10:05 网络整理 作者: 用户评论(0

  二十、内存

  所谓饭前便后要洗手,一个完整的卫生间,除了有若干坑位,还得有洗手池配套。类似的,学习CPU的结构原理,也得把“内存”牵出来溜溜,否则无法说明计算机编程的本质。CPU+内存才是一个完整的计算机(核心),才能展现出CPU的功能。由此也能联系到,将鼠标键盘显示器等称为“外部”设备的道理。

  最基本的内存单元能够存储和读写一个位(bit),是由一个上升沿D触发器和传输门组成,如下图所示。传输门电路我没有找到只有一位的,拿这个四位GAA的凑合看吧。

  继电器是如何成为cpu的

  内存单元的符号如下图所示。(取自《穿》)

  继电器是如何成为cpu的

  把8个bit单元的读写端分别连起来,就可以存储一个字节(8bit)。下图是能够存储5bit的内存单元。(取自《穿》)此图所示的结构,我们称之为“一层”。

  继电器是如何成为cpu的

  存储4bit的一层的符号如下图所示。这时我学会了multisim12里的“层次块”这个东西,下图就是用层次块画的,这样可以将复杂的电路封装起来,省地方了,还能复用。所以说模块化的思想在硬件设计里就有了。(“用层次块替换…”和VS里的“Extract Method…”功能是何其类似!)

  继电器是如何成为cpu的

  用一层一层的内存单元,即可构成存储器。对于有8层的存储器,需要3个bit表示需要读写的层数(23=8)。地址译码器的作用是:输入101时,输出的第5个(从0开始计数)引脚为1,其余均为0。有了地址译码器,存储器对外只需很少的地址线(例如10根)即可使用很多层(例如1024层)。这也符合了软件设计中接口尽可能简单的原则。本文所用的RAM存储器的结构如下图所示。其中左边的“3-8translator”就是译码器。

  继电器是如何成为cpu的

  其层次块符号如下图所示。

  继电器是如何成为cpu的

  这个RAM有三条地址线(Addr3、Addr2和Addr1),能够表示23=8个字(层),每个字的长度是4bit。这个小小的RAM刚好够存储(5+1+2+4)这个示例的指令和数据,下面就用这个RAM继续进化CPU。

  这里也顺便把“3-8translator”译码器的电路实现贴出来吧,如下图所示。

  继电器是如何成为cpu的

  二十一、9位循环移位寄存器

  在version2里用的“2位循环移动寄存器”只需要一个乒乓触发器(详见上一篇)就可以了,但是后面要做的全自动控制器,需要一个“9位循环移位寄存器”,且这个寄存器要在加电时自动将第一个输出管脚置为1,其余为0。具有这样的功能的寄存器如下图所示。

  继电器是如何成为cpu的

  如上图所示,第二行有4个D↑触发器,其中最左边的那个负责第一个输出管脚,即应该在加电时就置为1的那个管脚。这是通过左下方的电路实现的,其原理大家自己琢磨吧,无非是利用反馈电路实现了只生效一次这个功能而已。“9位循环移位寄存器”的符号如下图所示,其中“D0”是第一个输出管脚。

  继电器是如何成为cpu的

  还有一个3bit的计数器,在上一篇里已经提过计数器,这里直接上图。

  继电器是如何成为cpu的

  其层次块表示如下图所示。

  继电器是如何成为cpu的

  二十二、自动控制器

  有了内存,我们就要把指令和数据存进去。存储数据很好理解,是多少就写入多少。存指令之前,我们需要为每条指令分配一个4位的编码,比如0000表示Load,1111表示Add,然后用这个指令码控制“KLoad”和“KAdd”的开闭,所以这又是一个转换电路。有了这个转换电路,就可以只用“K”开关来完成“准备指令、准备数据、执行”这些操作了。全部自动化的CPU如下图所示。我们将这个版本的CPU称为version3的CPU。

  继电器是如何成为cpu的

  这里的“ALU”是用层次块表示的version1里的电路,因为不这样的话,电路太大,而且不容易重点突出自动控制器的工作流程。同样的,“ShiftRegister9bit”、“Translator”、“Counter3bit”、“RAM8F4bit”都是层次块表示的电路。

  “ShiftRegister9bit”会依次将输出端置为1,这可以从上方的三个数值显示器看出来。“Counter3bit”是3bit的计数器。“RAM8F4bit”是8层(每层4bit)的内存。“Translator”实现了控制信号的自动控制,“Translator”的内部实现如下图所示。

  继电器是如何成为cpu的

  Version3所示的下半部分展示了译码电路,即把代表指令的4bit信号转换为指令信号的电路。由于我们指定Load和Add指令的代码(0000和1111)都是很规则的,所以译码电路也比较简单,如下图所示。

  继电器是如何成为cpu的

  Version3的CPU用“9位循环移位寄存器”等器件实现了“取指令、分析指令,取数、执行”的全部自动化,其中取指令、分析指令、取数、执行分别占用了移位寄存器的t0- t2、t3、t4-t6、t7-t8这9个阶段。

  注:如果用振荡器替换了“K”,这个CPU会不停地运转下去,这样就得不到我们想要的结果0xC(十进制的12)了。所以还需要添加“停机”指令。不过到这里已经说清了CPU的控制器是如何一步步实现自动化的,不再继续讲述如何添加新的指令。

  二十三、最原始的机器语言编程

  在给出上文的自动控制器里,我们只说了从内存里取指令和数据,而没有说这些指令和数据是如何写进去的。其实写进去的过程就是(机器语言)编程的过程。最简单的,你可以用拨动开关的方式,调整好要写入的位置,再调整好要写入的数值,把指令和数据一个字一个字地写入内存。最初的计算机编程就是用类似这样的方式(打孔纸带)编程的。(这个过程实在无聊,本文就不展示了,有兴趣的话自己拿multisim玩玩就好~)

  用助记符和一些宏来代替机器码,这就是汇编语言。用C语言这种方式封装了汇编语言的编程方法,就是面向过程编程。用C++\C# \Java这样的语言封装了面向过程的语言,就是面向对象的编程方法。用if(。。){…}代替JMP指令这种东西比较容易想象,但用“封装继承多态”这种飘渺的概念代替面向过程编程就有点困难了。我在另一篇文章《用C表达面向对象语言的机制——C#版》中作了分析和总结,现在终于算是从继电器一路走到面向对象编程了。

非常好我支持^.^

(94) 98.9%

不好我反对

(1) 1.1%

( 发表人:陈翠 )

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!