计组第九章 控制单元的功能
第九章 控制单元的功能
以指令的解释功能为例来讲控制单元CU的功能
9.1 微操作命令的分析
完成一条指令分 4 个工作周期:取指周期、间址周期、执行周期、中断周期
微操作就是比指令更小的命令,都是CU发出的,下面表格中的微操作也都是CU控制执行的
我们假设指令是定长的,通过一次存取指令就能将指令从存储器中取出送到CPU指定的寄存器当中
9.1.1. 取指周期
微指令 | 说明 |
---|---|
PC→MAR→地址线(→M) | PC将要取的指令地址送到存储器 实际上就应该给MAR,M是没有寄存器存储地址的,地址线暂存给MAR,M需要地址的时候再读取MAR的 |
1→R | CU将读操作送给存储器 |
M(MAR)→MDR | 存储器将取出的指令送到MDR M(MAR)的意思应该是主存利用MAR里面的地址 |
MDR→IR | MDR将指令传给指令寄存器 |
OP(IR)→CU | IR将指令的操作码部分传给CU |
(PC) + 1 → PC | CU控制的 |
一般CU要的就是操作码部分?IR只是将操作码给了CU,但是地址码仍然在IR中
9.1.2. 间址周期
上面说了,地址码部分仍然在IR中,因此间址周期是从IR开始的
微操作 | 说明 |
---|---|
AD(IR)→MAR | IR中的指令形式地址传给MAR再传给存储器 |
1→R | CU将读操作命令给存储器, |
M(MAR)→MDR | 存储器取出地址之后传给MDR |
MDR→AD(IR) | MDR将操作数的地址传给IR的地址码部分 |
9.1.3. 执行周期
执行周期比较复杂,指令不一样,功能也不一样
我们这里对指令进行分类
(1) 非访存指令
指令 | 说明 | 微操作 |
---|---|---|
CLA | clear ACC,清0ACC | 0→ACC |
COM | 取反 | ACC非→ACC |
SHR | 算术右移,左边补上的是原来的符号位 | L(ACC)→R(ACC),ACC0→ACC0,就是将原来的符号位写回到最高位 |
CSL | 循环左移 | R(ACC)→L(ACC),ACC0→ACCn |
STP | 停机指令 | 0→G,计算机有个停机标志,置0即停机 |
(2) 访存指令
指令 | 微操作 | |
---|---|---|
ADD X | 将地址X中的数取出与ACC中相加再存到ACC中 | |
Ad(IR) → MAR | 地址仍然是在IR中的 | |
1 → R | ||
M(MAR) → MDR | ||
(ACC) + (MDR) → ACC | ||
STA X | 存数指令 ACC中的数据存到X中 |
|
Ad(IR) → MAR | ||
1 → W | 将写的指令传给主存 | |
ACC → MDR | ||
MDR→M(MAR) | ||
LDA X | X中的数据加载到ACC中 | |
Ad(IR) → MAR | ||
1 → R | ||
M(MAR) → MDR | ||
MDR → ACC |
(3) 转移指令
指令 | 微操作 | 说明 |
---|---|---|
JMP X 无条件转 | Ad(IR) → PC | |
BAN X 条件转移 | ![]() |
条件转移有很多种,这里使用BAN X 负则转,如果上一条指令的结果是负数,就跳转到X地址的指令 上一条指令的运算结果是在ACC中的,判断正负就看最高位A0即可 |
三类指令的指令周期
指令类型 | 周期 | 说明 |
---|---|---|
非访存 | ![]() |
不访存,自然没有间址周期 |
直接访存 | ![]() |
|
间接访存 | ![]() |
|
转移 | ![]() |
|
间接转移 | ![]() |
(4) 中断周期
中断周期干了三件事:保存断点,形成中断服务程序入口地址,关中断
下面给出的微操作就是要完成这三个任务
任务 | 微操作 | 说明 |
---|---|---|
保存断点 | 0→MAR(程序断点存入"0"地址) (SP) - 1 → MAR(程序断点进栈) |
保存断点就是将断点送入到内存单元中,有两种方式 1. 程序断点存入"0"地址 2. 程序断点进栈 二者在操作上唯一的不同就是:断点保存的地址不同(前提是在这个模型机中,堆栈也是内存的一部分) |
1 → W | ||
PC → MDR | 程序断点原在PC中的 | |
MDR → M(MAR) | ||
形成中断服务程序入口地址 | 中断识别程序入口地址M→PC | 这是软件查询法 |
向量地址 → PC | 这是硬件查询法 | |
关中断 | 0 → EINT | EINT置0,就关中断了 |
9.2 控制单元的功能
简而言之,就是发出各种控制命令,控制整个CPU系统包括内部的各个部件 完整有序的进行
9.2.1. 控制单元的外特性
下面我们对输入信号和输出信号做分析
(1) 输入信号
输入信号 | 说明 |
---|---|
时钟 | CU受时钟控制,微操作命令在指定的时间点发出 一个时钟脉冲,发一个操作命令或一组需同时执行的操作命令 |
指令寄存器 | OP(IR)→CU,仅仅是将操作码送到CU,地址仍在IR,控制信号 与操作码有关 |
标志 | CU受标志控制,比如说条件转移指令所需要判断的条件就是标志 |
外来信号 | 来自CPU外部的信号也会进入CU,比如INTR中断请求,HRQ总线请求 |
(2) 输出信号
输出信号 | 指令举例 | 说明 |
---|---|---|
CPU内的各种控制信号 控制CPU内部的部件做相应的操作 |
Ri→Rj | 寄存器之间的数据传输 |
(PC)+1→PC | ||
ALU +-与 或 | CPU内部运算器执行的操作 乘法和除法也是一个个加法减法完成的,所以没有乘除法信号 |
|
送至控制总线的信号 控制IO 总选 存储体的信号 |
MREQ | 访问存储体控制信号,存储体那章讲过 Memory Request |
IO/M | 访IO/存储体的控制信号,低电平是IO,高电平是存储体 | |
RD | 存储器读命令 | |
WR | 存储器写命令 | |
INTA | 中断响应信号,CPU发出中断源的中断请求 | |
HLDA | 总线响应信号 |
9.2.2. 控制信号举例
(1) 不采用 CPU 内部总线的方式
也就是CPU内部的各个部件采用分散连接的方式,而不是总线连接
① CPU的内部结构
我们先来分析一下各个连接之间的说明
起点 | 终点 | 说明 |
---|---|---|
PC | MAR | 取指令,PC要将指令地址送到MAR(取数据的地址是保存在IR中的) |
MAR | M | MAR要将地址送给内存 |
M | MDR | 从内存中取出来的地址或者数据送到MDR中 |
MDR | IR | 取出来的地址从MDR送到IR |
AC | 如果是取数指令,取回来的数据送到ACC中 | |
ALU | 假如是加法指令,取回来的数据可能直接被送到ALU了 | |
MAR | 间址寻址,内存中取出来的是操作数的地址,还要再送给MAR去取数 事实上,在取值周期,IR和MDR中都有了指令,就包括间址周期中需要的地址,因此可以从MDR中拿地址,也可以从IR中拿地址,这里选择前者 |
|
由此可以看出为什么要MDR了,因为MDR保存的种类很多,因此先统一保存到MDR中,在CU的控制下再送给响应的部件 | ||
IR | CU | 指令寄存器IR的操作码部分要送给CU进行译码 |
时钟 | CU | 时钟控制CU发出控制信号 |
CU | 控制信号 | CU发出控制信号 |
控制信号 | ALU | 控制信号控制ALU操作 |
ALU | AC | ALU的计算结果保存在ACC中 |
② 以ADD @X为例展示微操作命令的分析
a. 取指周期
取指周期就是将指令送到CU,从PC开始,CU结束,最终PC还要+1
- 从C0到C4依次执行,并且这几个指令都是CU发出的
- 最终是送到CU的,CU进行译码也在取指阶段完成
b. 间址周期
-
间址周期就是取出操作数的地址,操作数的地址是X
-
取指周期后,指令在IR和MDR中都有了,其中X也在两个部件之中,这里我们假设以MDR为开始,将地址送到MAR
-
间址周期是将操作数的地址送到MAR以便执行周期取数,起点是MDR,终点是MAR -
执行次序是 C5 C1 C2 C3
-
间址周期是将操作数的地址送到IR的地址码中,以便执行周期使用,起点是MDR,终点是IR
注意,这里不能认为终点是MAR,MDR直接将地址传给MAR,应该先传给IR,执行周期再利用IR的地址码取数,当然也可以直接从MDR中取地址
c. 执行周期
项 | 说明 |
---|---|
目的 | 利用IR中的地址部分取出数据到ALU中与AC中的数据相加,结果保存在AC中 |
地址 | 在间址周期或者取址周期后,操作数的地址保存在MDR或者IR的地址码部分,用哪个都可以,这里假设使用MDR中的地址,也就是MDR直接将地址给MAR |
顺序 | C5 C1 C2 C7 C6(67顺序可颠倒) CU发出控制信号 C8 |
(2) 采用 CPU 内部总线方式
① CPU内部总线结构
说明:
ALU是组合电路,不具有保存功能,因此添加Y和ACC寄存器来保存操作数,Z来保存结果
② 以ADD @X为例展示微操作命令的分析
a. 取指周期
注意 PCo的意思是PC out输出
目的:将PC中保存地址存储的指令取出来送到CU进行译码
行为 | 微操作/说明 |
---|---|
PC→MAR→地址线 | PCo MARi |
CU发出读命令 1→R | 1送给了存储器的读寄存器 |
数据线→MDR | 取回来的指令送给MDR |
MDR→IR | MDRo IRi MDR将指令给IR |
OP(IR)→CU | IR将操作码送给CU进行译码 |
(PC) +1 → PC |
b. 间址周期
行为 | 微操作/说明 |
---|---|
MDR→MAR→地址线 | MDRo MARi,这里是将形式地址→MAR,也可以从IR中拿 |
CU发出读命令 1→R | 1送给了存储器的读寄存器 |
数据线→MDR | 取回来的指令送给MDR |
MDR→IR | MDRo IRi MDR将有效地址→IR |
c. 执行周期
行为 | 微操作/说明 |
---|---|
MDR→MAR→地址线 | MDRo MARi |
CU发出读命令 1→R | 1送给了存储器的读寄存器 |
数据线→MDR | 取回来的指令送给MDR |
MDR→Y | MDRo Yi MDR将操作数给Y |
AC→ALU | ACo ALUi |
(AC) + (Y) → Z | |
Z→ACC | 指令最终的结果要保存在ACC中的 |
9.2.3. 多级时序系统
前面将解释指令的周期分为取指,间址,执行,中断周期,实际上,这些周期都是机器周期
(1) 机器周期
① 机器周期的概念
所有指令执行过程中的一个基准时间
② 确定机器周期需考虑的因素
每条指令的执行 步骤,每一步骤 所需的 时间
将每个步骤划分到机器周期中
③ 基准时间的确定
通常情况下:
-
以完成 最复杂 指令功能的 微操作 的 时间 为准
-
实际上,最复杂的,或者是时间最长的是访存操作
取指,间址,执行阶段都需要访存
因此,以 访问一次存储器 的时间 为基准
-
若指令字长 = 存储字长,取指周期 = 机器周期
实际上,在一个机器周期中还要进行很多操作,比如取指周期要进行各种赋值,数据传送
这些操作也是有一定的先后顺序的,在机器周期的内部也要有多个时钟周期,时钟控制微操作的执行顺序
机器周期和时钟周期是不一样的!
(2) 时钟周期(节拍、状态)
- 一个机器周期内可完成若干个微操作(如果这些微操作是可以并行执行的)
- 每个微操作需一定的时间,有些微操作在一个时钟周期内完成,有些微操作可能花费多个时钟周期,比如对内存的访问
- 将一个机器周期分成若干个时间相等的 时间段(节拍、状态、时钟周期),由时钟周期控制在一个机器周期内部微操作的先后顺序
- 时钟周期是控制计算机操作的最小单位时间
- 用时钟周期控制产生一个或几个微操作命令(几个微操作命令一般是指这些微操作可以并行执行)
我们来看下面的示意图
我们利用CLK时钟来产生节拍信号
- 不同的节拍是有先后顺序的
- 节拍分为T0到T3,然后用不同的节拍控制部件操作
一个大的指令周期分为若干个机器周期,一个机器周期分为若干个节拍(时钟周期),节拍就是控制计算机操作的最小单位时间
- 比如指令周期分为 取址 间址 执行 中断周期
- 每个 机器周期 再分为节拍,控制微操作,比如PC的值赋给MAR等
指令周期,机器周期,节拍(时钟周期)就构成了计算机的 多级时序系统
(3) 多级时序系统
指令周期、机器周期、节拍(状态)组成多级时序系统
一个指令周期包含若干个机器周期、一个机器周期包含若干个时钟周期
指令周期和机器周期的划分都是不一定的,有的可能一样,有的不一样
CU就是根据节拍发出微操作的指令的,每个指令周期,机器周期是如何划分,每个节拍发出什么微操作指令,都是CU解析指令后自动进行的
(4) 机器速度与机器主频的关系
机器的 主频 f(时钟周期的倒数) 越快 机器的 速度也越快 吗?
这是有前提的:
-
两台机器都采用非流水方式
-
在指令周期所含机器周期相同
-
在机器周期所含时钟周期数 相同 的前提下
-
两机 平均指令执行速度之比 等于 两机主频之比
-
机器速度 不仅与 主频有关 ,还与机器周期中所含 时钟周期(主频的倒数)数 以及指令周期中所含 的 机器周期数有关
-
即使这两个一样,一台采用流水,一台采用非流水,结果也是不一样的
9.2.4. 控制方式
控制单元CU控制一条指令执行的过程,实质上是依次执行一个确定的微操作序列的过程。由于不同指令所对应的微操作数及其复杂程度不同,因此每条指令和每个微操作所需的执行时间也不岗。通常将如何形成控制不同微操作序列所采用的时序控制方式称作CU的控制方式。常见的控制方式有同步控制、异步控制、联合控制和人工控制四种。
简单来说,控制方式是指 产生不同微操作命令序列所用的时序控制方式
(1) 同步控制方式
这种方式使用的比较多
- 同步控制方式是指 任一微操作均由 统一基准时标 的时序信号控制
- 一定有一个统一的,定宽定距的时钟作为标准,每一个微操作都是在这个时钟的控制下,在指定的节拍产生
如果机器内的存储器其存取周期不统一,那么只有把最长的存取周期作为机器周期,才能采用同步控制,否则取指令和取数时间不同,无法用统一的基准。又比如有些不访存的指令,执行周期的微操作较少,无须4个节拍。因此,为了提高CPU 的效率,在同步控制中又有三种方案。
① 采用定长的机器周期
也就是说,每个机器周期含有相同数量的节拍数
- 以 最长 的微操作序列和 最复杂 的微操作作为 标准
- 可能会造成时间浪费
② 采用不定长的机器周期
这种方案每个机器周期内的节拍数可以不等,这种控制方式可解决微操作执行时间不统一的问题。
通常把大多数微操作安排在一个较短的机器周期内完成,而对某些复杂的微操作,采用延长机器周期或增加节拍的办法来解决
③ 采用中央控制和局部控制相结合的方法
在讲总线的时候已经讲到了
如果一条指令本身的执行时间就比较长,如何缩短呢?
可以采用中央控制与局部控制相结合的方式
图中可以看到,执行周期比较长,延长的部分用局部控制节拍
在设计局部控制线路时需注意两点:
-
其一,使局部控制的每一个节拍T*的宽度与中央控制的节拍宽度相同
-
其二,将局部控制节拍作为中央控制中机器节拍的延续,插入到中央控制的执行周期内,使机器以同样的节奏工作,保证了局部控制和中央控制的同步。
-
T*的多少可根据情况而定,对于乘法,当操作数位数固定后,T*的个数也就确定了。
而对于浮点运算的对阶操作,由于移位次数不是一个固定值,因此T的个数不能事先确定。
-
以乘法指令为例,第一个机器周期采用中央控制的的节拍控制取指令操作,接着仍用中央控制的T0、T1、T2,节拍去完成将操作数从存储器中取出并送至寄存器的操作,然后转局部控制,用局部控制节拍T*完成重复加和移位的操作。
不是很懂?每一个节拍T*的宽度与中央控制的节拍宽度相同,既然这样为啥不要中央控制呢?
(2) 异步控制方式
- 异步控制方式不存在基准时标信号,没有固定的周期节拍和严格的时钟同步,执行每条指令和每个操作需要多少时间就占用多少时间。
- 这种方式微操作的时序由专门的应答线路控制,即当CU发出执行某一微操作的控制信号后,等待执行部件完成了该操作后发回“回答”(或“结束"”)信号,再开始新的微操作,使 CPU 没有空闲状态
- 但因需要采用各种应答电路,故其结构比同步控制方式复杂。
(3) 联合控制方式
- 同步控制和异步控制相结合就是联合控制方式。
- 这种方式对各种不同指令的微操作实行大部分统一、小部分区别对待的办法。
- 例如,对每条指令都有的取指令操作,采用同步方式控制;
- 对那些时间难以确定的微操作,如lO操作,则采用异步控制,以执行部件送回的“回答”信号作为本次微操作的结束。
(4) 人工控制方式
人工控制是为了调机和软件开发的需要,在机器面板或内部设置--些开关或按键,来达到人工控制的目的。
-
Reset复位键
按下Reset键,使计算机处于初始状态。当机器出现死锁状态或无法继续运行时,可按此键。若在机器运行时按此键,将会破坏机器内某些状态而引起错误,因此要慎用。有些微机未设此键,当机器死锁时,可采用停电后再加电的办法重新启动计算机。
-
连续或单条执行转换开关
由于调机的需要,有时需观察执行完一条指令后的机器状态,有时又需要观察连续运行程序后的结果,设置连续或单条执行转换开关,能为用户提供这两种选择。
-
符合停机开关
有些计算机还配有符合停机开关,这组开关指示存储器的位置,当程序运行到与开关指示的地址相符时,机器便停止运行,称为符合停机。