# 第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_计算机组成原理学习指南]] - 返回主目录

---

*本章难度：⭐⭐⭐⭐⭐ 困难*
*重要程度：⭐⭐⭐⭐⭐ 核心重点*