第九章 控制单元的功能

掌握多级时序的概念,时钟周期,节拍

相对简单,要对CU的运行有一个基本的轮廓

到现在为止,我们已经介绍完了CPU的ALU、寄存器(存储器)、中断系统,只差CU模块还没有介绍。这一章我们就来介绍CPU的最后一个组成部分:CU控制单元。

控制单位的主要功能之一就是完成指令的解释。我们以CU分析和执行指令的过程为例,说明控制单元要完成哪些功能。

微操作命令的分析

微操作,即在指令执行过程中,由CU发出的指令,比整条操作指令小的多。我们现在分别从指令执行的不同阶段,来学习CU在此期间的作用。

在介绍指令系统时我们知道,完成一条指令分4个工作周期取指周期、间址周期、执行周期和中断周期。我们就按照这四个周期,来一一分析CU的功能。

取指周期

取指周期的过程可以归纳为以下几个微操作:

  1. PCMAR地址线PC\rightarrow MAR\rightarrow 地址线

    PC将指令地址送入地址寄存器MAR,通过地址总线发出

  2. 1R1\rightarrow R

    这里的R指的是控制寄存器,由控制寄存器传输信号给控制总线向主存发送读命令

  3. M(MAR)MDRM(MAR)\rightarrow MDR

    将MAR所指的主存单元中的内容经过数据总线读入MDR内

  4. MDRIRMDR\rightarrow IR

    MDR将内容送至指令寄存器IR内

  5. OP(IR)CUOP(IR)\rightarrow CU

    CU对指令的操作码进行译码

  6. (PC)+1PC(PC)+1\rightarrow PC

    PC形成下一条指令的地址。注意,只有且必须在取指周期递增一次PC。如果学过8086汇编语言,你就会知道CPU执行指令的过程是先将指令读入指令寄存器,然后递增IP指向下一条指令。那么递增这个操作,实际上就是在取指周期内完成的。

image-20240620193217182

间址周期

间址周期完成取操作数有效地址的任务,具体操作如下:

  1. Ad(IR)MARAd(IR)\rightarrow MAR

    将指令的形式地址送入MAR

  2. 1R1\rightarrow R

    启动读操作

  3. M(MAR)MDRM(MAR)\rightarrow MDR

    将形式地址内的数据传回MDR

  4. MDRAd(IR)MDR\rightarrow Ad(IR)

    将MDR内的有效地址送至指令寄存器的地址字段

image-20240620193603661

执行周期

执行周期的过程相对比较复杂。不同于取指周期和间址周期,执行周期会根据指令操作的差异而改变。我们将分别讨论非访存指令、访存指令和转移指令的微指令操作。

非访存指令

非访存指令比较简单,因为不涉及访存,所以不需要用到总线传输以及地址及数据寄存器。有以下指令是非访存的:

指令 功能 微指令操作
CLA 清除ACC的值 0ACC0\rightarrow ACC
COM 将ACC内的值取反 ACCACC\overline{ACC}\rightarrow ACC
SHR 算术右移 L(ACC)R(ACC),ACC0ACC0L(ACC)\rightarrow R(ACC),ACC_0\rightarrow ACC_0
CSL 循环左移 R(ACC)L(ACC),ACC0ACCnR(ACC)\rightarrow L(ACC),ACC_0\rightarrow ACC_n
STP 停机指令 0G0\rightarrow G GG是停机标志
访存指令

访存指令需要访问主存,所以一般都会涉及到总线传输,此时控制线输出的信号根据操作类型输出可读可写。

  • 加法指令 ADD X

    1. Ad(IR)MARAd(IR)\rightarrow MAR

      将指令寄存器的形式地址送入MAR

    2. 1R1\rightarrow R

      控制线输出读信号

    3. M(MAR)MDRM(MAR)\rightarrow MDR

      主存读取MAR地址中的数据送回MDR

    4. (ACC)+(MDR)ACC(ACC)+(MDR)\rightarrow ACC

      ACC中的值加上MDR中的数据,计算结果保存在ACC中

  • 存数指令 STA X

    1. Ad(IR)MARAd(IR)\rightarrow MAR

      将形式地址送入MAR

    2. 1W1\rightarrow W

      控制线输出写信号

    3. ACCMDRACC\rightarrow MDR

      将ACC内的值送入MDR内

    4. MDRM(MAR)MDR\rightarrow M(MAR)

      将MDR中的数据写入主存中MAR的地址内

  • 取数指令 LDA X

    1. Ad(IR)MARAd(IR)\rightarrow MAR

      形式地址送入MAR

    2. 1R1\rightarrow R

      控制线输出读信号

    3. M(MAR)MDRM(MAR)\rightarrow MDR

      将主存中MAR地址内的数据取出存放在MDR中

    4. MDRACCMDR\rightarrow ACC

      将MDR中的数据送入ACC,而不是与ACC内的值相加

转移指令

转移指令分为无条件转移和有条件转移,对应汇编中的jmpjz等指令。要实现转移指令,一般涉及到对PC的修改。

  • 无条件转移 JMP X

    Ad(IR)PCAd(IR)\rightarrow PC,直接将指令中的形式地址送入PC,因为JMP后跟着的操作数往往就是需要跳转执行的指令地址

  • 条件转移 BAN X

    A0Ad(IR)+A0(PC)PCA_0·Ad(IR)+\overline{A_0}(PC)\rightarrow PC,条件转移实际上是看ACC的首位A0A_0是否为负数(对应高电平,因为符号位取1代表负数)。是负数则转移,否则不转移。

指令周期

各类指令对应的指令周期总结如下图:

image-20240621105317997

只要查看有无间接过程,就能判断有无间址周期。否则,大部分指令只需要取指周期和执行周期。判断指令经过的具体周期后,就能根据细分的周期分析执行指令时需要的微指令。

中断周期

除了取指、间址、执行外,还有一类特殊的周期是中断周期。中断往往是由外部I/O设备对CPU发出的请求产生的,所以他们有特殊的微指令操作。

我们在第八章介绍中断系统时已经讨论过,在中断周期内执行的三个步骤:

  1. 保存程序断点
  2. 形成中断服务程序入口地址
  3. 关中断

以上三个步骤务必牢记。接下来我们就这三个步骤讨论CU在此过程中的作用。

保存断点

保存断点我们介绍了两种方法:将断点地址存于特殊的主存空间内(0号地址),入栈保存。相应的,他们的微指令操作也各不相同。

  • 存入“0”地址

    1. 0MAR0\rightarrow MAR

      将0号地址送入MAR中

    2. 1W1\rightarrow W

      控制线输出写信号

    3. PCMDRPC\rightarrow MDR

      将此时PC的内容,也即程序断点地址送入MDR中

    4. MDRM(MAR)MDR\rightarrow M(MAR)

      将MDR的数据送入主存的0号地址

  • 断点入栈

    1. SP1MARSP-1\rightarrow MAR

      将栈顶指针(栈指针寄存器)的值减一,把此处的地址送入MAR

    2. 1W1\rightarrow W

      控制线发出写信号

    3. PCMDRPC\rightarrow MDR

      程序断点地址送入MDR

    4. MDRM(MAR)MDR\rightarrow M(MAR)

      把MDR的数据送入对应的栈空间

形成入口中断地址

形成入口地址我们也介绍了两种方式:硬件向量法与软件查询法

硬件向量法:向量地址PC向量地址\rightarrow PC,即直接把形成的向量地址送入PC即可

软件查询法:中断程序识别入口地址MPC中断程序识别入口地址M\rightarrow PC,此时PC跳转至软件查询法提供的中断识别程序M执行,程序M会再把入口的地址送入PC。注意这里并没有直接把中断的真正入口地址直接送给PC,而是分成了两步

关中断

关中断即把EINT置0即可。

0EINT0\rightarrow EINT

微指令小结

通过以上对各个指令周期中CU输出的微指令分析,我们可以总结出CU的一些规律:

  • 如果指令不访存,则不涉及总线传输、MDR和MAR。CU仅在CPU内输出简单的单步或双步信号。
  • 如果指令访存,如取指、存数、断点保存等过程,一般要涉及到总线和主存寄存器的使用。首先要将需要取数/写数的地址送入MAR,再由控制寄存器设置相应的读写信号,接着就可以把要写的数据送入MDR或者把访存的数据存入MDR,最后再把MDR内的数据写入主存或者送入CPU的ACC内。
  • 如果指令涉及转移,则一般还要用上PC寄存器。注意是有条件转移还是无条件转移。

控制单元的功能

以上微指令的分析流程想必大家都已经有了个大概的轮廓,但我们都只是基于符号表示给出了形式上的说明,本节我们就来学习在硬件上CU是如何驱动完成这些功能的。

我们先给出CU的一幅结构图。

image-20240621164920497

我们根据这幅图来介绍与CU有关的输入信号和输出信号。

输入信号

由图可知,CU接受以下四个输入信号:

  • 时钟

    CU受时钟控制,一个时钟脉冲下,CU可以发送一个或者一组需要同时执行的操作命令。是驱动计算机运行的最基础信号,也是我们后续介绍多级时序系统的基础。

  • 指令寄存器

    OP(IR)CUOP(IR)\rightarrow CU时,存储指令中操作码的信息。控制信号的发出依赖于操作码。

  • 标志

    CU还受标志控制,比如条件转移标志位

  • 外来信号

    比如INTR中断请求、HRQ总线请求等

输出信号

由图可知,CU输出的信号可分为两类:CPU内的各种控制信号和送至控制总线的信号。

  • CPU内的控制信号

    如:RiRjR_i\rightarrow R_j寄存器之间的赋值操作

    (PC)+1PC(PC)+1\rightarrow PC指令计数器递增

    ALU中的+、-、与、或等各种算数控制信号

  • 送至控制总线的信号

    MERQ\overline{MERQ} 访存控制信号

    IO/M\overline{IO}/M访问IO/存储器的控制信号

    RDWR\overline{RD}、\overline{WR}读命令与写命令

    INTAINTA中断响应信号

    HLDAHLDA总线响应信号

举例

这里主要谈谈CPU中分散连接和采用CPU内总线通信的两种结构,简单的过一下。只要掌握了CU微指令流程其实就很简单。

下图是分散连接的一个示例:

image-20240621171409141

可以看到这么做需要比较繁多的线路,如果我们引入CPU内部总线,就可以大大简化电路。

image-20240621171506973

可以看到,引入内部总线后,CPU内各部件的通信只需要依赖于一根总线,而无须庞杂繁琐的各部件都连线。其中还有一点变化需要注意:ALU多了寄存器Y和Z,Y用来存放另一操作数,Z用来临时放计算结果,防止结果放入总线后又被ALU读入。

多级时序系统

终于来到了本章的重头戏——多级时序系统。别被这个高大上的名称吓到了,其实内容很简单,就是一个概念的套娃。指令周期>机器周期>时钟周期。

我们来学习一下机器周期和时钟周期的概念,就可以理解多级时序系统了。

机器周期

机器周期,即所有指令执行过程的一个基准时间。通常指的是完成一个特定功能所需的一系列时钟周期。例如,从内存中读取数据或写入数据可能需要多个时钟周期来完成。机器周期通常包括数据传输、地址访问、控制信号的建立等。

通常我们确定机器周期时,需要考虑每条指令的执行步骤每一步骤所需的时间。一般来说,我们把完成最复杂指令功能的时间作为机器周期的基准时间。最复杂指令通常是访存操作,所以我们一般是以访问一次存储器的时间为基准。

如果指令字长=存储字长,那么取指周期=机器周期。

每个机器周期内部也有很多微操作,有先后顺序。所以机器周期内部也需要有多个时钟周期,由时钟控制微操作先后顺序。

时钟周期

时钟周期,又称节拍或者状态,是计算机中最基本的时间单位,可以用时钟周期控制产生一个或几个微操作的命令。

如果微操作可并行,则一个机器周期内可完成若干个微操作。

时钟周期与机器周期的关系如下图:

image-20240621173315652

可以看到,时钟周期的每一个上升沿会给T0一个信号,微操作的下降沿又会激活下一个微操作。一组由时钟周期调控的微操作组成一个机器周期。

多级时序系统

机器周期、节拍(状态、时钟周期)组成多级时序系统,一个指令周期包含若干个机器周期,一个机器周期包含若干个时钟周期。

image-20240621174044179

控制方式

产生一个微指令操作后,下一个指令什么时候产生呢?我们有几种控制方式:同步控制方式、异步控制方式、联合控制方式和人工控制方式。

我们主要介绍同步控制方式,这也是大多数计算机目前所在采用的控制方式。

同步控制方式

同步控制方式,即任一微操作均由统一基准时标的时序信号控制。它的特征是,一定有一个定宽定距的时钟。

image-20240621180344264

同步控制方式有三种类别:

  • 采用定长的机器周期

    这种方式强制规定了机器周期内的节拍数相同,此时的机器周期以最长的微操作序列和最繁的微操作作为标准。这就导致了在一些相对简单的机器周期内,会产生空闲的节拍,即浪费了部分时钟周期。

  • 采用不定长的机器周期

    即机器周期内的节拍数不等,执行指令过程较短的话可以含较少的节拍,如果执行指令过程较长则可以延长节拍。

    image-20240621180828791
  • 中央控制和局部控制相结合

    还可以采用采用中央控制和局部控制相结合的方法,即执行较长的延长的周期由局部节拍进行控制。

异步控制方式

异步控制方式即一个微操作完成后,会给出一个应答信号。它没有基准时标信号和固定的周期节拍与严格的时钟同步,采用应答方式来控制。

联合控制方式

即同步和异步相结合的操作,常用与复杂的指令控制,如IO指令等。

人工控制方式

即人为参与程序运行调控,多用于程序调试,有以下三种方式:

  • Reset,即重置程序。
  • (2) 连续和单条指令执行转换开关,如8086汇编中的单步断点调试。
  • 符合停机开关,用于计算机的故障处理和容错率展示。

……

……

第六部分到此结束!敬请阅读第七部分🌹


612FFB2DEDE35B9C77545DB9ADF1C8BF