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

322 lines
15 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 微操作的节拍安排
安排微操作的节拍时,需要遵循三个原则。
**顺序原则**有些微操作的次序不能改变。比如必须先送地址到MAR才能读内存必须先读到MDR才能送到IR——这些顺序是硬件决定的不能颠倒。
**并行原则**不同控制对象的微操作可以同时执行。比如ALU做加法的同时寄存器可以读数据——因为它们控制的是不同的硬件部件互不干扰。
**紧凑原则**时间短的微操作可以安排在同一节拍。比如PC送MAR和发读命令可以同时进行因为它们的操作对象不同而且都很快速。
#### 取指周期节拍安排
| 节拍 | 微操作 | 说明 |
|------|--------|------|
| 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₀节拍同时做两件事送地址和发读命令因为它们操作的对象不同MAR和控制总线可以并行。T₁节拍也是两件事并行从内存读指令到MDR同时PC加1——读内存是主存的操作PC加1是CPU内部操作互不影响。T₂节拍把指令从MDR搬到IR同时操作码送到译码器。
#### 间址周期节拍安排
| 节拍 | 微操作 | 说明 |
|------|--------|------|
| T₀ | Ad(IR) → MAR, 1 → R | 形式地址送MAR |
| T₁ | M(MAR) → MDR | 读有效地址 |
| T₂ | MDR → Ad(IR) | 有效地址送IR |
间址周期和取指周期结构类似但目的不同——这里是为了获取有效地址。T₀送形式地址并发读命令T₁从内存读有效地址到MDRT₂把有效地址写回指令的地址字段。这样后续执行周期就知道该去哪操作了。
#### 执行周期节拍安排
**非访存指令**不需要访问内存所以很多只需要用到T₂节拍
| 指令 | T₀ | T₁ | T₂ |
|------|----|----|-----|
| CLA | 空 | 空 | 0 → ACC |
| COM | 空 | 空 | $\overline{ACC}$ → ACC |
| SHR | 空 | 空 | L(ACC) → R(ACC) |
| CSL | 空 | 空 | R(ACC) → L(ACC) |
| STP | 空 | 空 | 0 → G |
这些指令都是CPU内部操作不需要去内存取数据所以T₀和T₁空闲只在T₂执行一个操作。这也是为什么非访存指令通常比访存指令快。
**访存指令**需要访问内存,三个节拍都用满了:
**加法指令 ADD X**
| 节拍 | 微操作 |
|------|--------|
| T₀ | Ad(IR) → MAR, 1 → R |
| T₁ | M(MAR) → MDR |
| T₂ | (ACC) + (MDR) → ACC |
T₀送地址并发读命令T₁从内存读操作数到MDRT₂把累加器的值和MDR的值送到ALU做加法结果写回累加器。
**存数指令 STA X**
| 节拍 | 微操作 |
|------|--------|
| T₀ | Ad(IR) → MAR, 1 → W |
| T₁ | ACC → MDR |
| T₂ | MDR → M(MAR) |
STA X 和 ADD X 的区别在于方向ADD 是从内存读到CPUSTA 是从CPU写到内存。所以T₀发的是写命令1→WT₁把累加器的值送到MDRT₂把MDR的内容写入内存。
**取数指令 LDA X**
| 节拍 | 微操作 |
|------|--------|
| T₀ | Ad(IR) → MAR, 1 → R |
| T₁ | M(MAR) → MDR |
| T₂ | MDR → ACC |
LDA X 和 ADD X 的前三步完全一样区别在T₂ADD 是做加法后送回累加器LDA 是直接把MDR的值送到累加器累加器原来的值被覆盖
---
## 10.2 微程序设计
### 10.2.1 微程序设计的基本概念
> [!info] 定义
> 微程序设计是用程序的方法来设计控制单元,把控制信号编成微指令,存放在控制存储器中。
组合逻辑设计虽然速度快,但电路复杂、修改困难。微程序设计的思路完全不同——它把控制信号看成"数据"存到一个ROM只读存储器执行指令时从ROM中读取控制信号。这样设计控制单元就变成了编写"微程序",和写软件的思路类似。
三个核心概念:**微指令**是一组控制信号的集合,一条微指令可以同时激活多个控制信号;**微程序**是微指令的有序序列,一条机器指令对应一个微程序;**控制存储器**CS是存放微程序的ROM通常在CPU内部。
举个例子执行一条加法指令它的微程序可能包含三条微指令第一条完成取指PC→MAR、1→R等第二条完成取操作数Ad(IR)→MAR、M(MAR)→MDR第三条完成加法运算(ACC)+(MDR)→ACC。每条微指令里的控制信号可以并行发出。
### 10.2.2 微指令的格式
微指令由两部分组成:**操作控制字段**产生各种控制信号,**顺序控制字段**决定下一条微指令的地址。
根据操作控制字段的编码方式,微指令分为两种格式。
**水平型微指令**的操作控制字段很长每一位或每几位对应一个控制信号可以同时激活多个信号实现并行操作。优点是执行速度快一条微指令就能完成很多操作缺点是微指令很长占用存储空间大。现代高性能CPU通常采用水平型微指令。
**垂直型微指令**的操作控制字段很短,采用编码方式,一条微指令只能控制一个或少数几个操作。优点是微指令短、节省空间,缺点是执行速度慢(需要更多微指令才能完成一条机器指令)。简单处理器常用垂直型微指令。
### 10.2.3 微程序设计的步骤
微程序设计可以分为四步。
第一步是**分析指令**把每条机器指令分解成微操作序列确定需要哪些控制信号。比如加法指令需要PC→MAR、1→R、M(MAR)→MDR、(ACC)+(MDR)→ACC这些控制信号。
第二步是**设计微指令格式**:确定操作控制字段和顺序控制字段的宽度和编码方式。操作控制字段要能表示所有需要的控制信号,顺序控制字段要能表示微程序的地址范围。
第三步是**编写微程序**:为每条机器指令编写对应的微程序。取指周期的微程序是所有指令共用的,执行周期的微程序因指令而异。
第四步是**实现控制存储器**把微程序固化到ROM中。ROM的内容在制造时就确定了不能修改除非用可擦写的EPROM
### 10.2.4 微程序设计的优缺点
微程序设计最大的优点是**规整性和灵活性**。用程序的方法设计控制单元逻辑清晰、容易理解需要增加新指令时只需要在ROM中添加对应的微程序不需要重新设计电路调试和维护也方便可以通过修改微程序来修复bug。
缺点主要是**速度**。每条微指令都要从控制存储器读取,增加了访存时间,比组合逻辑直接产生信号要慢。另外需要额外的控制存储器,增加了硬件成本。
实际应用中现代复杂CPU如x86系列通常采用微程序设计因为指令集复杂、需要灵活扩展。而简单处理器如一些嵌入式处理器可能采用组合逻辑设计追求更高的执行速度。
---
## 📝 本章小结
### 核心概念
1. **组合逻辑设计**:用组合逻辑电路直接产生控制信号,速度快但设计复杂
2. **微程序设计**把控制信号存到ROM中用读取ROM的方式产生控制信号灵活但速度较慢
3. **微指令**:一组控制信号的集合
4. **微程序**:微指令的有序序列,一条机器指令对应一个微程序
5. **控制存储器**存放微程序的ROM
### 关键术语
| 术语 | 英文 | 含义 |
|------|------|------|
| 组合逻辑 | Combinational Logic | 用逻辑电路实现 |
| 微程序 | Microprogram | 用程序实现 |
| 微指令 | Microinstruction | 控制信号的集合 |
| 控制存储器 | Control Storage | 存放微程序的ROM |
### 重点图示
> [!summary] 必须掌握的图
> 1. 组合逻辑控制单元框图
> 2. 微程序控制单元框图
> 3. 微指令格式图
> 4. 取指周期的节拍安排图
---
## 🧪 例题与解析
### 例题1取指周期节拍安排
**题目**:写出取指周期的节拍安排。
**答案**
| 节拍 | 微操作 | 说明 |
|------|--------|------|
| T₀ | PC → MAR, 1 → R | 地址送MAR发读命令 |
| T₁ | M(MAR) → MDR, (PC)+1 → PC | 读指令PC加1 |
| T₂ | MDR → IR, OP(IR) → ID | 指令送IR译码 |
每个节拍都安排了两个可以并行的操作T₀送地址和发读命令操作对象不同可以同时进行T₁读内存和PC加1一个是主存操作、一个是CPU内部操作互不干扰T₂送指令和译码也是类似道理。这样三个节拍就完成了取指效率很高。
### 例题2加法指令节拍安排
**题目**:写出加法指令 ADD X 的节拍安排。
**答案**
| 节拍 | 微操作 |
|------|--------|
| T₀ | Ad(IR) → MAR, 1 → R |
| T₁ | M(MAR) → MDR |
| T₂ | (ACC) + (MDR) → ACC |
ADD X 的执行周期需要三次访存操作中的两次送地址、读数据然后做加法。T₀送地址并发读命令T₁等待内存响应并把数据读到MDRT₂把累加器的值和MDR的值送到ALU做加法结果写回累加器。如果X是间接寻址的还需要在前面加一个间址周期。
### 例题3微程序设计步骤
**题目**:简述微程序设计的步骤。
**答案**
微程序设计的步骤:
1. **分析指令**:把每条机器指令分解成微操作序列,确定需要哪些控制信号
2. **设计微指令格式**:确定操作控制字段和顺序控制字段的宽度和编码方式
3. **编写微程序**:为每条机器指令编写对应的微程序,取指周期的微程序是共用的
4. **实现控制存储器**把微程序固化到ROM中
这四步的核心思想是"用数据代替逻辑"——把原本需要复杂电路实现的控制逻辑变成存储在ROM中的数据通过读取ROM来产生控制信号。这样设计更灵活但代价是速度稍慢。
### 例题4组合逻辑与微程序比较
**题目**:比较组合逻辑设计和微程序设计的优缺点。
**答案**
| 特性 | 组合逻辑设计 | 微程序设计 |
|------|--------------|------------|
| **设计方法** | 用逻辑电路直接实现 | 用程序ROM实现 |
| **优点** | 速度快 | 规整性好,灵活,易修改 |
| **缺点** | 设计复杂,不灵活,难修改 | 速度较慢需要额外的ROM |
| **应用** | 简单CPU、RISC处理器 | 复杂CPU、CISC处理器 |
选择哪种方式取决于设计目标追求极致速度就用组合逻辑追求灵活性和可扩展性就用微程序。现代CPU往往混合使用——简单常用的指令用组合逻辑加速复杂指令用微程序实现。
### 例题5微指令格式设计
**题目**设计一个简单的微指令格式支持8种控制信号。
**答案**
**操作控制字段**8种控制信号如果采用水平型编码每位对应一个信号需要8位。如果采用垂直型编码用3位二进制编码选择8种信号之一只需要3位但一次只能激活一个信号。
**顺序控制字段**需要支持顺序执行和跳转。假设微程序最多16条微指令地址需要4位再加1位跳转标志是否跳转共5位。
**水平型微指令格式**16位
- 操作控制字段8位每位控制一个信号可同时激活多个
- 顺序控制字段4位地址 + 1位跳转标志 + 3位备用 = 8位
**垂直型微指令格式**8位
- 操作控制字段3位编码选择8种信号之一
- 顺序控制字段4位地址 + 1位跳转标志 = 5位
水平型微指令更灵活(一条指令可以同时控制多个操作),但占用更多空间;垂直型微指令更紧凑,但需要更多条微指令才能完成同样的功能。
---
## ⚡ 知识点速记卡
> 考前快速过一遍30秒回忆整章核心
**两种CU设计方法**组合逻辑硬连线快但难改vs 微程序ROM存控制信号灵活但慢
**组合逻辑CU三部件**:操作码译码器(指令→控制信号)、节拍发生器(产生时序)、控制单元(综合输出)。
**节拍安排三原则**顺序原则先MAR后读内存、并行原则不同部件可同时工作、紧凑原则短操作放同一节拍
**取指周期三拍**T₀=PC→MAR+1→RT₁=M(MAR)→MDR+(PC)+1→PCT₂=MDR→IR+OP(IR)→ID。
**微程序核心三概念**微指令一组控制信号、微程序微指令序列一条机器指令对应一个微程序、控制存储器CS存微程序的ROM
**水平型 vs 垂直型微指令**水平型位长可并行多信号快但占空间vs 垂直型(位短,编码方式,省空间但慢)。
**微程序设计四步**分析指令→设计微指令格式→编写微程序→固化到ROM。核心思想用数据ROM代替逻辑电路
**选择策略**追求速度→组合逻辑RISC追求灵活→微程序CISC。现代CPU常混合使用。
---
## 🔗 相关链接
- [[00_计算机组成原理学习指南]] - 返回主目录
- [[09_控制单元功能]] - 上一章
- [[01_计算机系统概论]] - 返回第一章
---
## 📚 参考资料
- 教材《计算机组成原理》第3版 - 唐朔飞
- 复习资料:计算机组成原理知识点总结
- 习题:作业三、作业四
---
*本章难度:⭐⭐⭐⭐⭐ 困难*
*重要程度:⭐⭐⭐⭐⭐ 重点*
*补充版本:增加了通俗解释、实际例子和例题*