期末总结系列3——控制器

计组期末总结系列3——控制器

 

————————下面是一些开头的废话,可以不看————————

由于电脑坏了,又不能整天玩手机,舍友说计组不会,为了方便同学复习,同时总结一下整个学期学习的内容,所以决定写写一些重点的内容,另,本人水平有限,如果文中有错误还请批评指正。

——————我是分割线,上面的废话可以不看,下面才是重点———————

 

要说控制器,就要从头说起。当设计实现了运算器、存储器之后,再配合一些寄存器,就可以进行很多算数运算和逻辑运算了,无论是什么运算,在这门课中都是基于单总线结构来学习的。总线就是一排导线,我觉得把它叫做排线其实也没什么问题。这一排线的两端可以接不同的东西,一边输出数据、一边读入数据,就完成了两个设备之间的数据传递。

由于是单总线结构,所以只能同时一个设备输出数据。但是却可以多个设备同时输入数据。硬件上来说,总线的一端是根据需要连接不同的设备的。另一端连接着所有可以输入数据的设备,根据需要改变它们的片选信号即可控制哪个或者哪几个设备从总线读取内容。理解了这点,实验中无论多么复杂的操作也就可以理解了。其实实验那么多操作无非是干这几件事:更改总线的输入端设备、更改总线的输出端设备、进行一些运算。这几件事也是计算机能干的事情,输入、运算、输出。

下面的部分将从高层到底层逐层细化、分析原理,再从底层到高层逐层编码、简化操作。

对应不同的设备,这三个操作都不一样,对于每个设备自己来说都有不同的读入、输出、运算方法,体现了一种多态的特性,是不是非常像面向对象程序设计思想??我们以面向对象的思想来说说不同设备的读入、运算、输出。这三个方法就叫做微指令。设备之间交换数据的媒介就是总线。

 

寄存器

读入:从总线读入数据到内部

运算:无

输出:内部数据输出到总线

 

ALU运算单元

读入:DR1从总线读入数据、DR2从总线读入数据

运算:选择运算方式

输出:运算结果输出到总线

 

其他设备类比都可以写出这套流程。把上面每个过程再细化为具体操作如下,其中每个操作叫做微操作控制信号,也可以叫做微命令。

 

寄存器

读入:LDxx = 1  YS = 11  KQD

运算:无

输出:RxxàBUS  YS = 00

 

ALU运算单元

读入:LDDR1 = 1  KQD、LDDR2 = 1  KQD

运算:S3 S2 S1 S0 M Cn = XXXXXX

输出:ALUàBUS = 1

 

如果所有设备都完成了上面的过程,那么每一个运算操作总能被划分为某设备的输入、运算、输出三种操作。这时候如果想做一个运算操作指令,只需要套用即可,举个例子来说:(R1)+(R2)à R1,步骤是这样的:

ALU读入

ALU运算

ALU输出

R1读入

套用上面的已经写好的流程

ALU读入

  1. R1内容输出到总线
  2. DDR1读入数据
  3. R2内容输出到总线
  4. DDR2读入数据

ALU运算

  1. 选择运算方式

ALU输出

  1. 运算结果输出到总线

R1读入

  1. R1从总线读入数据

 

翻译为具体操作就是

 

  1. R1àBUS = 1 YS = 00
  2. LDDR1 = 1 KQD
  3. R2àBUS = 1 YS = 00
  4. LDDR2 = 1 KQD
  5. S3S2S1S0 = 1001 M = 0  Cn = 0
  6. ALUàBUS = 1
  7. LDR1 = 1 YS = 11  KQD

————————这是分界线,接下来将逐层编码返回高层————————

 

你会发现,每次只有按完KQD才是完成了数据的传输,KQD之前的内容都是在更改总线输入端和输出端的设备及片选状态。当做了很多类似的操作时候,会发现很麻烦,这时候人们希望机器自动执行指定的操作。思想是这样的,设计一套指令格式,把这些内容存进一个存储器,需要执行的时候直接从这个存储器调用,这个存储器就叫做控制存储器。

既然都是更改状态+KQD,那么我们就可以把这些状态记下来,然后再执行KQD。这时候就会出现问题,怎么表示这些状态?这就是微指令编码的设计。

如果直接记录每个状态,也就是每一位记录一个片选信号状态,这种方法叫做直接控制法、也叫不译法。好处是执行速度很快,缺点是会导致整个状态记录后很长。

如果把所有的组合进行编码,就叫做全编码方法。每个编码对应一个微命令,那么编码长度会大大缩短,不过不好的是一段程序将有很多的微命令,会增加CM的访问次数,效率会下降。

如果综合前两种方式,那么就叫做字段编码表示法。把一些有冲突的操作进行编码,剩下的直接表示。那么执行的时候直接对编码过的字段线进行译码即可,剩下的线直接接到对应的片选管脚。

那么怎么告诉机器你想执行什么操作呢?机器听不懂人话,至少实验的那个机器听不懂,那么最好的办法就是再这个层次继续编码,每个编码对应连续的几个微指令(注意和微命令区分),这个编码的集合就叫做指令集。指令集的设计请自行查看课本(如果你明白了这个层次,那么一定能明白课本课程的层次顺序和你做实验的层次顺序。其实课本是从上层向底层讲的,而实验是从底层向上做的,正好相反。)

这些指令存在一个独立的寄存器中,这个寄存器就是IR,指令寄存器。每次从指令寄存器取指令,译码后(第一层译码)执行对应由微程序构成的一段程序、微程序又由微指令构成,微指令再进行译码(第二层译码)产生微指令(微操作控制信号),这样就成了书中的那个层次图。在时钟脉冲的控制下,这个过程一直持续下去直到程序结束。这两层译码的部分再加上程序计数器、IR、时序发生器组合在一起,控制着整个流程的运转,所以叫做控制器。

0 Comments
Leave a Reply