Files
obsidian/计算机组成原理/学习笔记/10_控制单元设计.md

444 lines
10 KiB
Markdown
Raw Normal View History

2026-07-04 12:12:55 +08:00
# 第10章 控制单元的设计
> 📖 本章介绍控制单元的两种设计方法:组合逻辑设计和微程序设计。
> 🎯 重点理解微程序设计方法
---
## 📋 本章目录
- [[#10.1 组合逻辑设计]]
- [[#10.2 微程序设计]]
- [[#本章小结]]
---
## 10.1 组合逻辑设计
### 10.1.1 组合逻辑控制单元框图
```mermaid
graph TB
subgraph "组合逻辑控制单元"
IR[IR<br/>指令寄存器] --> |"操作码"| DEC[操作码译码器]
CLK[时钟] --> |"时钟信号"| TG[节拍发生器]
DEC --> |"译码输出"| CU[控制单元]
TG --> |"节拍信号"| CU
FLAG[标志] --> CU
CU --> |"控制信号"| CTRL[控制信号输出]
end
```
**组成部分**
- **操作码译码器**:将操作码译码,产生操作控制信号
- **节拍发生器**:产生时序信号,控制微操作顺序
- **控制单元**:根据译码结果和时序信号,产生控制信号
### 10.1.2 微操作的节拍安排
#### 安排原则
1. **顺序原则**:有些微操作次序不能改变
2. **并行原则**:不同控制对象的微操作可并行执行
3. **紧凑原则**:时间短的微操作可安排在同一节拍
#### 取指周期节拍安排
| 节拍 | 微操作 | 说明 |
|------|--------|------|
| T₀ | PC → MAR, 1 → R | 地址送MAR发读命令 |
| T₁ | M(MAR) → MDR, (PC)+1 → PC | 读指令PC加1 |
| T₂ | MDR → IR, OP(IR) → ID | 指令送IR译码 |
```mermaid
sequenceDiagram
participant T0 as 节拍T0
participant T1 as 节拍T1
participant T2 as 节拍T2
Note over T0: PC → MAR, 1 → R
Note over T1: M(MAR) → MDR, (PC)+1 → PC
Note over T2: MDR → IR, OP(IR) → ID
```
#### 间址周期节拍安排
| 节拍 | 微操作 | 说明 |
|------|--------|------|
| T₀ | Ad(IR) → MAR, 1 → R | 形式地址送MAR |
| T₁ | M(MAR) → MDR | 读有效地址 |
| T₂ | MDR → Ad(IR) | 有效地址送IR |
#### 执行周期节拍安排
##### 非访存指令
| 指令 | T₀ | T₁ | T₂ |
|------|----|----|-----|
| CLA | 空 | 空 | 0 → ACC |
| COM | 空 | 空 | $\overline{ACC}$ → ACC |
| SHR | 空 | 空 | L(ACC) → R(ACC) |
| CSL | 空 | 空 | R(ACC) → L(ACC) |
| STP | 空 | 空 | 0 → G |
##### 访存指令
**加法指令 ADD X**
| 节拍 | 微操作 |
|------|--------|
| T₀ | Ad(IR) → MAR, 1 → R |
| T₁ | M(MAR) → MDR |
| T₂ | (ACC) + (MDR) → ACC |
**存数指令 STA X**
| 节拍 | 微操作 |
|------|--------|
| T₀ | Ad(IR) → MAR, 1 → W |
| T₁ | ACC → MDR |
| T₂ | MDR → M(MAR) |
**取数指令 LDA X**
| 节拍 | 微操作 |
|------|--------|
| T₀ | Ad(IR) → MAR, 1 → R |
| T₁ | M(MAR) → MDR |
| T₂ | MDR → ACC |
##### 转移指令
**无条件转移 JMP X**
| 节拍 | 微操作 |
|------|--------|
| T₀ | 空 |
| T₁ | 空 |
| T₂ | Ad(IR) → PC |
**条件转移 BAN X**
| 节拍 | 微操作 |
|------|--------|
| T₀ | 空 |
| T₁ | 空 |
| T₂ | A₀·Ad(IR) + $\overline{A₀}$·(PC) → PC |
#### 中断周期节拍安排
| 节拍 | 微操作 | 说明 |
|------|--------|------|
| T₀ | 0 → MAR, 1 → W | 特定地址送MAR |
| T₁ | PC → MDR | 断点送MDR |
| T₂ | MDR → M(MAR), 向量地址 → PC | 存断点置PC |
### 10.1.3 组合逻辑设计方法
#### 设计步骤
```mermaid
graph TB
A[列出微操作时间表] --> B[写出微操作逻辑表达式]
B --> C[画出逻辑电路图]
C --> D[优化电路]
```
#### 微操作逻辑表达式
**取指周期**
- T₀$PC \to MAR = T_0 \cdot FE$
- T₀$1 \to R = T_0 \cdot FE$
- T₁$M(MAR) \to MDR = T_1 \cdot FE$
- T₁$(PC)+1 \to PC = T_1 \cdot FE$
- T₂$MDR \to IR = T_2 \cdot FE$
- T₂$OP(IR) \to ID = T_2 \cdot FE$
**加法指令 ADD X**
- T₀$Ad(IR) \to MAR = T_0 \cdot ADD \cdot EX$
- T₀$1 \to R = T_0 \cdot ADD \cdot EX$
- T₁$M(MAR) \to MDR = T_1 \cdot ADD \cdot EX$
- T₂$(ACC)+(MDR) \to ACC = T_2 \cdot ADD \cdot EX$
#### 逻辑电路实现
```mermaid
graph TB
subgraph "组合逻辑电路实现"
DEC[操作码译码器] --> |"ADD"| AND1[与门]
TG[节拍发生器] --> |"T0"| AND1
AND1 --> |"控制信号"| OR[或门]
FLAG[标志] --> AND1
OR --> |"最终控制信号"| CTRL[控制信号输出]
end
```
### 10.1.4 组合逻辑设计特点
| 优点 | 缺点 |
|------|------|
| 速度快 | 电路复杂 |
| 设计灵活 | 不易修改 |
| 适合RISC | 扩展困难 |
---
## 10.2 微程序设计
### 10.2.1 微程序设计思想
> [!info] 核心思想
> 将每条机器指令的执行过程编写成一个微程序,存放在控制存储器中。
**基本概念**
| 术语 | 定义 |
|------|------|
| **微命令** | 控制信号,控制微操作 |
| **微操作** | 由微命令控制的最基本操作 |
| **微指令** | 一组微命令的集合 |
| **微程序** | 微指令序列 |
| **控制存储器** | 存放微程序的存储器 |
```mermaid
graph TB
subgraph "微程序层次结构"
MACHINE[机器指令] --> |"对应"| MICRO_PROG[微程序]
MICRO_PROG --> |"包含"| MICRO_INST[微指令]
MICRO_INST --> |"包含"| MICRO_CMD[微命令]
MICRO_CMD --> |"控制"| MICRO_OP[微操作]
end
```
### 10.2.2 微程序控制单元框图
```mermaid
graph TB
subgraph "微程序控制单元"
IR[IR] --> |"操作码"| CMAR[控制存储器地址寄存器]
CMAR --> |"地址"| CM[控制存储器]
CM --> |"微指令"| CMDR[控制存储器数据寄存器]
CMDR --> |"微命令"| CTRL[控制信号]
CMDR --> |"下地址"| CMAR
SEQ[顺序逻辑] --> CMAR
end
```
**组成部分**
- **控制存储器CM**:存放所有微程序
- **控制存储器地址寄存器CMAR**:存放微指令地址
- **控制存储器数据寄存器CMDR**:存放微指令
- **顺序逻辑**:产生下条微指令地址
### 10.2.3 微指令格式
#### 水平型微指令
```mermaid
graph LR
subgraph "水平型微指令"
CMD[操作控制字段] --> SEQ[顺序控制字段]
end
```
**特点**
- 每个微命令占一位
- 并行性好,速度快
- 指令字长较长
#### 垂直型微指令
```mermaid
graph LR
subgraph "垂直型微指令"
OP[操作码] --> ADDR[地址码]
end
```
**特点**
- 类似机器指令格式
- 指令字长较短
- 并行性差,速度慢
#### 混合型微指令
**特点**
- 结合水平型和垂直型优点
- 兼顾速度和效率
### 10.2.4 微指令编码方式
#### 1. 直接编码
**特点**:每个微命令占一位,控制字段直接对应控制信号
**优点**:简单,并行性好
**缺点**:指令字长较长
#### 2. 字段直接编码
**特点**:将微命令分组,每组编码
**原则**
- 互斥微命令在同一字段
- 相容微命令在不同字段
**优点**:减少指令字长
**缺点**:需要译码器
#### 3. 字段间接编码
**特点**:一个字段的含义取决于另一个字段
**优点**:进一步减少指令字长
**缺点**:译码复杂
### 10.2.5 微地址形成方式
| 方式 | 说明 | 应用 |
|------|------|------|
| **计数器方式** | CMAR自动加1 | 顺序执行 |
| **下地址字段** | 微指令中直接给出下地址 | 分支跳转 |
| **操作码映射** | 根据机器指令操作码映射 | 微程序入口 |
| **测试条件** | 根据条件选择地址 | 条件分支 |
### 10.2.6 微程序设计举例
#### 指令周期的微程序
```mermaid
graph TB
subgraph "取指周期微程序"
F1[PC → MAR, 1 → R] --> F2[M(MAR) → MDR, (PC)+1 → PC]
F2 --> F3[MDR → IR, OP(IR) → ID]
end
subgraph "执行周期微程序(加法指令)"
E1[Ad(IR) → MAR, 1 → R] --> E2[M(MAR) → MDR]
E2 --> E3[(ACC)+(MDR) → ACC]
end
F3 --> |"ADD"| E1
```
#### 微程序流程图
```mermaid
graph TB
START[开始] --> FETCH[取指周期微程序]
FETCH --> DECODE[指令译码]
DECODE --> |"ADD"| ADD[加法微程序]
DECODE --> |"STA"| STA[存数微程序]
DECODE --> |"LDA"| LDA[取数微程序]
DECODE --> |"JMP"| JMP[转移微程序]
ADD --> END[结束]
STA --> END
LDA --> END
JMP --> END
```
### 10.2.7 动态微程序设计
> [!info] 概念
> 微程序可根据需要动态改变,支持不同指令系统。
**特点**
- 灵活性高
- 可支持不同指令集
- 硬件复杂
### 10.2.8 毫微程序设计
> [!info] 概念
> 用毫微程序解释微指令,进一步提高灵活性。
**层次结构**
- 机器指令 → 微程序解释
- 微指令 → 毫微程序解释
### 10.2.9 微程序设计特点
| 优点 | 缺点 |
|------|------|
| 规整性好 | 速度较慢 |
| 易于修改 | 需要控制存储器 |
| 灵活性高 | 硬件成本增加 |
| 适合CISC | 设计复杂 |
---
## 10.3 两种设计方法比较
| 特性 | 组合逻辑设计 | 微程序设计 |
|------|--------------|------------|
| **速度** | 快 | 较慢 |
| **灵活性** | 差 | 好 |
| **规整性** | 差 | 好 |
| **修改** | 困难 | 容易 |
| **成本** | 较低 | 较高 |
| **应用** | RISC | CISC |
```mermaid
graph TB
subgraph "设计方法选择"
A[指令系统] --> B{复杂程度}
B -->|简单| C[组合逻辑设计]
B -->|复杂| D[微程序设计]
C --> E[RISC处理器]
D --> F[CISC处理器]
end
```
---
## 📝 本章小结
### 核心概念
1. **组合逻辑设计**:用组合逻辑电路实现控制单元
2. **微程序设计**:将控制信号编写成微程序
3. **微指令格式**:水平型、垂直型、混合型
4. **微指令编码**:直接编码、字段编码
### 关键公式
- **微指令字长**$L = \sum_{i=1}^{n} \lceil \log_2(m_i + 1) \rceil$
- n字段数
- m_i第i字段的微命令数
### 重点图示
> [!summary] 必须掌握的内容
> 1. 组合逻辑控制单元框图
> 2. 微程序控制单元框图
> 3. 微指令格式和编码方式
> 4. 微程序流程图设计
---
## 🧪 自测练习
### 概念题
1. 比较组合逻辑设计和微程序设计的优缺点。
2. 说明微指令的编码方式。
3. 解释微程序设计的基本原理。
### 设计题
1. 设计一个简单指令的微程序。
2. 画出微程序控制单元的框图。
---
## 🔗 相关链接
- [[09_控制单元功能]] - 上一章
- [[08_CPU结构与功能]] - CPU结构
- [[07_指令系统]] - 指令格式
- [[00_计算机组成原理学习指南]] - 返回主目录
---
*本章难度:⭐⭐⭐⭐⭐ 困难*
*重要程度:⭐⭐⭐⭐⭐ 核心重点*