计组中央处理器串讲: 理解cpu是如何工作的

  • Post author:
  • Post category:其他



目录


引言


指令执行过程的数据流动


指令周期


数据通路设计


控制器设计


硬布线控制器


微程序控制器


总结


引言

中央处理器这一章是计算机组成原理的核心,重难点,可能复习了多次依然还是容易遗忘或者难以理解某些过程。

本篇并非对基础概念知识点进行罗列解释

,而是主要在宏观层面对各小节内容进行串联,比如

每一小节涉及的概念是如何引出的,以及为什么要介绍这些概念,

希望可以帮助真正理解cpu的工作和设计原理。

这一章一开始都会初步介绍了cpu的功能及结构(如下图)

然后接下来的篇幅就是回答接下来这几个问题:

1.cpu的这些功能,具体是哪些部件共同协作来完成的?(即数据的流向问题)

2.cpu的这些部件,是靠什么来共同协作的?(数据通路的设计问题)

3.cpu是怎么指挥这些部件共同协作的?(控制器的设计问题)

按照这个思路去复习,脉络就会清晰很多,最后对上面那张cpu结构图的理解也会更深,而不只是单纯的死记硬背。

指令执行过程的数据流动

先来说问题1,我们知道cpu有控制指令执行的功能,在指令控制的流程中,cpu结构的哪些部件起到了作用呢?

指令周期

要回答这个问题,那首先需要知道指令执行的流程具体是什么样的。

于是就引出了指令周期这一部分知识点

,它告诉我们不同的指令执行流程可以分为不同的机器周期,机器周期又可以分为最小的时钟周期。

所谓的机器周期就是完成一个子任务所需要的时间,那么机器周期可以定长或者不定长也就很好理解了,因为每个子任务所需要的时间完全可能不一样。而指令周期可以划分的机器周期数不等,也类似理解为每条指令所要完成的子任务数量自然可能不等。

具体例子由下图所示。

现在知道指令执行流程是怎么样了,那就可以回答一开始的那个问题了:指令控制的流程中,哪些部件起到了作用呢?

于是就引出了指令周期数据流这一部分知识点。

每条指令要完成的具体任务不一样,因此指令的执行周期中没有固定的数据流向。

但是取指周期,间址周期,中断周期要完成的子任务序列是相对固定的,因为这些其实就是一些准备工作,所以可以给出这些周期中具体的数据流向。由下图可以看到,做这些准备工作不会关运算器什么事,都是控制器里的那些部件在忙活,而运算器是等控制器把准备工作做完了,拿到操作数之后再干活的。

以间址周期为例:

还有第四步,是将MDR的当前内容拼接到IR中,使得IR中原先的形式地址变为操作数有效地址。

那理解了指令数据在各种器件之间传输流动的线路过后,相当于已经知道了地图导航路线。但是我们光知道数据怎么流动还不够,还需要知道道路是按照什么方案修起来的。


这也就是我们最开始提出的第二个问题:cpu的这些部件,是靠什么来共同协作的?

数据通路设计


这样就引出了数据通路的设计这一部分知识点

,以及单总线,多总线,专用数据通路这些方案的优缺点比较等等,注意这边说到的总线是内部总线,要与系统总线进行区分。

以单总线为例,如执行加法指令,取操作数就需要把指令里的地址部分通过单总线放到MAR中,再根据MAR里的内容取到操作数放至MDR。

上面这张图中注意MDR是可以有两个地方进行输入的,既可以通过总线输入,也可以从主存输入,而这两个输入方式的控制信号是有区别的。图中并未给出从主存输入的控制信号,而是简单的写为MDRin。

另外,在执行算术运算时,由于单总线模式一次只能传输一个有效输入信号,但运算器ALU的两个输入端必须同时有效,所以要将其中一个操作数放入暂存寄存器Y,而Y和ALU之间是有专用数据通路的,始终有效,不需要经过总线。

当然如果改成双总线模式,就不需要这种暂存器了。

控制器设计

在上面其实已经提到了控制信号,这也就来到了最初所提出的第三个问题:控制器是怎么指挥这些部件共同协作的?

比如在我们要取指的时候,控制器就发出PCout和MARin的信号了,这就好像到下课时间时广播就会准时发出下课铃的信号让学生们自由活动一样。广播需要知道现在是哪一节课,具体什么时间,才能准确发出下课铃,cpu的控制器也一样,它需要知道现在执行的是什么指令,处在哪个机器周期,从而能够正确地产生in,out这些微命令序列指挥cpu工作。


事实上,由指令译码器ID对操作码译码后判断,控制器可以知道当前在执行的是什么指令。

由集成于cu内部的四个触发器来判断,可以知道当前处于哪个机器周期。

由节拍发生器的循环输入cu,可以知道当前处于哪个节拍。

那知道了当前这些条件信息,接下来就是设计具体在什么时间段指挥cpu做什么事情。

下图就说明了取指周期中的各项任务分别被安排在哪些时间节拍去完成,这是遵循下图中的

设计原则来安排的。

硬布线控制器

现在在什么条件之下输出什么控制信号都已经明确了,就需要把这些条件和结果组合出逻辑表达式,最终转化为硬件电路,才能真正输出控制信号

例:当cu获知正处于取指周期的第一个节拍时,就需要输出PCout,MARin的控制信号了。

当然实际上电路不可能这么简单,如果在很多种不同的情况下都需输出同一个控制信号,那么对应这个控制信号的硬件电路会非常复杂。

那么以上这种控制器的设计思想其实

就是教材上的硬布线控制器设计

,由于控制器的速度取决于电路延迟所以速度快,缺点是由于将控制部件看作专门产生固定时序控制信号的逻辑电路,一旦设计完成,很难通过其他额外修改添加新功能,可扩充性很弱。

微程序控制器

与之不同的另一种控制器设计思路即微程序控制器,采用了存储程序的思想,事先把每一条机器指令编写成一个微程序,微程序由一条条微指令组成,这些微指令可以存到一个控制存储器中。


这样只需按照节拍的安排顺序执行微指令,不用再设计组合逻辑电路,相对硬布线控制器而言时序系统比较简单。

微程序控制器要去控制存储器里取微指令,和cpu到存储器去取机器指令的流程类似,就像是内部的又一层套娃一样,因此微程序控制器中也有类似的寄存器如CMAR,CMDR对应MAR和MDR

但是不同的是,CMAR同时具备了PC的功能,也就是CMAR中微指令执行完后下一条微指令地址就送到CMAR里去了,而CMDR同时具备了IR的功能。

总结

可以发现,cpu的工作核心就是按照时钟节拍不断发出控制信号,指挥着指令的执行流程以及数据加工等工作。后面的微指令设计和指令流水线部分和cpu内部数据的流动和控制关系不大,在这里就不再赘述。



版权声明:本文为TENET_T原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。