《计算机组成原理》第九章:控制单元【知识点总结】

本章结合指令周期的四个阶段(取出指令、间接寻址、执行指令、中断处理),着重分析控制单元为完成不同指令所发出的各种操作命令——这些命令(又称控制信号)控制计算机的所有部件有次序地完成相应的操作,已达到执行程序的目的——我们需要进一步理解指令周期、机器周期、时钟周期(节拍)和控制信号的关系,进一步体会控制单元在机器运行中所起到的核心作用,为下一章设计控制单元打好基础

1. 微操作命令的分析

在这里插入图片描述


1.1 取指周期

假设CPU内有四个寄存器:

  • MAR:与地址总线相连,存放欲访问的存储单元地址
  • MDR:与数据总线相连,存放欲写入存储器的信息或最近从存储器中读出的信息
  • PC:存放现行指令的地址,有计数功能
  • IR:存放现行指令

取指令的过程可以分为一下几个阶段:
① 现行指令地址PC送至存储器地址寄存器MAR,记作PC->MAR
向主存发送读命令,启动主存作读操作,记作1->R
② ③ ④ 将MAR(通过地址总线)所指的主存单元中的内容(指令)经数据总线读到MDR中去,记作M(MAR)->MDR
⑤ 将MDR的内容送至IR,就走MDR->IR
指令的操作码送至CU译码,记作OP(PC)->CU
⑥ 形成下一条指令的地址,记作(PC) + 1 -> PC
在这里插入图片描述


1.2 间址周期

该周期完成取操作数有效地址的任务,具体操作如下:
① 将指令的地址码部分(形式地址)IR送至存储器地址寄存器MAR,记作Ad(IR) -> MAR
② 向主存发送读命令,启动主存作读操作,记作1 -> R
③ 将MAR(通过地址总线)所指的主存单元中的内容(有效地址)经数据总线送至MDR内,记作M(MAR) -> MDR
④ 将有效地址送至指令寄存器的地址字段,记作MDR -> Ad(IR) (此操作在有些机器中省略)


1.3 执行周期

不同指令执行周期的微操作是不同的,下面分别讨论非访存指令、访存指令和转移类指令的微操作。

1. 非访存指令
这类指令在执行周期不访存主存。

  • 清除累加器指令CLA:该指令在执行阶段只完成清除累加器的操作,记作0 -> ACC。
  • 累加器取反指令COM:该指令在执行阶段只完成累加器内容取反,结果送累加器的操作,记作 A C C ‾ \overline{ACC} ACC -> ACC
  • 算术右移一位指令SHR:该指令在执行阶段只完成累加器内容算术右移一位的操作,记作L(ACC) -> R(ACC),ACC0 -> ACC0(ACC的符号位不变)
  • 循环左移一位指令CSL:该指令在执行阶段只完成累加器内容循环左移一位的操作
  • 停机指令STP:计算机中有一个运行标志触发器G,当G=1时,表示机器运行,当G=0时,表示停机。STP指令在执行阶段只需将运行标志触发器置0,记作0 -> G

2. 访存指令
该类指令在执行阶段都需要访问存储器,这里只考虑直接寻址的情况,不考虑什么间接寻址啥的。

  • 加法指令ADD X:该指令在执行阶段需要完成累加器ACC内容与对应于主存X地址单元的内容相加,结果送至累加器的操作(ACC + *X -> ACC),具体操作如下:
  • 将指令的地址码部分送至存储器地址寄存器,记作Ad(IR) -> MAR
  • 向主存发读命令,启动主存作读操作,记作1 -> R
  • 向MAR(通过地址总线)所指的主存单元中的内容(操作数)经数据总线送至MDR内,记作M(MAR) -> MDR
  • 给ALU发送加命令,将ACC的内容和MDR的内容相加,结果存于ACC,记作(ACC) + (MDR) -> ACC
    当然,也有的加法指令指定两个寄存器中的内容相加,如ADD AX, BX,该指令在执行阶段无须访存,只需完成(AX) + (BX) -> AX的操作
  • 存数指令STA X:该指令在执行阶段需将累加器ACC的内容存于主存的X地址单元中(ACC -> *X),具体操作如下:
  • 将指令的地址码部分送至存储器地址寄存器,记作Ad(IR) -> MAR
  • 向主存发写命令,启动主存作写操作,记作1 -> W
  • 将累加器内容送至MDR,记作ACC -> MDR
  • 将MDR的内容(通过数据总线)写入到MAR(通过地址总线)所指的主存单元中,记作MDR -> M(MAR)
  • 取数指令LDA X:该指令在执行阶段需将主存X地址单元的内容取至累加器ACC中(*X -> ACC),具体操作如下:
  • 将指令的地址码部分送至存储器地址寄存器,记作Ad(IR) -> MAR
  • 向主存发读命令,启动主存作读操作,记作1 -> R
  • 将MAR(通过地址总线)所指的主存单元中的内容(操作数)经数据总线读至MDR内,记作M(MAR) -> MDR
  • 将MDR的内容送至ACC,记作MDR -> ACC

3. 转移类指令
这类指令在执行阶段也不要访存。

  • 无条件转移指令JMP X:该指令在执行阶段完成将指令的地址码部分X送至PC的操作,记作Ad(IR) -> PC
  • 条件转移指令BAN X
    该指令根据上一条指令运行的结果决定下一条指令的地址,若结果为负(累加器最高为1,即A0 = 1),则指令的地址码送至PC,否则程序继续按原顺序执行。由于在取阶段已完成了(PC) + 1 -> PC,所以当累加器结果不为负时(即A0 = 0),就按取指阶段形成的PC执行,记作A0 * Ad(IR) + A   0   ‾ \overline{A~0~} A 0  * (PC) -> PC

由此可见,不同指令在执行阶段所完成的操作是不同的。如果将访存指令分为直接访存和间接访存两种,则上述三类指令(取指、间址、执行)的指令周期如下图所示:
在这里插入图片描述


1.4 中断周期

在执行周期结束时刻,CPU要查询是否有请求中断的事件发生,如果有则进入中断处理函数,在中断周期内,由中断隐指令自动完成保护断点、寻找中断服务程序入口地址及硬件关中断的操作。假设程序断点存至主存的0地址单元,且采用硬件向量法寻找入口地址,则在中断周期内需完成如下操作:
① 将特定地址0送至存储器地址寄存器MAR,记作0 -> MAR
② 向主存发写命令,启动存储器作写操作,就走1 -> W
③ 将PC的内容(程序断点的内容)送至MDR,记作PC -> MDR
④ 将MDR的内容(程序断点的内容)通过数据总线写入到MAR(通过地址总线)所指示单元(0地址单元)中,记作MDR -> M(MAR)
⑤ 将向量地址形成部件的输出送至PC,记作向量地址 -> PC,为下一条指令的取指准备
⑥ 关中断,将允许中断触发器清0,记作 0 -> EINT(该操作可直接由硬件线路完成)
如果程序断点存入堆栈,而且进栈操作是先修改栈指针,后存入数据,只需将上述① 改为(SP) - 1 -> SP,且 SP -> MAR
上述所有的操作都是在控制单元发出的控制信号(即微操作命令)控制下完成的



2. 控制单元的功能

2.1 控制单元的外特性

在这里插入图片描述

1. 输入信号

  • 时钟
    上述各种操作有以下两点应特别注意:
    ① 完成每个操作都需占用一定的时间
    ② 各个操作是有先后顺序的。例如,存储器读操作要用到MAR中的地址,故PC -> MAR应先于M(MAR) -> MDR
    为了使控制单元按一定的先后顺序、一定的节奏发出各个控制信号,控制单元必须受时钟控制,即每一个时钟脉冲使控制单元发送一个操作命令,或发送一组需要同时执行的操作命令。

  • 指令寄存器
    现行指令的操作码决定了不同指令在执行周期所需完成的不同操作,故指令的操作码字段是控制单元的输入信号,它与时钟配合可产生不同的控制信号。

  • 标志
    控制单元有时需依赖CPU当前所处的状态(如ALU操作的结果)产生控制信号,如BAN指令,控制单元要根据上条指令的结果是否为负而产生不同的控制信号。因此标志也是控制单元的输入信号。

  • 来自系统总线(控制总线)的控制信号
    例如,中断请求、DMA请求。

2. 输出信号

  • CPU内的控制信号
    主要用于CPU内的寄存器之间的传送和控制ALU实现不同的操作。

  • 送至系统总线(控制总线)的信号
    例如,命令主存或I/O读/写、中断响应等等。


2.2 控制信号举例

控制单元的主要功能就是能发出各种不同的控制信号。
下面以间接寻址的加法指令ADD @ X为例,进一步理解控制信号在完成一条指令的过程中所起的作用

1. 不采用CPU内部总线的方式
下图示意了没有采用CPU内部总线方式(CPU内部的部件采用分散连接的方式)的数据通路和控制信号的关系。图中没有画出每个寄存器的输入或输出控制门,但标出了控制这些门电路的控制信号Ci,考虑到从存储器取出的指令或有效地址都先送至MDR再送至IR,故这里省去了IR送至MAR的数据通路,凡是需要从IR送至MAR的操作均可由MDR送至MAR代替。
在这里插入图片描述

  • 取指周期
    ① 控制信号C0有效,打开PC送至MAR的控制门
    ② 控制信号C1有效,打开MAR送至地址总线的输出门
    ③ 通过控制总线向主存发读命令
    ④ C2有效,打开数据总线送至MDR的输入门
    ⑤ C3有效,打开MDR和IR之间的控制门,至此,指令已被送至IR
    ⑥ C4有效,打开指令操作码送至CU的输出门。CU在操作码和时钟的控制下,可产生各种控制信号
    ⑦ 使PC中的内容+1

  • 间址周期
    ① C5有效,打开MDR和MAR之间的控制门,将指令的形式地址送至MAR
    ② C1有效,打开MAR送至地址总线的输出门
    ③ 通过控制总线向主存发读命令
    ④ C2有效,打开数据总线送至MDR的输入门,至此,有效地址已被送至MDR
    ⑤ C3有效,打开MDR和IR之间的控制门,将有效地址送至IR的地址码字段

  • 执行周期
    ① C5有效,打开MDR和MAR之间的控制门,将有效地址送至MAR
    ② C1有效,打开MAR送往地址总线的输出门
    ③ 通过控制总线向主存发读命令
    ④ C2有效,打开数据总线送至MDR的输入门,至此,操作数已存入MDR
    ⑤ C6、C7同时有效,打开AC和MDR通往ALU的控制门
    ⑥ 通过CPU内部控制总线对ALU发ADD加控制信号,完成AC的内容和MDR的内容相加
    ⑦ C8有效,打开ALU通往AC的控制门,至此,将求和结果存入AC
    图中的C9、C10分别是控制PC的输出和输入的控制信号,C11、C12分别是控制AC的输出和输入的控制信号。

2. 采用CPU内部总线的方式
下图示意了采用CPU内部总线方式的数据通路和控制信号的关系,图中每个小圈处都有一个控制信号,它控制寄存器到总线或总线到寄存器之间的传送。
例如,IRi表示控制从内部总线到指令寄存器的输入控制门,PCo表示控制从程序计数器到内部总线的输出控制门 (下标为i表示输入Input,下标为o表示输出output)。
在这里插入图片描述
与不采用CPU内部总线方式的数据通路和控制信号相比,这种方式多了两个寄存器Y和Z,这是由于ALU是一个组合逻辑电路,在其运算过程中,必须保持两个输入端不变,其中一个输入可以从Y寄存器中获得,另一个输入可以从内部总线上获得。当CPU内有多个通用寄存器时,由于设置了寄存器Y,可实现任意两个寄存器之间的算逻运算。此外,ALU的输出不能直接与内部总线相连,因为其输出又会通过总线反馈到ALU的输入,影响运算的正确性,故用寄存器Z暂存运算结果,再根据需要送至指定的目标。
下面仍以完成间接寻址的加法指令ADD @ X为例,分析控制单元发出的控制信号

  • 取指周期
    ① PC0和MARi有效,完成PC经内部总线送至MAR的操作,即PC -> MAR
    ② 通过控制总线向主存发读命令,即1 -> R
    ③ 存储器通过数据总线将MAR所指单元的内容(指令)送至MDR
    ④ MDR0和IRi有效,将MDR的内容送至IR,即MDR -> IR,至此,指令送至IR,其操作码字段开始控制CU
    ⑤ 使PC内容+1

  • 间址周期
    ① MDRo和MARi有效,将指令的形式地址经内部总线送至MAR,即MDR -> MAR
    ② 通过控制总线向主存发读命令,即1 -> R
    ③ 存储器通过数据总线将MAR所指单元的内容(有效地址)送至MDR
    ④ MDRo和IRi有效,将MDR中的有效地址送至IR的地址码字段,即MDR -> Ad(IR)

  • 执行周期
    ① MDRo和MARi有效,将有效地址经内部总线送至MAR,即MDR -> MAR
    ② 通过控制总线向主存发读命令,即1 -> R
    ③ 存储器通过数据总线将MAR所指单元的内容(操作数)送至MDR
    ④ MDRo和Yi有效,将操作数送至Y,即MDR -> Y
    ⑤ ACo和ALUi有效,同时CU向ALU发ADD加控制信号,使AC的内容和Y的内容相加(Y的内容送至ALU不必通过总线),结果送寄存器Z,即(AC) + (Y) -> Z
    ⑥ Zo和ACi有效,将运算结果存入AC,即Z -> AC

现代计算机的CPU都集成在一个硅片内,在芯片内采用内部总线的方式可大大节省芯片内部寄存器之间的连线,使芯片内各部件布局更合理。

例题:
9.1 设CPU内部采用非总线结构,如下图所示:
在这里插入图片描述

(1) 写出取指周期的全部微操作。
(2) 写出取数指令LDA M、存数指令STA M、加法指令ADD M(M均为主存地址)在执行阶段所需的全部微操作。
(3) 当上述指令均为间接寻址时,写出执行这些指令所需的全部微操作。
(4) 写出无条件转移指令JMP Y和结果为零则转指令BAZ Y在执行阶段所需的全部微操作。

(1) 取指周期的全部微操作如下:
PC -> MAR 现行指令地址存入MAR
1 -> R 命令存储器读
M(MAR) -> MDR 现行指令地址从MAR存入MDR
MDR -> IR 现行指令地址从MDR存入IR
OP(IR) -> CU 指令的操作码IR放到CU寄存器进行译码
(PC) + 1 -> PC PC寄存器+1,形成下一条指令的地址

(2)
① 取数指令LDA M执行阶段所需的全部微操作如下:
Ad(IR) -> MAR 指令的地址码字段存入MAR
1 -> R 命令存储器读
M(MAR) -> MDR 操作数从存储器MAR存入MDR
MDR -> ACC 操作数从MDR放入到ACC中

② 存数指令STA M执行阶段所需的全部微操作如下:
Ad(IR) -> MAR 指令的地址码字段存入MAR
1 -> W 命令存储器写
ACC -> MDR 将欲写入的数据从ACC放到MDR
MDR -> M(MAR) 将MDR中的数据写到存储器中

③ 加法指令ADD M执行阶段所需的全部微操作如下:
Ad(IR) -> MAR 指令的地址码字段存入MAR
1 -> R 命令存储器读
M(MAR) -> MDR 将有效地址从MAR放到MDR
(ACC) + (MDR) -> ACC 将两数相加的结果送至ACC

(3) 当上述指令为间接寻址时,需3条增加间址周期的微操作指令:
Ad(IR) -> MAR 指令的地址码字段存入MAR
1 -> R 命令存储器读
M(MAR) -> MDR 将有效地址从存储器放到MDR

进入执行周期,3条指令的第一个微操作均为MDR -> MAR(将有效地址从MDR送至MAR),其余微操作指令不变。

(4) ① 无条件转移指令JMP Y执行阶段的微操作如下:
Ad(IR) -> PC 转移(目标)地址Y到PC寄存器中
② 结果为零则转指令BAZ Y执行阶段的微操作如下:
Z * Ad(IR)-> PC 当Z = 1时(Z为标志触发器,结果为0,Z=1),转移(目标)地址Y到PC寄存器中


2.3 多级时序系统

1. 机器周期
不同的指令执行时间是不一样的,比如取数、存储、加法等指令就要比转移指令要快,如果要定义机器周期的话,只能定义最长的指令完成时间,那么对于耗时较少的指令来说,就是一种浪费。
进一步分析发现,机器内的各种操作无非就是两类:对CPU内部的操作、对主存的操作,由于对CPU的操作比对主存的操作要快,所以机器周期通常定义为访存一次的时间,机器周期也可以叫做基准时间,又由于不论指令什么指令,都需要访存取出指令,因此在存储字长等于指令字长的前提下,取指周期也可以看作机器周期。

2. 时钟周期(节拍、状态)
在一个机器周期内可以完成若干个微操作,每个微操作都需要一定的时间,可用时钟信号来控制产生每一个微操作命令(如下图的Ci)
时钟信号可由机器主振电路发出的脉冲信号经正序后产生,时钟信号的频率即为CPU的主频。用时钟控制节拍发生器,就看产生节拍。每个节拍的宽度正好对应一个时钟周期。在每个节拍内机器可完成一个或几个需同时执行的操作,它是控制计算机操作的最小时间单位。
下图反映了机器周期、时钟周期和节拍的关系,一个机器周期内有四个节拍,T0、T1、T2、T3
在这里插入图片描述
3. 多级时序系统
在这里插入图片描述
上图反映了指令周期、机器周期、节拍(状态)和时钟周期的关系
一个指令周期可以包含多个机器周期,每个指令周期内的机器周期数可能相等也可能不等,
一个机器周期内也可以包含多个时钟周期(节拍),每个机器周期内的时钟周期数可能相等也可能不等。

机器周期、时钟周期(节拍、状态)组成了多级时序系统

一般来说,CPU的主频越快,机器的运行速度也越快。在机器周期所含时钟周期数相同的前提下两机平均指令执行速度之比等于两机主频之比,也就是主频越大,机器的执行速度越快
实际上机器的速度不仅与主频有关,还与机器周期中所含的时钟周期数以及指令周期中所含的及其周期数有关。同样主频的机器,由于机器周期所含时钟周期的不同,运行速度也不同。机器周期所含时钟周期数少的机器,速度更快。
在这里插入图片描述



2.4 控制方式

控制单元控制一条指令执行的过程实质上是依次执行一个确定的微操作序列的过程。由于不同指令所对应的微操作数及其复杂程度不同,因此每条指令和每条微操作所需的执行时间也不同。
通常将如何形成控制不同微操作序列所采用的时序控制方式称为CU的控制方式
常见的CU控制方式有同步控制、异步控制、联合控制和人工控制四种。

1. 同步控制方式
同步控制方式是指,任何一条指令或指令中任何一个微操作的执行都是事先确定的,并且是受同一基准时标的时序信号所控制的方式。
在这里插入图片描述
上图就是一种典型的同步控制方式,每个机器周期都有4个节拍。如果机器内的存储器存取周期不统一,那么只有把最长的存取周期作为机器周期,才能采用同步控制,否则取指令和取数时间不同,无法用统一的基准。又如有些不妨存的指令,执行周期的微操作较少,无须4个节拍。因此,为了提高CPU的效率,在同步控制中又有三种方案。

  • 采用定长的机器周期
    就是不论指令所对应的微操作序列有多长,也不管微操作的繁简,一律以最长的微操作序列和最繁的微操作作为标准,采取相同的的时钟周期(节拍)作为机器周期来运行各种不同的指令。
    缺点就是会造成时间的浪费,因为没有这么长这么繁琐的微操作执行完了,还会有等待的时间。

  • 采用不定长的机器周期
    顾名思义,这种方法就是每个机器周期内的时钟周期数(节拍数)可能不相等,这种方法就很好的使得不同的指令能够充分的利用时间。

  • 采用中央控制和局部控制相结合的方法
    这种方案将机器的大部分指令安排在统一的、较短的机器周期内完成,称为中央控制。
    将微操作复杂的指令中的某些操作采用局部控制的方式
    下图即为中央控制和局部控制的时序关系:
    在这里插入图片描述
    2. 异步控制方式
    异步控制方式不存在基准时标信号,没有固定的周期节拍和严格的时钟同步,执行每条指令和每个操作需要多少时间就占用多少时间。这种方式微操作的时序由专门的应答线路控制,即当CU发出执行某一微操作的控制信号后,等待执行部件完成了该操作后发回“回答”或者“结束”信号,再开始新的微操作,使CPU没有空闲状态,但因需要采用各种应答电路,故其结构甚至要比同步控制方式复杂。

3. 联合控制方式
同步控制和异步控制相结合就是联合控制方式,这种方式对各种不同指令的微操作实行大部分统一、小部分区别对待的办法。例如,对每条指令都有的取指令操作,采用同步方式控制,又如对于那些时间难以确定的微操作,如I/O操作,则异步控制,以执行部件送回的“回答”信号作为本次微操作的结束。

4. 人工控制方式
人工控制是为了调机和软件开发的需要,在机器面板或内部设置一些开关或按键,来达到人工控制的目的。

  • Reset复位键
  • 连续或单条执行转换开关
  • 符合停机开关
  • 20
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值