Chap3 CPU 子系统
返回:0500 计算机组成原理总目录 · 上一章:0502 Chap2 数据的表示、运算与校验 · 下一章:0504 Chap4 存储子系统
1、学习目标
CPU 子系统解释一条指令如何被取出、译码、执行并写回结果。本章是组成原理的中轴:数据表示告诉 CPU 算什么,存储系统告诉 CPU 从哪里取,I/O 告诉 CPU 如何和外设协作。
| 模块 | 要掌握的内容 |
|---|---|
| CPU 结构 | 数据通路、控制器、寄存器、ALU |
| 指令系统 | 指令格式、操作码、地址码、CISC/RISC |
| 寻址方式 | 立即、直接、间接、寄存器、基址、变址、相对 |
| 运算器 | 加法器、进位逻辑、ALU 组织 |
| 处理器设计 | MIPS32 单周期数据通路和控制信号 |
| 性能提升 | 流水线、超标量、SMT、多核 |
2、CPU 基本结构
CPU 的核心部件:
| 部件 | 功能 |
|---|---|
| PC | 保存下一条指令地址 |
| IR | 保存当前指令 |
| 寄存器组 | 保存操作数、地址和中间结果 |
| ALU | 执行算术逻辑运算 |
| 控制器 | 根据指令产生控制信号 |
| 数据通路 | 连接各部件的数据流路径 |
指令执行基本流程:
1 | 取指 -> 译码 -> 取数 -> 执行 -> 访存 -> 写回 -> 更新 PC |
不同指令不一定都需要所有阶段,比如纯寄存器加法不需要数据访存。
3、指令系统
指令由操作码和地址码组成:
1 | opcode + operand/address fields |
| 字段 | 含义 |
|---|---|
| 操作码 | 做什么操作,如加、减、转移、访存 |
| 地址码 | 操作数在哪里,或结果写到哪里 |
指令系统设计影响:
- 编译器如何生成代码。
- CPU 数据通路复杂度。
- 程序代码长度。
- 执行速度和能耗。
4、CISC 与 RISC
| 类型 | 特点 |
|---|---|
| CISC | 指令复杂、寻址方式多、单条指令功能强 |
| RISC | 指令规整、格式简单、load/store 结构、便于流水线 |
RISC 的典型思想:
1 | 只有 load/store 访问内存,运算主要在寄存器之间进行。 |
MIPS、RISC-V 都属于 RISC 思路。
5、寻址方式
| 寻址方式 | 有效地址或操作数 |
|---|---|
| 立即寻址 | 指令字段本身就是操作数 |
| 直接寻址 | 指令字段给出内存地址 |
| 间接寻址 | 指令字段指向的内存单元中保存地址 |
| 寄存器寻址 | 操作数在寄存器中 |
| 寄存器间接 | 寄存器中保存内存地址 |
| 基址寻址 | 基址寄存器 + 偏移 |
| 变址寻址 | 变址寄存器 + 偏移 |
| 相对寻址 | PC + 偏移 |
相对寻址常用于分支跳转,基址/变址适合数组和结构体访问。
6、运算部件与 ALU
ALU 常支持:
- 加法、减法。
- 与、或、非、异或。
- 移位。
- 比较。
- 标志位生成。
加法器是运算器基础。串行进位简单但慢,并行进位和分组进位能提升速度。
溢出、零、符号、进位等标志位会影响条件转移指令。
7、单周期处理器
单周期处理器中,一条指令在一个时钟周期内完成。
典型数据通路包括:
1 | PC -> 指令存储器 -> 寄存器堆 -> ALU -> 数据存储器 -> 写回 |
控制器根据操作码产生:
| 控制信号 | 作用 |
|---|---|
| RegWrite | 是否写寄存器 |
| MemRead | 是否读内存 |
| MemWrite | 是否写内存 |
| MemToReg | 写回数据来自内存还是 ALU |
| ALUSrc | ALU 第二操作数来自寄存器还是立即数 |
| Branch | 是否分支 |
| PCSrc | 下一条 PC 来源 |
单周期设计直观,但周期必须按最慢指令设置,因此性能不高。
8、指令时间特性
单周期 CPU:
1 | 时钟周期 >= 最慢指令执行时间 |
多周期 CPU:
1 | 不同指令可用不同数量周期,复用硬件部件。 |
流水线 CPU:
1 | 把一条指令拆成多个阶段,多条指令重叠执行。 |
9、流水线
经典五级流水:
| 阶段 | 含义 |
|---|---|
| IF | 取指 |
| ID | 译码/读寄存器 |
| EX | 执行/地址计算 |
| MEM | 访存 |
| WB | 写回 |
流水线提高吞吐率,但不一定减少单条指令延迟。
冒险:
| 冒险 | 说明 | 常见处理 |
|---|---|---|
| 结构冒险 | 硬件资源冲突 | 增加资源、暂停 |
| 数据冒险 | 后指令依赖前指令结果 | 转发、暂停 |
| 控制冒险 | 分支导致下一条指令不确定 | 分支预测、延迟槽、清空 |
10、高级性能技术
| 技术 | 作用 |
|---|---|
| 超流水 | 进一步细分流水阶段 |
| 超标量 | 一个周期发射多条指令 |
| 乱序执行 | 不按程序顺序执行独立指令 |
| SMT | 同一核心同时执行多个线程 |
| 多核 | 多个处理核心并行工作 |
这些技术本质都在提高并行性,但会带来控制、同步、缓存一致性等复杂问题。
11、易错点
| 易错点 | 修正 |
|---|---|
| 单周期以为一条指令很快 | 单周期周期长,按最慢指令定 |
| 流水线减少单条指令延迟 | 流水线主要提高吞吐率 |
| RISC 以为指令一定更少 | RISC 指令简单,程序指令数可能更多 |
| 寻址方式和地址内容混淆 | 有效地址和操作数要分清 |
| 控制信号死记 | 结合数据通路理解它控制哪个选择器或写使能 |
12、复盘清单
| 检查项 | 状态 |
|---|---|
| 能画出指令执行基本流程 | 待复盘 |
| 能区分 CISC 和 RISC | 待复盘 |
| 能判断常见寻址方式 | 待复盘 |
| 能解释 ALU 和标志位作用 | 待复盘 |
| 能说出单周期 MIPS 数据通路主线 | 待复盘 |
| 能区分三类流水线冒险 | 待复盘 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ruiqy~!







