332 lines
7.6 KiB
Markdown
332 lines
7.6 KiB
Markdown
|
|
# 第9章 控制单元的功能
|
|||
|
|
|
|||
|
|
> 📖 本章分析控制单元为完成不同指令所发出的各种微操作命令。
|
|||
|
|
> 🎯 重点理解微操作命令和指令执行过程
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 本章目录
|
|||
|
|
|
|||
|
|
- [[#9.1 微操作命令的分析]]
|
|||
|
|
- [[#9.2 控制单元的功能]]
|
|||
|
|
- [[#本章小结]]
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9.1 微操作命令的分析
|
|||
|
|
|
|||
|
|
### 9.1.1 微操作命令的概念
|
|||
|
|
|
|||
|
|
> [!info] 定义
|
|||
|
|
> 微操作命令是控制单元发出的最基本控制信号,控制计算机各部件完成相应操作。
|
|||
|
|
|
|||
|
|
**特点**:
|
|||
|
|
- 是最基本的操作,不可再分
|
|||
|
|
- 由控制单元发出
|
|||
|
|
- 控制数据通路和功能部件
|
|||
|
|
|
|||
|
|
### 9.1.2 指令周期的四个阶段
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
graph LR
|
|||
|
|
A[指令周期] --> B[取指周期]
|
|||
|
|
A --> C[间址周期]
|
|||
|
|
A --> D[执行周期]
|
|||
|
|
A --> E[中断周期]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 9.1.3 取指周期的微操作
|
|||
|
|
|
|||
|
|
**操作序列**:
|
|||
|
|
|
|||
|
|
| 步骤 | 微操作 | 说明 |
|
|||
|
|
|------|--------|------|
|
|||
|
|
| 1 | PC → MAR | 现行指令地址送MAR |
|
|||
|
|
| 2 | 1 → R | 向主存发读命令 |
|
|||
|
|
| 3 | M(MAR) → MDR | 指令从主存读至MDR |
|
|||
|
|
| 4 | MDR → IR | 指令送指令寄存器 |
|
|||
|
|
| 5 | OP(IR) → CU | 操作码送CU译码 |
|
|||
|
|
| 6 | (PC) + 1 → PC | 程序计数器加1 |
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
sequenceDiagram
|
|||
|
|
participant PC
|
|||
|
|
participant MAR
|
|||
|
|
participant MEM as 主存
|
|||
|
|
participant MDR
|
|||
|
|
participant IR
|
|||
|
|
participant CU
|
|||
|
|
|
|||
|
|
PC->>MAR: PC → MAR
|
|||
|
|
Note over MAR: 1 → R(发读命令)
|
|||
|
|
MEM->>MDR: M(MAR) → MDR
|
|||
|
|
MDR->>IR: MDR → IR
|
|||
|
|
IR->>CU: OP(IR) → CU
|
|||
|
|
Note over PC: (PC) + 1 → PC
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 9.1.4 间址周期的微操作
|
|||
|
|
|
|||
|
|
**操作序列**:
|
|||
|
|
|
|||
|
|
| 步骤 | 微操作 | 说明 |
|
|||
|
|
|------|--------|------|
|
|||
|
|
| 1 | Ad(IR) → MAR | 形式地址送MAR |
|
|||
|
|
| 2 | 1 → R | 向主存发读命令 |
|
|||
|
|
| 3 | M(MAR) → MDR | 有效地址从主存读至MDR |
|
|||
|
|
| 4 | MDR → Ad(IR) | 有效地址送IR地址字段 |
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
sequenceDiagram
|
|||
|
|
participant IR
|
|||
|
|
participant MAR
|
|||
|
|
participant MEM as 主存
|
|||
|
|
participant MDR
|
|||
|
|
|
|||
|
|
IR->>MAR: Ad(IR) → MAR
|
|||
|
|
Note over MAR: 1 → R(发读命令)
|
|||
|
|
MEM->>MDR: M(MAR) → MDR
|
|||
|
|
MDR->>IR: MDR → Ad(IR)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 9.1.5 执行周期的微操作
|
|||
|
|
|
|||
|
|
#### 1. 非访存指令
|
|||
|
|
|
|||
|
|
| 指令 | 微操作 | 说明 |
|
|||
|
|
|------|--------|------|
|
|||
|
|
| CLA | 0 → ACC | 清除累加器 |
|
|||
|
|
| COM | $\overline{ACC}$ → ACC | 累加器取反 |
|
|||
|
|
| SHR | L(ACC) → R(ACC), ACC₀ → ACC₀ | 算术右移 |
|
|||
|
|
| CSL | R(ACC) → L(ACC), ACC₀ → ACCₙ | 循环左移 |
|
|||
|
|
| STP | 0 → G | 停机 |
|
|||
|
|
|
|||
|
|
#### 2. 访存指令
|
|||
|
|
|
|||
|
|
##### 加法指令 ADD X
|
|||
|
|
|
|||
|
|
| 步骤 | 微操作 | 说明 |
|
|||
|
|
|------|--------|------|
|
|||
|
|
| 1 | Ad(IR) → MAR | 地址送MAR |
|
|||
|
|
| 2 | 1 → R | 发读命令 |
|
|||
|
|
| 3 | M(MAR) → MDR | 操作数读至MDR |
|
|||
|
|
| 4 | (ACC) + (MDR) → ACC | 加法运算 |
|
|||
|
|
|
|||
|
|
##### 存数指令 STA X
|
|||
|
|
|
|||
|
|
| 步骤 | 微操作 | 说明 |
|
|||
|
|
|------|--------|------|
|
|||
|
|
| 1 | Ad(IR) → MAR | 地址送MAR |
|
|||
|
|
| 2 | 1 → W | 发写命令 |
|
|||
|
|
| 3 | ACC → MDR | 数据送MDR |
|
|||
|
|
| 4 | MDR → M(MAR) | 数据写入主存 |
|
|||
|
|
|
|||
|
|
##### 取数指令 LDA X
|
|||
|
|
|
|||
|
|
| 步骤 | 微操作 | 说明 |
|
|||
|
|
|------|--------|------|
|
|||
|
|
| 1 | Ad(IR) → MAR | 地址送MAR |
|
|||
|
|
| 2 | 1 → R | 发读命令 |
|
|||
|
|
| 3 | M(MAR) → MDR | 数据读至MDR |
|
|||
|
|
| 4 | MDR → ACC | 数据送累加器 |
|
|||
|
|
|
|||
|
|
#### 3. 转移类指令
|
|||
|
|
|
|||
|
|
| 指令 | 微操作 | 说明 |
|
|||
|
|
|------|--------|------|
|
|||
|
|
| JMP X | Ad(IR) → PC | 无条件转移 |
|
|||
|
|
| BAN X | A₀·Ad(IR) + $\overline{A₀}$·(PC) → PC | 条件转移(负则转) |
|
|||
|
|
|
|||
|
|
### 9.1.6 中断周期的微操作
|
|||
|
|
|
|||
|
|
**操作序列**:
|
|||
|
|
|
|||
|
|
| 步骤 | 微操作 | 说明 |
|
|||
|
|
|------|--------|------|
|
|||
|
|
| 1 | 0 → MAR | 特定地址送MAR |
|
|||
|
|
| 2 | 1 → W | 发写命令 |
|
|||
|
|
| 3 | PC → MDR | 断点送MDR |
|
|||
|
|
| 4 | MDR → M(MAR) | 断点存入主存 |
|
|||
|
|
| 5 | 向量地址 → PC | 中断服务程序入口送PC |
|
|||
|
|
| 6 | 0 → EINT | 关中断 |
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
sequenceDiagram
|
|||
|
|
participant PC
|
|||
|
|
participant MAR
|
|||
|
|
participant MDR
|
|||
|
|
participant MEM as 主存
|
|||
|
|
|
|||
|
|
Note over MAR: 0 → MAR
|
|||
|
|
Note over MAR: 1 → W(发写命令)
|
|||
|
|
PC->>MDR: PC → MDR
|
|||
|
|
MDR->>MEM: MDR → M(MAR)
|
|||
|
|
Note over PC: 向量地址 → PC
|
|||
|
|
Note over PC: 0 → EINT(关中断)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9.2 控制单元的功能
|
|||
|
|
|
|||
|
|
### 9.2.1 控制单元的外特性
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
graph TB
|
|||
|
|
subgraph "控制单元CU"
|
|||
|
|
INPUT[输入] --> CU[控制单元]
|
|||
|
|
CU --> OUTPUT[输出]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
subgraph "输入信号"
|
|||
|
|
CLK[时钟]
|
|||
|
|
INST[指令寄存器]
|
|||
|
|
FLAG[标志]
|
|||
|
|
INT[中断请求]
|
|||
|
|
BUS[总线信号]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
subgraph "输出信号"
|
|||
|
|
CTRL[控制信号]
|
|||
|
|
ADDR[地址信号]
|
|||
|
|
DATA[数据信号]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
CLK --> INPUT
|
|||
|
|
INST --> INPUT
|
|||
|
|
FLAG --> INPUT
|
|||
|
|
INT --> INPUT
|
|||
|
|
BUS --> INPUT
|
|||
|
|
OUTPUT --> CTRL
|
|||
|
|
OUTPUT --> ADDR
|
|||
|
|
OUTPUT --> DATA
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 9.2.2 控制信号
|
|||
|
|
|
|||
|
|
**控制信号分类**:
|
|||
|
|
|
|||
|
|
| 类型 | 说明 | 示例 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| **操作控制信号** | 控制数据通路操作 | ALU操作、寄存器读写 |
|
|||
|
|
| **时序控制信号** | 控制操作时序 | 时钟、节拍 |
|
|||
|
|
| **总线控制信号** | 控制总线操作 | 总线请求、总线允许 |
|
|||
|
|
|
|||
|
|
### 9.2.3 控制信号举例
|
|||
|
|
|
|||
|
|
#### 取指周期的控制信号
|
|||
|
|
|
|||
|
|
| 时钟 | 控制信号 | 功能 |
|
|||
|
|
|------|----------|------|
|
|||
|
|
| T₀ | PCout, MARin | PC → MAR |
|
|||
|
|
| T₁ | MemR, MARout | 读主存 |
|
|||
|
|
| T₂ | MDRinE | M(MAR) → MDR |
|
|||
|
|
| T₃ | MDRout, IRin | MDR → IR |
|
|||
|
|
| T₄ | PC+1 | PC加1 |
|
|||
|
|
|
|||
|
|
#### 执行周期的控制信号(加法指令)
|
|||
|
|
|
|||
|
|
| 时钟 | 控制信号 | 功能 |
|
|||
|
|
|------|----------|------|
|
|||
|
|
| T₀ | IRout, MARin | Ad(IR) → MAR |
|
|||
|
|
| T₁ | MemR, MARout | 读主存 |
|
|||
|
|
| T₂ | MDRinE | M(MAR) → MDR |
|
|||
|
|
| T₃ | MDRout, Yin | MDR → Y |
|
|||
|
|
| T₄ | ADD, Zin | ACC + Y → Z |
|
|||
|
|
| T₅ | Zout, ACCin | Z → ACC |
|
|||
|
|
|
|||
|
|
### 9.2.4 多级时序系统
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
graph TB
|
|||
|
|
subgraph "多级时序系统"
|
|||
|
|
MACHINE[机器周期] --> CLOCK[时钟周期]
|
|||
|
|
CLOCK --> MICRO[微操作]
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
subgraph "时序关系"
|
|||
|
|
T[指令周期] --> M1[机器周期1]
|
|||
|
|
T --> M2[机器周期2]
|
|||
|
|
T --> M3[机器周期3]
|
|||
|
|
M1 --> C1[时钟周期T0]
|
|||
|
|
M1 --> C2[时钟周期T1]
|
|||
|
|
M1 --> C3[时钟周期T2]
|
|||
|
|
end
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**时序关系**:
|
|||
|
|
- **指令周期**:取出并执行一条指令的时间
|
|||
|
|
- **机器周期**:完成一个基本操作的时间
|
|||
|
|
- **时钟周期**:最基本的时序单位
|
|||
|
|
|
|||
|
|
### 9.2.5 控制方式
|
|||
|
|
|
|||
|
|
#### 1. 同步控制方式
|
|||
|
|
|
|||
|
|
> [!info] 特点
|
|||
|
|
> 所有操作由统一时钟控制,时序固定。
|
|||
|
|
|
|||
|
|
**优点**:设计简单,可靠性高
|
|||
|
|
**缺点**:效率低,不灵活
|
|||
|
|
|
|||
|
|
#### 2. 异步控制方式
|
|||
|
|
|
|||
|
|
> [!info] 特点
|
|||
|
|
> 操作按需进行,采用应答方式。
|
|||
|
|
|
|||
|
|
**优点**:效率高,灵活
|
|||
|
|
**缺点**:设计复杂
|
|||
|
|
|
|||
|
|
#### 3. 联合控制方式
|
|||
|
|
|
|||
|
|
> [!info] 特点
|
|||
|
|
> 同步和异步结合,大部分操作同步,特殊操作异步。
|
|||
|
|
|
|||
|
|
**应用**:现代计算机常用
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 本章小结
|
|||
|
|
|
|||
|
|
### 核心概念
|
|||
|
|
|
|||
|
|
1. **微操作命令**:最基本的控制信号
|
|||
|
|
2. **指令周期**:取指周期、间址周期、执行周期、中断周期
|
|||
|
|
3. **控制信号**:控制数据通路和功能部件
|
|||
|
|
4. **时序系统**:机器周期、时钟周期
|
|||
|
|
|
|||
|
|
### 重点图示
|
|||
|
|
|
|||
|
|
> [!summary] 必须掌握的内容
|
|||
|
|
> 1. 指令周期四个阶段的微操作序列
|
|||
|
|
> 2. 控制单元的外特性
|
|||
|
|
> 3. 多级时序系统
|
|||
|
|
> 4. 各类指令的控制信号
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧪 自测练习
|
|||
|
|
|
|||
|
|
### 概念题
|
|||
|
|
|
|||
|
|
1. 说明微操作命令的概念和特点。
|
|||
|
|
2. 比较指令周期四个阶段的微操作。
|
|||
|
|
3. 解释控制信号的作用和分类。
|
|||
|
|
|
|||
|
|
### 分析题
|
|||
|
|
|
|||
|
|
1. 写出加法指令的微操作序列。
|
|||
|
|
2. 设计取指周期的控制信号。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔗 相关链接
|
|||
|
|
|
|||
|
|
- [[08_CPU结构与功能]] - 上一章
|
|||
|
|
- [[10_控制单元设计]] - 下一章
|
|||
|
|
- [[07_指令系统]] - 指令格式
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
*本章难度:⭐⭐⭐⭐ 中等偏难*
|
|||
|
|
*重要程度:⭐⭐⭐⭐ 重点*
|