本地资料控制器
SCHEDULE LOCAL29 个小节覆盖真题 20092025
关联考点控制器种类3控制器2微程序控制器2寄存器传送语言1做相关真题 · 8 道 →
做相关真题 · 8 道选中文字可高亮或加下划线
选中文字高亮 · 下划线

控制器

真题练习

本节内容较多,主要关注 两点

  1. 能够手写 寄存器传送语言 以及 指令执行各阶段的控制信号,明确每个时钟周期的数据来源、目的部件和控制信号。
  2. 控制器的种类和区别,看到概念需要能区分出来。

主要功能

控制器是计算机系统的指挥中心,控制器 的主要功能有:

  • 指令解码 : CPU 从存储器取出一个指令后,控制器负责 指令解码 这个指令,以确定要执行的操作和涉及的操作数。
  • 生成控制信号 : 基于 指令解码 的指令,控制器 生成控制信号,这些信号会驱动其他计算机部分(如算术逻辑单元、寄存器和存储器)按预期执行相应的操作。
  • 时序控制:按正确先后次序发出控制信号,确保指令所需的微操作在允许的时钟节拍中执行。

根据控制器产生微操作 控制信号 方式的不同,控制器可以分为 硬布线控制器微程序控制器

直观理解:控制器就像 CPU 的“指挥中心”:

  • 输入:控制器接收 机器指令 作为输入
  • 输出:它需要在大约每个“嘀嗒”(也就是每个 时钟周期)发出各种微命令,这些微命令就像是给 CPU 各个零件下达的最小指令(比如“让寄存器 A 把数据送出去”、“让算术单元执行加法”)。

组成

控制器由指令控制、时序控制和控制信号发生等部分协同组成

要理解控制器的组成,就要从其功能出发,大体来说,控制器的组成也可以分为 三个组件

  • 指令控制器 :负责取指和译码,并且形成下一条指令的地址。
  • 时序控制器 :产生计算机运行所需的各种 时序信号时序控制器 控制指令的执行节奏,确保各个部件协调工作。
  • 控制信号发生器 :根据 指令译码器 的输出,产生具体的 控制信号。这些 控制信号 用于控制计算机各个部件的微操作。

指令控制器

指令控制器根据 CS 与 IP 形成取指地址并把指令送入 IR

图中以传统 x86 风格的 CS:IP 表示当前取指地址:CS 是代码段相关寄存器,IP 是该段内的指令偏移。不同工作模式下 CS 的含义并不完全相同;在 408 的通用单处理器模型中,通常直接使用 PC 表示下一条指令地址,不应把 CS:IP 误当作所有 ISA 的必备结构或“进程代码段”的唯一标记。

获取当前指令地址后,取指通路经存储器接口从主存读取指令并放入指令寄存器。随后按指令长度更新 IP(或通用模型中的 PC),使其指向顺序下一条指令;分支、异常等指令会在相应阶段改写这一顺序地址。

时序控制器

时序控制器 的作用是为每条指令按时间顺序提供 控制信号。系统参考时钟可以来自石英晶体振荡器,处理器内部再通过锁相环等时钟电路产生核心所需时钟;核心频率、存储器频率和总线频率不必相同,其比例由具体实现规定。

晶体振荡器利用石英晶体的压电效应,当施加电压时,晶体在特定频率下可以产生稳定的振荡。 晶体振荡器产生精确的频率信号,作为电子设备的时钟源。这个时钟信号就像一个“节拍器”,控制着设备内部各个部件的协调运作。

参考时钟经时钟发生与倍频电路形成 CPU 内部时序节拍

时钟频率 ff 与时钟周期 TT 的关系为 T=1/fT=1/f。在教材的简化模型中,一个指令周期可划分为取指、间址、执行、中断等机器周期,每个机器周期又可包含多个时钟周期;具体划分以数据通路和题设为准。


假设当前要执行 MOV R1, [addr] 这条指令,其功能就是找到内存中 addr 地址的数据,并且将其传输到寄存器 R1 中,这条指令的执行包含以下几个步骤:

  1. 将地址传入 MAR 中。
  2. 存储器从 MAR 中读取地址,并且读取数据,存入 MDR。
  3. 从 MDR 中取出数据,通过 CPU 内的数据总线传输到寄存器 R1 中。

上述过程的执行需要保证严格的 时序关系,先后关系不可颠倒,否则会导致指令执行的出错。

通过这个简单的例子是为了说明这样一个原理:在 CPU 内部,一条指令的执行也会被拆分为若干的子过程,这些子过程需要满足严格的 时序关系,而这种 时序关系 就是由 时序控制器 进行控制的。

控制信号发生器

控制信号发生器综合指令译码、时序和状态反馈产生内外控制信号

控制信号发生器 负责接收 指令译码器 的结果,并且在每个 时钟周期 内产生控制信号

其中控制信号可以是 CPU 内的控制信号,通过 CPU 内总线传输至 CPU 内其他部件。也可以是 CPU 外的控制信号,发送至系统的控制总线,用于协调计算机其他设备与 CPU 的交互。

控制信号

控制信号是由 控制信号发生器 生成和发出的电信号,这些信号用于指挥 CPU 内部的各种操作。例如,控制信号可以指示算术逻辑单元(ALU)执行加法还是减法,或者指示寄存器进行读写操作;例如,还可控制主存读写和多路选择器的输入选择。

类型

其实控制信号的种类很多,但就目前阶段而言,会考察的可以被总结为 三类控制信号

  • 内存读写 控制信号:对内存或 I/O 设备进行读写,比如 MemRMemW 分别表示对内存进行读和写。
  • 寄存器选择 控制信号:选择特定寄存器参与传送。通常 Rout 表示把寄存器内容送到总线,Rin 表示从总线写入寄存器;若题目另有定义则按题设。
  • ALU 操作码 控制信号:选择算术逻辑单元(ALU)执行哪种运算,如加法、减法、与、或等,比如 ALUop = Add 表示让 ALU 执行加法操作。
控制信号分别控制内存读写、寄存器输入输出和 ALU 运算

寄存器传送语言

控制信号决定了计算机指令的执行顺序和数据流动。计算机内部组件根据控制信号执行相应操作,数据流动通常用 寄存器传送语言(Register Transfer Language, RTL)描述。

RTL 有多种表示方式,试题中会考察的是伪代码表示,这种表示方式常用于体系结构的教学。

这节先说明一下 RTL 伪代码表示的 常见符号 以及 基本语法结构,下一节会以一个实际的例子说明一下 RTL 和控制信号的编写。

RTL 用寄存器、内存单元、传送箭头和条件描述微操作

常见元件和符号

RTL 中用一些符号来表示 CPU 中的基本元件:

元件或符号 含义
R1, R2, ... 通用寄存器
PC 程序计数器
IR 指令寄存器
MAR 主存地址寄存器
MDR 主存数据寄存器
M[x] 主存中地址为 x 的数据单元
数据从右侧源部件传送到左侧目的部件
, 可在同一时钟周期并行完成的相容操作
if 条件执行

基本语法结构

RTL 的寄存器传送、并行操作、顺序操作和存储器访问语法

传送符号

表示寄存器传送,区别于一般的编程语言中的 = 右边为源寄存器, 左边为目标寄存器。

// 将 R2 和 R3 的加和结果送入寄存器 R1(即执行加法后写入 R1)。
R1 ← R2 + R3

补充:有的 RTL 伪代码用圆括号表示寄存器内容,如 R2 ← (R1);在这种约定下,它与 R2 ← R1 含义相同。具体采用哪种写法,应根据题目给出的符号定义判断。

并行操作

逗号 表示多个操作同时发生(在同一时钟周期)。

// 在一个时钟周期内执行两个操作:
// 1) 将 PC 的值 +4,使其指向下一条指令的地址。
// 2) 将当前指令的地址读取到
PC ← PC + 4, MAR ← PC

顺序操作

使用多行,每一行一个时钟周期:

// 在连续三个时钟周期分别执行
MAR ← PC
MDR ← M[MAR]
IR ← MDR

存储器访问

存储器访问需要用 MAR 指定地址,用 MDR 存储输入输出的数据。

// 读存储器:
MAR ← PC
MDR ← M[MAR]

// 写存储器:
MAR ← R1, MDR ← R2
M[MAR] ← MDR

指令的控制信号

指令的执行阶段包含取指、译码、执行、访存和写回阶段;在这五个阶段中,控制单元 会发出不同的 控制信号,以实现指令的执行。

以指令 ADD R0, (R1) 为例,说明取指、译码以及后续执行过程的 控制信号。这里约定该指令的语义为 R0 ← R0 + M[R1],并假设每条指令占一个编址单位;若题目规定定长 4 字节指令,则相应的 PC 增量应改为 4。

取指和译码阶段

单总线数据通路中取指、PC 自增和指令译码所需的控制信号

在该阶段中:PC 提供了当前需要读取指令的地址,从相应地址读取指令后,增加 PC 的值,使其指向下一条指令的地址,接着通过译码部件完成译码。

不同指令在取指和译码阶段的控制信号相同,该阶段主要包含如下表所示的 控制信号

时钟 RTL 功能 控制信号 解释
C1C_1 MAR ← PC PCout, MARin 从 PC 读取指令地址并送入 MAR
C2C_2 MDR ← M[MAR] MemR, MDRin 读取 MAR 指向的主存单元并装入 MDR
C3C_3 IR ← MDR MDRout, IRin 把指令送入 IR,供后续译码
C4C_4 MUXop ← PCIncr PCIncr 选择 PC 的增量常数 1 作为 ALU 输入
C5C_5 T2 ← PC + 1 PCout, Add, T2in ALU 计算下一条指令地址并暂存到 T2
C6C_6 PC ← T2 T2out, PCin 把下一条指令地址写回 PC
C7C_7 指令译码 由译码器完成 识别操作码、寻址方式和寄存器字段

执行、访存和写回阶段

ADD R0 逗号 R1 间接寻址在执行、访存和写回阶段的数据流

通过译码得到的控制信号,可以控制指令的执行和写回,对于 ADD R0, (R1) 为例,该阶段包含如下 控制信号

时钟 RTL 功能 控制信号 解释
C8C_8 MAR ← R1 R1out, MARin 把 R1 中的有效地址送入 MAR
C9C_9 MDR ← M[MAR] MemR, MDRin 读取操作数并装入 MDR
C10C_{10} T1 ← R0 R0out, T1in 把目的寄存器原值暂存到 T1
C11C_{11} T2 ← MDR + T1 MDRout, T1out, Add, T2in ALU 相加并把结果暂存到 T2
C12C_{12} R0 ← T2 T2out, R0in 把计算结果写回 R0

控制器种类

控制器主要分为 硬布线控制器微程序控制器。硬布线控制器用固定逻辑网络直接生成控制信号;微程序控制器则根据机器指令的操作码找到控制存储器中的微程序,再由微指令产生控制信号。微程序存放在控制存储器中,但其执行仍由硬件完成,不能简单说成“软件输出控制信号”。

硬布线控制器

硬布线控制器(Hardwired Controller)是一种通过物理连接逻辑门、触发器、译码器等硬件电路元件来生成控制信号的控制器。它本质上是一个有限状态机(Finite State Machine, FSM),其控制逻辑通过电路的实际布线来固定实现。

结构

硬布线控制器综合指令译码、时序节拍和状态反馈直接产生微命令

上图展示了硬布线控制器的基本结构,简单来说,其逻辑结构可以概括为:

输入端:接收指令信息(通过译码器转换),时序信息(时钟脉冲产生的节拍),以及来自执行部件的状态反馈信息(如运算结果的标志位)。

核心部分:一个由大量组合逻辑门电路(与门、或门、非门等)构成的网络。这个网络是预先设计好的,其内部连接是固定的。

输出端:根据当前的输入信号组合,通过这个固定的逻辑网络,直接生成一系列 微操作控制信号

简单来说,它就像一个 复杂的“查表器”,不过这个“表”是用硬件电路固化下来的。当特定的输入信号组合出现时,就立即产生对应的输出 控制信号

特点
  • 硬件实现:控制逻辑由门电路、触发器和译码网络等固定硬件实现,而不是由控制存储器中的微程序实现。
  • 固定功能:一旦设计和制造完成,其功能就基本固定。如果需要修改 控制逻辑,通常需要物理地改变电路结构,例如重新布线、更换芯片等。
  • 高速性:由于控制信号是通过组合逻辑电路直接生成的,没有额外的指令解释和软件开销,因此硬布线控制器通常具有非常高的执行速度。信号生成延迟主要取决于门电路的数量和传播延迟。
  • 设计复杂性:对于复杂的控制逻辑,硬布线控制器可能会变得非常复杂,难以设计和验证。

微程序控制器

微程序控制器(Microprogrammed Controller)是一种与硬布线控制器相对的 CPU 控制单元设计方法。它不直接通过组合逻辑电路生成控制信号,而是将复杂的 控制逻辑 存储在一种特殊的存储器 —— 控制存储器(Control Memory, CM) 中。

微程序控制器的 核心思想 是用“程序”来控制“程序”的执行。CPU 的每一条机器指令,都被分解成一系列更小的、更基本的微操作(Micro‑operation)。这些微操作的序列,构成了该机器指令的微程序(Microprogram)。

结构

微程序控制器由微地址形成部件、微地址寄存器、控制存储器和微指令寄存器组成

上图给出了一个 微程序控制器 的基本结构,其中包含以下组件:

  1. 指令寄存器(IR):接收并存储从主存储器中取出的机器指令。指令通常包含操作码(OP)和其他信息。
  2. 起始和转移地址形成部件:这是微程序控制器的大脑。
    • 根据指令的操作码,生成该机器指令对应微程序的起始地址。
    • 根据当前微指令的“下地址”信息和外部标志信号,计算出下一条微指令的地址。
    • 它计算出的微指令地址被送入 微程序计数器
  3. 微程序计数器 (µPC) :接收 “起始和转移地址形成部件” 产生的微指令地址,并将其保存。它类似于 CPU 的程序计数器,但它指向的是控制存储器中的 微指令地址
  4. 控制存储器 (Control Storage) :这是微程序控制器的核心存储单元。
    • 输入:接收来自 µPC 的微指令地址。
    • 功能:根据 µPC 提供的地址,从中读取出对应的微指令。
    • 输出:读取到的微指令被送入 微指令寄存器(µIR)
  5. 微指令寄存器 (µIR) :用于存放从 控制存储器 中读出的当前正在执行的微指令。一条微指令通常包含两部分:
    • 微命令(Microcommand)字段: 这是 微程序控制器 的最终输出,直接控制CPU内部各部件的微操作(例如,使能寄存器、控制ALU操作、控制总线传输等)。图中标示为“微命令”并有多个向外的箭头。
    • 下地址字段(Next Address): 这个字段指示了下一条微指令的地址生成方式或直接给出下一条微指令的相对/绝对地址。这个“下地址”信息被送回“起始和转移地址形成部件”,用于计算下一条微指令的地址。
微程序控制器根据机器指令操作码进入对应微程序并逐条执行微指令

微程序控制器的工作流程

  1. 指令译码:机器指令的操作码被译码,得到该指令对应微程序的起始地址。
  2. 地址寻址:微地址寄存器(µPC)根据这个起始地址,从控制存储器中取出微指令。
  3. 微指令执行:取出的微指令被送入微指令寄存器(µIR)。微指令包含两部分:
    • 微命令:直接控制 CPU 各部件的微操作。
    • 下地址:指示下一条微指令的地址。
  4. 循环:根据下地址信息(并结合 CPU 状态),计算出下一条微指令的地址,送回 µPC,重复以上过程,直到完成当前机器指令的所有微操作。

微指令编码方式

微指令编码方式是指如何组织微指令中各个字段,以便有效地表示和控制 CPU 中的各种微操作。不同的编码方式在灵活性、控制速度、微指令长度等方面有不同的权衡。

主要有以下三种微指令编码方式:

  1. 直接编码方式(Direct Control Microprogramming),典型地属于水平型微指令
  2. 字段直接编码方式(Field Decoding Microprogramming),把互斥微命令分组编码,比直接编码更接近垂直型设计
  3. 混合编码方式(Hybrid Microprogramming)
直接编码方式
直接编码中每一控制位直接对应一条微命令

直接编码方式 中,微指令的微命令字段中的 每一位 都直接对应并控制 CPU 中的 一个特定微命令 或硬件操作。当某一位的值为 ‘1’ 时,对应的微命令被激活;当为 ‘0’ 时,则不激活。这种方式的特点是无需译码器,微指令的输出可以直接驱动控制线。

举个实际例子,假设我们有一个简单的 CPU,其中包含控制寄存器 A 加载、寄存器 B 加载、ALU 加法操作、ALU 减法操作、总线选择等微命令。在直接编码方式下,一条微指令的微命令字段可能长这样:

D7 D6 D5 D4 D3 D2 D1 D0
含义 RA_load RB_load ALU_ADD ALU_SUB BUS_A BUS_B

如果一条微指令的这个字段是 1 1 1 0 1 0 0 0,则表示同时执行:将数据加载到寄存器 A (RA_load)、将数据加载到寄存器 B (RB_load)、执行 ALU 加法 (ALU_ADD)、以及选择总线 A (BUS_A)

直接编码方式的 特点 如下:

  • 高并行性:一条微指令可以同时激活多个互不冲突的微命令,实现高度并行的微操作。
  • 高速性:由于无需经过译码,控制信号生成路径最短,执行速度最快。
  • 微指令长度长:随着需要控制的微命令数量增加,微指令的位数会线性增长,导致控制存储器容量需求大。
  • 设计复杂:设计者需要精确控制每一个独立的控制位,对微程序编写者要求较高。
字段直接编码方式
字段直接编码把互斥微命令分组并通过各字段译码产生控制信号

字段直接编码方式 将微指令的微命令字段逻辑地 划分为若干个独立的组(或称字段)。每个字段内部 包含 一组互斥的微命令(即在同一时刻,该字段内只能激活一个微命令)。不同字段之间 则包含 相容 的微命令(可以同时激活)。每个字段本身被编码为一个值,这个值经过译码器后,才能激活该字段内对应的具体微命令。

继续上面的例子,在字段直接编码方式下,微指令的微命令字段可能被划分为多个字段,例如:

字段 F1(寄存器操作) F2(ALU 操作) F3(总线选择)
位数 2 位 2 位 1 位
编码 0 00:无操作 00:无操作 0:无操作
编码 1 01RA_load 01ALU_ADD 1BUS_A
编码 2 10RB_load 10ALU_SUB

若一个字段包含 mm 条互斥微命令,并需要额外表示“不操作”,则该字段至少需要:

log2(m+1)\left\lceil\log_2(m+1)\right\rceil

位。若题目规定某个全零编码可以复用或不需要空操作编码,则按题设调整。

如果一条微指令的这个字段是 01 | 01 | 1,则表示:

  • F1 编码为 01,经过译码器后激活 RA_load 微命令。
  • F2 编码为 01,经过译码器后激活 ALU_ADD 微命令。
  • F3 编码为 1,经过译码器后激活 BUS_A 微命令。

在这里,RA_loadRB_load 是互斥的,ALU_ADDALU_SUB 是互斥的,但 RA_loadALU_ADD 可以并行。

字段直接编码方式的特点如下:

  • 微指令长度短:通过字段内部编码共享位,大大减少了微指令的位数,从而节省控制存储器空间。
  • 设计相对简单:微程序设计者只需选择字段中的某个编码值,无需关心具体的单个控制位。
  • 并行性受限:同一字段内的微命令不能并行执行,因为它们是互斥的。不同字段间的微命令可以并行。
  • 控制速度稍慢:由于需要经过译码器才能生成实际控制信号,会引入额外的延迟。
混合编码方式
混合编码同时保留直接控制位和需要译码的控制字段

混合编码方式 是直接编码方式和字段直接编码方式的结合,旨在综合两者的优点。它将微指令的 微命令字段划分为若干部分

  • 一部分字段采用 直接编码方式:用于控制那些经常同时发生、对时序要求高且彼此不冲突的关键微命令。这部分保持了高并行度和快速响应。
  • 另一部分字段采用 字段直接编码方式:用于控制那些互斥或并行性要求不那么高的微命令,以有效缩短微指令的整体长度。

通过这种混合设计,可以在保证较高并行度的同时,有效降低对 控制存储器 容量的需求。

特点

相比于硬布线控制器,微程序控制器特点如下:

  • 灵活性:由于控制逻辑是存储在存储器中的,所以更改控制逻辑只需要更改存储的微指令,而无需更改硬件。
  • 简化设计:对于复杂的控制逻辑,使用微指令可能会简化设计和验证过程。
  • 易于修改和扩展:添加新的指令或修改现有的指令相对容易。
  • 速度较慢:相比硬布线控制器,微程序控制器需要额外的存储器访问(读取微指令)和地址计算(形成下一微地址)时间。这使得它的执行速度相对较慢。

指令、微指令、微命令

在计算机的 CPU 中,要完成一个复杂的任务,需要层层分解为更基本、更具体的动作。指令、微指令和微命令正体现了这种自顶向下的控制层次结构。

  • 指令:程序员编写的高级语言程序经过编译、汇编后,最终形成能被 CPU 识别和执行的机器指令;一条机器指令规定一个完整的机器操作。
  • 微指令:它是 微程序控制器 中的一个控制字,存储在 控制存储器 中。一条机器指令的执行过程被分解为若干微指令周期,每条微指令描述该周期可并行发出的微命令以及下一微地址信息。
  • 微命令:计算机中最基本的、不可再分的、由硬件电路直接完成的操作。

回顾一下微程序控制器的结构:对于控制器来说,输入是机器指令,输出是每个时钟周期所需的微命令。这种控制的实现机制基于控制存储器(Control Memory,CM),其中存储着预先定义好的微指令序列。

所以一个指令对应一个微程序,一个微程序中包含多个微指令,每个微指令对应一系列微命令。下图展现了三者的层次关系:

一条机器指令对应一个微程序,微程序由多条微指令组成而微指令发出多条相容微命令

在上文的指令的控制信号部分,我们详细阐述了指令 ADD R0, (R1) 所对应的微操作序列。为了进一步理解 指令微指令微命令 三者之间的区别与联系,下表沿用同一组时钟编号,列出各阶段的微指令和微命令。

读表边界:这里把 RTL 时钟节拍与微指令按一一对应的方式简化展示。真实微程序控制器中,取指微程序、操作码到入口地址的映射以及一条微指令能并行发出的微命令,都取决于控制存储器格式;因此“指令译码”不一定单独占一条微指令。

时钟 功能 对应的微指令(简化) 包含的微命令
C1C_1 MAR ← PC 微指令 A PCout, MARin
C2C_2 MDR ← M[MAR] 微指令 B MemR, MDRin
C3C_3 IR ← MDR 微指令 C MDRout, IRin
C4C_4 MUXop ← PCIncr 微指令 D PCIncr
C5C_5 T2 ← PC + 1 微指令 E PCout, Add, T2in
C6C_6 PC ← T2 微指令 F T2out, PCin
C7C_7 指令译码 入口形成(示意) 识别操作码并形成微程序入口
C8C_8 MAR ← R1 微指令 H R1out, MARin
C9C_9 MDR ← M[MAR] 微指令 I MemR, MDRin
C10C_{10} T1 ← R0 微指令 J R0out, T1in
C11C_{11} T2 ← MDR + T1 微指令 K MDRout, T1out, Add, T2in
C12C_{12} R0 ← T2 微指令 L T2out, R0in
执行轨迹

ADD R0, (R1) 的十二个控制节拍

逐拍查看取指、PC 自增、译码、间接取数、运算和写回所发出的微命令。

01

C1:MAR ← PC发出 PCout、MARin,把 PC 中的指令地址送入 MAR;其他寄存器保持不变。

微操作并行性与控制方式的选择

寄存器传送语言描述的是一个时钟节拍内希望发生的数据流,控制信号则是让这些数据流真实发生的开关。两项微操作只有在数据通路资源不冲突、结果之间没有先后依赖时才能并行。例如单总线结构中,两个不同寄存器不能在同一拍同时向同一条内部总线输出;同一寄存器也不能在同一拍既装入旧值又作为新值的目标。若有多总线、独立加法器或不同的输入输出端口,可并行的微操作才会增多。

读主存常不能简单当作一个零时间赋值。典型顺序是先把地址送入 MAR、发出读控制,等待存储器准备好后数据进入 MDR,最后再送入目标寄存器。存储器速度较慢时,控制器可能插入等待节拍或等待 READY 一类的响应信号;这也是“微操作序列”与真实物理时序需要区分的原因。

硬布线与微程序如何生成下一步

硬布线控制器用时序状态、操作码和条件信号的组合逻辑直接产生控制信号,路径短、速度高,但增加或修改复杂指令时需要改动控制逻辑。微程序控制器把常用控制信号组合编码为微指令,存放在控制存储器中;微地址形成部件决定下一条微指令地址,可以顺序加一、按操作码映射到某个入口,也可以按条件分支到不同微地址。

微程序的“可修改”只意味着在允许的实现中可以更新控制存储内容,并不表示用户程序在运行时任意改变 ISA。水平型微指令字段更直接、可并发发出较多微命令,但字长较长;垂直型微指令通过编码节省控制存储,却需要译码并可能限制同拍并行性。判断题若问“哪种更快、更容易扩展”,应说明是控制信号生成路径与修改代价的取舍,而不是绝对地说某一种在所有实现里更优。

一条机器指令往往经历公共的取指微程序、按操作码进入的执行微程序和可能的中断检查。机器指令、微程序、微指令、微命令的层级关系不能反过来:一条微指令可在同拍发出多条相容微命令,而一条机器指令通常需要多条微指令完成。

写控制信号序列时的检查表

把一条指令拆成 RTL 后,可依次检查四件事:本拍哪些寄存器或部件提供数据;数据经过哪条总线、ALU 或移位器;哪个目标寄存器在时钟边沿锁存结果;是否同时触发了主存或 I/O 的读写控制。若答案写出“R1 送到 R2”,还应能指出 R1 的输出使能和 R2 的写入使能;若经过 ALU,还要说明两路输入、所选运算以及结果写到何处。

微操作之间常有真实数据依赖。例如 MAR 尚未获得地址时不能发起正确的读主存,MDR 尚未装入数据时 IR 不能得到新指令;这些动作必须分拍或由硬件提供明确的组合路径。反之,互不争用资源的寄存器传送可以在一拍中并行,控制器的价值正是安排这种安全并行,缩短一条指令所需的节拍数。

控制信号的名称和高低电平有效性由具体数据通路定义,不能仅凭诸如“PCout”“MARin”的助记符猜测所有体系结构都相同。考试图中若给出单总线、多总线或共享 ALU,先依据图的资源限制排除不可能同拍发生的操作,再写出剩余的时序,通常比从指令名称直接背模板更可靠。