一、微操作
首先我们要知道:
一条指令执行时包括几个机器周期例如:取值,间址,执行,中断
机器周期 | 取值 | 间址 | 执行 | 中断 |
标识符 | FE | IND | EX | INT |
而一个机器周期又由若干个时钟周期组成,时钟周期是计算机中最小的时间单位。
微操作(Micro-operation)是计算机组成原理中的一个重要概念。它指的是在计算机的中央处理单元(CPU)内部进行的一种基本操作,是指令执行过程中最小的、不可再分的操作步骤。
在CPU中,执行一条机器指令通常需要多个步骤,例如取指令、解码指令、执行指令、访问存储器和写回结果等。这些步骤中的每一个具体操作,诸如将数据从一个寄存器传送到另一个寄存器,或者将数据从寄存器传送到数据总线,这些操作都称为微操作。
微操作通常由控制单元生成,并通过控制信号来控制各个部件的行为。例如,在执行加法操作时,可能包括以下微操作:
- 从寄存器中读取操作数到ALU(算术逻辑单元)。
- 通过ALU执行加法操作。
- 将结果存储回目标寄存器。
这些微操作通常在一个时钟周期内完成,而一条完整的机器指令可能需要多个时钟周期才能完成,因为它包含多个微操作。微操作的执行是实现复杂指令功能的基础,因此在设计和理解计算机体系结构时,理解微操作的概念非常重要。
每一个微操作都对应一个微指令,只要CPU中的控制器CU能在接收到被译码后的指令时于正确的条件,正确的时间,正确的阶段发出对应的微指令就完成了对计算机内部计算的控制。
在CU内部,例如可以将多种条件连接上与门 以至于CU可以发出对应的微指令。
将这些逻辑电路实现并集成在CU内部。
而这个逻辑电路的设计就是“硬布线控制器的设计”。
二、设计步骤
假设采用同步控制方式(定长机器周期)一个机器周期内安排3个节拍。
1.分析每个阶段的微操作序列
(取值、间址、执行、中断四个阶段)
确定哪些指令在什么阶段、在什么条件下会使用到的微操作
取指:
PC→MAR |
1→R |
M(MAR)→MDR |
MDR →IR |
OP(IR)→ID |
(PC)+1→PC |
间址:
Ad(IR)→MAR |
1→R |
M(MAR)→MDR |
MDR → Ad(IR) |
执行:
CLA | 0→AC | clear ACC指令 |
ACC清零 | ||
LDA X | Ad (IR)→ MAR | 取数指令,把X所指内容,取到ACC |
1→R | ||
M(MAR)→MDR | ||
MDR→AC | ||
JMP X | Ad (IR)→PC | 无条件转移 |
BAN X | A0·Ad (IR )+A0·(PC)→PC | Branch ACC Negative 条件转移,当AC为负时转移 |
中断:
步骤 | 微指令 | 描述 |
---|---|---|
1. 保存当前程序计数器(PC)内容 | MAR ← PC | 将当前的程序计数器(PC)内容传送到存储地址寄存器(MAR)。 |
M[SP] ← MAR | 将MAR中的内容(即PC值)存储到堆栈指针(SP)指向的内存地址。 | |
SP ← SP - 1 | 将堆栈指针减1,指向下一个空闲堆栈位置。 | |
2. 保存CPU状态(例如标志寄存器) | MAR ← FLAGS | 将当前标志寄存器(FLAGS)内容传送到MAR。 |
M[SP] ← MAR | 将FLAGS中的内容存储到堆栈中。 | |
SP ← SP - 1 | 堆栈指针减1,指向下一个空闲堆栈位置。 | |
3. 加载中断向量地址 | PC ← Interrupt_Vector_Address | 将中断向量地址加载到程序计数器(PC)中,这样CPU将跳转到对应的中断服务程序。 |
4. 转到中断服务程序的入口地址 | MAR ← PC | 将新的PC内容传送到MAR,以便从内存中读取中断服务程序的第一条指令。 |
IR ← M[MAR] | 将中断服务程序的第一条指令从内存读取到指令寄存器(IR)。 | |
PC ← PC + 1 | 程序计数器递增,准备执行下一条指令。 | |
5. 执行中断服务程序 | - | CPU现在开始按照从中断向量表中得到的地址来执行中断服务程序。 |
6. 恢复原来的程序状态 | SP ← SP + 1 | 增加堆栈指针以指向之前存储的标志寄存器的内容。 |
FLAGS ← M[SP] | 将标志寄存器的值恢复到FLAGS寄存器中。 | |
SP ← SP + 1 | 增加堆栈指针以指向之前存储的PC内容。 | |
PC ← M[SP] | 恢复程序计数器的值,使得中断返回后继续执行中断前的程序。 |
2.选择CPU的控制方式
采用定长机器周期还是不定长机器周期?每个机器周期安排几个节拍?
该例子以定长机器周期,每个周期三个节拍。
3.安排微操作时序
如何用3个节拍完成整个机器周期内的所有微操作?
原则一 | 微操作的 先后顺序不得 随意 更改 |
原则二 | 被控对象不同 的微操作尽量安排在 一个节拍内完成 |
原则三 | 占用 时间较短 的微操作尽量安排在一个节拍内完成并允许有先后顺序 |
取值周期:
节拍 | 序列 | 原因 | |
T0 | (1)PC→MAR | ||
(2)1→R | 存储器空闲即可 | ||
T1 | (3)M( MAR)→MDR | 在(1)之后 | M(MAR)→MDR从主存取数据,用时较长,因此必须一个时钟周期才能保证微操作的完成 |
(6)(PC)+1→PC | 在(1)之后 | ||
T2 | (4)MDR→IR | 在(3)之后 | MDR →IR 是CPU内部寄存器的数据传送,速度很快,因此在一个时钟周期内可以紧接着完成 OP(IR)→ID。也就是可以一次同时发出两个微命令。 两个微操作占用时间较短,根据原则三安排在一个节拍 |
(5)OP(IR)→ID | 在(4)之后 |
间指周期:
T0 | (1)Ad(IR)→MAR |
(2)1→R | |
T1 | (3) M(MAR)→MDR |
T2 | (4) MDR →Ad(IR) |
执行周期:
(1)非访存指令
(2)访存指令
4.电路设计
确定每个微操作命令的逻辑表达式,并用电路实现。
(1)列出操作时间表
FE 取指 | T₀ | PC → MAR | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
1 → R | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
T₁ | M[MAR] → MDR | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
(PC) + 1 → PC | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
T₂ | MDR → IR | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
OP(IR) → ID | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Ⅰ | 1 → IND | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Ī | 1 → EX | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
工作周期标记 | 节拍 | 状态条件 | 微操作命令信号 | CLA | COM | SHR | CSL | STP | ADD | STA | LDA | JMP | BAN |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
IND 间址 | T₀ | Ad(IR) → MAR | 1 | 1 | 1 | 1 | 1 | ||||||
1 → R | 1 | 1 | 1 | 1 | 1 | ||||||||
T₁ | M(MAR) → MDR | 1 | 1 | 1 | 1 | 1 | |||||||
T₂ | IND | MDR → Ad(IR) | 1 | 1 | 1 | 1 | 1 | ||||||
1 → EX | 1 | 1 | 1 | 1 | 1 |
工作周期标记 | 节拍 | 状态条件 | 微操作命令信号 | CLA | COM | ADD | STA | LDA | JMP | BAN |
---|---|---|---|---|---|---|---|---|---|---|
EX 执行 | T₀ | Ad(IR) → MAR | 1 | 1 | 1 | |||||
1 → R | 1 | |||||||||
1 → W | 1 | |||||||||
T₁ | M(MAR) → MDR | 1 | 1 | |||||||
AC → MDR | 1 | |||||||||
(AC)+(MDR) → AC | 1 | |||||||||
T₂ | MDR → M(MAR) | 1 | ||||||||
MDR → AC | 1 | |||||||||
0 → AC | 1 | |||||||||
AC → AC | 1 | |||||||||
Ad(IR) → PC | 1 | |||||||||
A₀ | Ad(IR) → PC | 1 |
(2)写出微操作命令的最简表达式
M(MAR)→MDR微操作命令的逻辑表达式:
(3)画出逻辑图
三、硬布线控制器的特点:
指令越多,设计和实现就越复杂,因此一般用于RISC(精简指令集系统)如果扩充一条新的指令,则控制器的设计就需要大改,因此扩充指令较困难。由于使用纯硬件实现控制,因此执行速度很快。微操作控制信号由组合逻辑电路即时产生。