# 第10章 控制单元的设计 > 📖 本章介绍控制单元的两种设计方法:组合逻辑设计和微程序设计。 > 🎯 重点理解微程序设计方法 --- ## 📋 本章目录 - [[#10.1 组合逻辑设计]] - [[#10.2 微程序设计]] - [[#本章小结]] --- ## 10.1 组合逻辑设计 ### 10.1.1 组合逻辑控制单元框图 ```mermaid graph TB subgraph "组合逻辑控制单元" IR[IR
指令寄存器] --> |"操作码"| 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_计算机组成原理学习指南]] - 返回主目录 --- *本章难度:⭐⭐⭐⭐⭐ 困难* *重要程度:⭐⭐⭐⭐⭐ 核心重点*