Appearance
多周期CPU数据通路
考情分析
多周期CPU是单周期到流水线的过渡概念,考研选择题会考"多周期相比单周期的优缺点""某阶段完成的操作"等。理解多周期有助于理解流水线冒险的根源。
多周期的基本思想
将每条指令的执行拆分为若干个步骤,每步占一个时钟周期。不同指令所需步骤数不同,简单指令(如 R 型)用较少周期,复杂指令(如 lw)用较多周期。
优点:时钟周期取决于最慢的单步操作(通常是一次 ALU 运算或一次访存),比单周期的时钟周期更短;各功能部件可在不同阶段复用。 缺点:需要增加中间寄存器保存阶段间的数据;控制逻辑变为时序逻辑(有限状态机)。
新增的中间寄存器
多周期在单周期数据通路基础上增加了以下暂存寄存器(程序员不可见):
| 寄存器 | 存放内容 |
|---|---|
| IR(指令寄存器) | 从内存取出的指令,保持整个执行过程 |
| MDR(内存数据寄存器) | 从内存读出的数据或待写入内存的数据 |
| A | 从寄存器堆读出的第一个操作数 |
| B | 从寄存器堆读出的第二个操作数 |
| ALUOut | ALU 运算结果,暂存供下一阶段使用 |
五个执行阶段
阶段1:取指(IF)
- 从内存读取指令送入 IR
- 利用 ALU 计算 PC+4(复用 ALU,不浪费)
- PC 更新为 PC+4
阶段2:指令译码/读寄存器(ID)
- 读取 rs 和 rt 对应的寄存器值到 A、B
- 同时提前计算分支目标地址(即使还不知道是否分支)
阶段3:执行/地址计算(EX)
根据指令类型:
| 指令类型 | ALU 操作 | 结果送入 |
|---|---|---|
| R型 | A op B(由funct决定) | ALUOut |
| lw/sw | A + 符号扩展(imm) | ALUOut(有效地址) |
| beq | A - B,检查 Zero | 直接更新 PC(若相等) |
阶段4:访存/R型完成(MEM)
- lw:
(读内存) - sw:
(写内存) - R型:
(写回寄存器,R型在此阶段结束)
阶段5:写回(WB,仅 lw 需要)
将从内存读出的数据写入目标寄存器。
各指令所需周期数
| 指令类型 | 所需周期 | 阶段 |
|---|---|---|
| R型(ADD/SUB等) | 4 | IF → ID → EX → MEM(写回) |
| lw | 5 | IF → ID → EX → MEM → WB |
| sw | 4 | IF → ID → EX → MEM |
| beq | 3 | IF → ID → EX |
| 无条件跳转 j | 3 | IF → ID → EX |
单周期 vs 多周期对比
| 对比项 | 单周期 | 多周期 |
|---|---|---|
| 时钟周期 | 最慢指令决定 | 最慢单步操作决定 |
| CPI | 恒为 1 | 3~5(视指令类型) |
| 硬件利用率 | 低(部件闲置) | 高(部件复用) |
| 存储器 | 指令/数据存储器分开 | 可用单一存储器 |
| 控制逻辑 | 组合逻辑 | 时序逻辑(状态机) |
| 性能 | 通常较低 | 通常更高 |
交互可视化
例题
例1:在多周期CPU中,lw指令比R型指令多几个周期?分别是哪些阶段?
解:lw 需要 5 个周期(IF → ID → EX → MEM → WB),R型需要 4 个周期(IF → ID → EX → MEM,其中MEM阶段完成写回)。lw 多出的第5个周期是 WB 阶段,用于将 MDR 中从内存读出的数据写入目标寄存器。
例2:多周期CPU中,为什么需要IR寄存器而单周期不需要?
解:单周期中指令存储器的输出在整个时钟周期内保持不变(只取一次指令),不需要额外锁存。多周期中存储器在不同阶段被复用(IF阶段取指令,MEM阶段读写数据),指令信息会被覆盖,因此必须在IF阶段将指令锁存到IR中,供后续阶段使用。
例3:某程序指令构成为:R型 40%、lw 30%、sw 15%、beq 10%、j 5%。在多周期CPU上平均CPI是多少?
解:
考点清单
- 多周期 CPU 使用有限状态机实现控制逻辑,每个状态对应一个阶段
- A、B、ALUOut、IR、MDR 是流水线寄存器的前身,流水线就是让多条指令同时处于不同阶段
- beq 只需 3 个周期,是因为分支判断在 EX 阶段完成,不需要访存和写回
- 多周期中存储器可以复用(取指和访存用同一个存储器,但在不同阶段)
- 阶段2计算分支地址属于"投机执行":先算好,若不是分支指令则结果丢弃