444 lines
10 KiB
Markdown
444 lines
10 KiB
Markdown
# 第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_计算机组成原理学习指南]] - 返回主目录
|
||
|
||
---
|
||
|
||
*本章难度:⭐⭐⭐⭐⭐ 困难*
|
||
*重要程度:⭐⭐⭐⭐⭐ 核心重点* |