计算机组成原理-9-控制单元的功能

9. 控制单元的功能


9.1 微操作命令的分析

  控制单元 CU 是计算机系统的控制核心,控制单元CU的功能就是发出各种控制命令或微指令,控制整个计算机系统及CPU内部的各个部件,才能使整个计算机系统协调、稳定、连续运行。CU的主要功能之一就是完成指令的解释过程,包括取指、分析、执行、中断响应。“微操作命令”指的就是在指令解释过程中,由CU发出的一些指令,这些指令所要完成的动作和整条指令要完成的功能相比要小得多。

第七章已经介绍过,完成一条指令可以分为4个阶段:

  • 取指周期:将指令从给定的内存单元中取出。
  • 间址周期:若使用了“间址寻址”,就需要从形式地址指出的存储单元取出操作数的有效地址,并放到指令的地址码部分。
  • 执行周期:完成对操作数的读取和操作。
  • 中断周期:如果有中断请求,CPU需要进行响应(中断隐指令)。

  假设指令长度固定且指令字长=机器字长=存储字长。也就是说,通过一个访存周期就可以读取相应的指令或操作数地址,并放在CPU指定寄存器中。下面以指令的解释过程为例,分析在指令解释的四个阶段中,CU需要发出哪些控制命令或控制信号。

9.1.1 取指周期

取指周期的微操作:依次给出CU的控制信号。

  1. 【PC → MAR → 地址线】PC将指令地址传给存储器。
  2. 【1 → R】CU通过控制总线发出读命令。
  3. 【M(MAR) → MDR】存储器将读取到的指令发送给MDR。
  4. 【MDR → IR】MDR将指令发送给IR。
  5. 【OP(IR) → CU】IR将指令的操作码发送给CU,由CU译码来确认执行什么操作。
  6. 【(PC)+1 → PC】CU控制PC自增,指向下一条指令的地址。

注:图中没有ALU是因为不需要。

9.1.2 间址周期

间址周期的微操作:依次给出CU的控制信号。

  1. 【Ad(IR) → MAR】将指令的形式地址发送给存储器。
  2. 【1 → R】CU发出读命令,也就是将读控制线 R 置1。
  3. 【M(MDR) → MDR → Ad(IR)】存储器根据形式地址读出操作数的有效地址,传输给MDR。
  4. 【MDR → Ad(IR)】MDR将有效地址传到IR的地址码部分保存下来。

9.1.3 执行周期

执行周期的微操作:比较复杂,根据操作的不同,主要分为以下三种指令。

  1. 非访存指令:CU控制信号如下图。
  • 【CLA】清零ACC。CU的控制命令为【0 → ACC】。
  • 【COM】将ACC取反。CU的控制命令为【 ACC ‾ \overline{\text{ACC}} ACC → ACC】。
  • 【SHR】算术右移一位,最高位补符号位。CU的操作为【L(ACC) → R(ACC)】、【ACC0 → ACC0】实际上可以同时执行。
  • 【CSL】循环左移一位,将最高位放到最低为。CU的操作为【R(ACC) → L(ACC)】、【ACC0 → ACCn】实际上可以同时执行。
  • 【STP】停机指令,CU只需要将“停机标志”置零即可【0 → G】。
  1. 访存指令:CU控制信号如下图。
  • 【ADD X】加法指令,将X地址的内容和ACC相加,结果保存在ACC中。注意被加数已经在ACC中了,CU需要从存储器取加数到MDR,然后执行 (ACC)+(MDR) 并将结果保存在ACC即可。如下左图。
  • 【STA X】存数指令,将ACC内容保存到X地址中。于是CU先控制 IR 将 地址码X 发送给存储器,然后发送写命令,然后将 ACC 内容发送到MDR。最后存储器保存数据。
  • 【LDA X】取数指令,将X地址内容保存到ACC。和上述存数指令相反。
  1. 转移指令:CU控制信号如下图。
  • 【JMP X】无条件转移指令,直接跳转到地址X,并执行X所保存的指令。CU控制IR改变PC的值即可【Ad(IR) → PC】。
  • 【BAN X】条件转移指令,当上一次运算结果为负时(ACC最高位 ACC0=1),转移到地址X;若ACC0=0,则不进行跳转。CU的操作为【A0·Ad(IR)+ A ‾ \overline{\text{A}} A0(PC) → PC】。还有很多其他的条件转移指令。

上述三类指令的指令周期显然包含不同类型的阶段,如下图所示:

图9-1 三类指令的指令周期

9.1.4 中断周期

中断周期的微操作:主要完成三件事“保存断点”、“形成中断程序的入口地址”、“关中断”。有如下两种方法,CU控制信号如下图。

  1. 程序断点存入“0”地址:将 程序断点PC 送入到 0地址 中,形成入口地址(硬件向量法、软件查询法),最后关中断。
  2. 程序断点存入堆栈:由于栈顶是低地址,所以将 程序断点PC 存入到栈顶 (SP)-1 中,然后形成入口地址,最后关中断。

注:SP表示栈顶地址,M(MAR)表示存储器中的MAR。

9.2 控制单元的功能

  根据上述 CU 的微操作的分析,进一步分析 CU 功能。

9.2.1 控制单元的外特性

  CU 的输入输出信号为:

  • 输入信号
  1. 时钟:CU受时钟控制,一个时钟脉冲,发一个操作命令或一组需同时执行的操作命令。
  2. 指令寄存器:【OP(IR)→CU】将操作码发送给CU进行译码。
  3. 标志:CU受标志控制,是正确执行指令所必须的。假设要执行“跳转指令”,那上一条指令是否成功执行就决定了能否跳转。
  4. 外来信号:如 INTR中断请求、HRQ总线请求。
  • 输出信号
  1. 用于CPU内部的控制信号:控制CPU内部部件做相应的操作。
  • Ri → Rj:控制寄存器和寄存器之间进行数据传输。
  • (PC)+1 → PC:修改PC,以便于执行下一条指令。
  • 运算:控制ALU完成 +、-、与、或,等等一系列算逻运算。
  1. 送至控制总线:控制存储器、外部设备的操作。
  • MREQ ‾ \overline{\text{MREQ}} MREQ 访存控制信号。
  • IO ‾ / M \overline{\text{IO}}/\text{M} IO/M 访IO/存储器的控制信号,低电平访问IO、高电平访问存储器M。
  • RD ‾ \overline{\text{RD}} RD 存储器的读命令。
  • WR ‾ \overline{\text{WR}} WR 存储器的写命令。
  • INTA 中断响应信号,响应外部中断源请求。
  • HLDA 总线响应信号,响应外部设备对总线发出的总线请求。
图9-2 控制单元的外特性

9.2.2 控制信号举例

  本节以加法指令 【ADD @X】 为例(@是间接寻址的标志),演示 CU 是如何 按顺序控制 CPU 内部各部件完成工作的,注意在执行这条指令前,ACC已经保存了被加数:

  1. 不采用CPU内部总线的方式:CPU内部的各个部件采用分散连接的方式。
  • 取指周期:CU 控制 PC 将内容传给 MAR(C0),然后 MAR 传输给地址总线(C1)。CU发出读命令(控制信号)。从数据总线读出的数据存储到 MDR 中(C2),再依次传输给 IR(C3),将操作码部分传输给 CU 进行译码(C4),最后 PC+1。MDR的数据去向有多种,视情况由CU控制,若为取数指令直接送给ACC、若为加法指令直接给ALU进行计算(X寄存器)、若为间址寻址则送给 MAR 完成下一步取数。
  • 间址周期:CU译码后发现需要间址寻址,控制 MDR 将形式地址传输给 MAR(C5),然后送到地址总线(C1)。CU发出读命令(控制信号)。操作数的有效地址从数据总线传输给MDR(C2),再传输给 IR 的地址码部分(C3)。
  • 执行周期:CU 控制 MDR 将操作数有效地址发送给 MAR(C5),并传输给地址总线(C1),CU发出读命令。MDR 从数据总线读取操作数(C2),并由 CU 控制传出给运算器的 X 寄存器(C7)。ALU 根据 ACC 寄存器内容进行运算(C6),最后将结果保存在 ACC 寄存器中(C8)。

注:Ci表示各种控制电路,MDR主存数据寄存器、MAR主存地址寄存器、AC寄存器(ACC)、ALU运算器(默认自带X寄存器)、PC计数器、IR指令寄存器。ALU的控制信号控制其做出各种算逻运算。

  1. 采用CPU内部总线方式:为了简化CPU的电路设计,假设所有部件都使用总线连接。
  • 取指周期:CU 控制 PC 将指令地址传输到CPU内部总线(PCo),并控制 MAR 读取总线内容(MARi)并传输到地址总线上。CU发出读命令(控制信号)。CU 控制 MDR 从数据总线读取指令并传输到CPU内部总线(MDRo),再控制 IR 从CPU内部总线读取指令(IRi)。最后 IR 将操作码发送给 CU,CU 控制 PC+1。
  • 间址周期:CU 控制 MDR 将形式地址发送到CPU内部总线(MDRo),然后控制 MAR 读取(MARi)并传输到地址总线。CU发出读命令(控制信号)。CU 控制 MDR 从数据总线读取有效地址并传输到CPU内部总线(MDRo),再控制 IR 从CPU内部总线更新地址码部分(IRi)。
  • 执行周期:CU 控制 MDR 将操作数有效地址发送到CPU内部总线(MDRo),然后控制 MAR 读取(MDRi)并传输给地址总线。CU发出读命令(控制信号)。MDR 从数据总线读取操作数并发送到CPU内部总线(MDRo),CU 控制 Y 读取数据(Yi)并传输给 ALU,CU 再控制 AC 将内容发送给 ALU(ACo、ALUi),ALU 计算求和结果并将其保存到 Z 中,最后 CU 控制 Z 将结果保存到 AC 寄存器中(Zo、ACi)。

注:AC、Y、Z都是寄存器,并假设 AC 和 Y 保存两个操作数、Z 保存运算结果。其余部件同上。

9.2.3 多级时序系统

  前面我们将一个指令周期划分成几个阶段,也就是“取指周期”、“间址周期”、“执行周期”、“中断周期”等,实际上这些阶段可以称为“机器周期”。“机器周期”是所有指令执行过程中的一个“基准时间”,按照每条指令的执行步骤、每一步骤所需的时间确定。一般来说,这个“基准时间”是以完成最复杂的微操作的时间为准,但通常访存操作是耗时最长的,所以一般以访问一次存储器的时间为基准。此时若 指令字长=存储字长,就有 取指周期=机器周期。

  显然一个机器周期还可以分为若干个微操作,每个微操作需要一定的时间,于是便将一个机器周期分成若干个时间相等的时间段,这些时间段就是“时钟周期/节拍/状态”。时钟周期是控制计算机操作的最小单位时间,用时钟周期控制产生一个或几个(并行的)微操作命令。

如下图,给出了指令周期、机器周期、时钟周期的关系,不同的机器周期可以包含不同数量的时钟周期。机器周期、时钟周期便组成了多级时序系统

若干
若干
指令周期
机器周期
时钟周期/节拍/状态
(最小单位)
图9-3 多级时序系统

  在装机市场中,有种说法是“机器的主频 f f f 越快,机器的速度也越快”。但从学术的角度来看,前面这句话不严谨,应该有相应前提:机器周期所含时钟周期数相同,此时两机平均指令执行速度之比才等于两机主频之比 MIPS 1 MIPS 2 = f 1 f 2 \frac{\text{MIPS}_1}{\text{MIPS}_2}=\frac{f_1}{f_2} MIPS2MIPS1=f2f1。显然,机器速度不仅与主频有关,还与机器周期中所含时钟周期(主频的倒数)数、指令周期中所含的机器周期数、是否采用流水线技术有关。但 CPU 这种人类科技金字塔尖的东西很难盗版,咱们说的前提基本都是古老的技术,所以上面的说法没毛病(老九他没毛病!)。

9.2.4 控制方式

  “控制方式”指的是产生不同微操作命令序列所用的时序控制方式,也就是前面已经产生一个微操作、下一个微操作何时产生。主要有以下几种:

  • 同步控制方式:任一微操作均由统一基准时标的时序信号控制。
  1. 采用定长的机器周期:以最长的微操作序列和最复杂的微操作作为标准,所有机器周期内节拍数相同。但有些机器周期不需要这么长时间,就会造成时间浪费。
  2. 采用不定长的机器周期【常用】:机器周期内节拍数不等。如下中间图,执行周期可以适当延长或缩短。
  3. 中央控制和局部控制相结合:如下右图,对于“中央控制节拍”来说所有的机器周期都是4个节拍,那遇到一些很长的微操作,就使用“局部控制节拍”驱动完成操作,而不会造成“中央控制节拍”的计数变化。注意“中央控制节拍”和“局部控制节拍”是两个完全相同的节拍。
  • 异步控制方式:没有基准时标信号,也没有固定的周期节拍和严格的时钟同步,采用应答方式进行控制。
  • 联合控制方式:同步与异步相结合。大部分操作使用“同步控制”,少数很难确定时间的微操作就使用“异步控制”。
  • 人工控制方式:为了方便调机、调程序而设置的物理按键或软件的参数设置。
  1. Reset:让机器恢复到起始状态。
  2. 连续和单条指令执行转换开关:比如单步调试的“步过”、“步入”。
  3. 符合停机条件的开关:设置寄存器保存停机条件,也就是一个内存地址,若使用到该内存地址,则表明符合停机条件。常用于人为的引入故障条件(故障注入技术),测试计算机的容错能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虎慕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值