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

444 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第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_计算机组成原理学习指南]] - 返回主目录
---
*本章难度:⭐⭐⭐⭐⭐ 困难*
*重要程度:⭐⭐⭐⭐⭐ 核心重点*