ISA 翻译成硬件:**数据通路(datapath)**是数据流的路,控制器决定每周期数据往哪流——两种控制方式、单周期 vs 多周期、指令周期划分。
注意:内存异步且慢(第 7、8 章),CPU 不能边算边等。MAR/MDR 作边界锁存器把「发地址/数据」与「等内存响应」拆成两阶段,让状态在时钟沿稳定——跨异步边界的信号必须寄存。
控制器把 IR 里的 opcode 译成控制信号(寄存器写使能、ALU 功能选择、存储器读写…):
| 硬布线控制 | 微程序控制 | |
|---|---|---|
| 原理 | 组合逻辑门直接由 opcode 算出控制信号 | 把每条指令对应一段「微指令」序列,存在控制存储器里 |
| 速度 | 快(一层门) | 慢(多查几次 ROM) |
| 可改 | 改指令要重设计电路 | 改微程序即可,灵活 |
| 复杂度 | 指令多则逻辑爆炸 | 规则、可扩展 |
| 典型 | RISC(RISC-V/ARM) | 早期 CISC(x86 复杂指令) |
对比:硬布线 = 为每条指令焊死专用逻辑;微程序 = 用一个只读程序解释指令,本质是「CPU 里又套一层解释器」(同构第 1 章层次结构)。现代折中:简单指令硬布线快跑,复杂指令(
rep movsb、复杂寻址)走微码。
一条 add r1, r2, r3(r1 = r2 + r3)单周期的数据流:
PC ──▶ 取指令 ──▶ IR(指令寄存器)
│
r2 ──▶ ┐ │ opcode 译码
r3 ──▶ ┼──▶ ALU ──▶ r1(写回)
│
控制信号(选通各数据源/目的地)
节点间用总线或专用连线,控制信号像扳道岔。两个关键:多路选择器(MUX) 在多个数据源里选一个进 ALU;寄存器文件同时读两个、写一个(一周期 rd = rs1 op rs2)。
一条指令一个时钟周期完成 = 单周期;拆多个周期 = 多周期。这是第 6 章流水线的前身。
| 单周期 | 多周期 | |
|---|---|---|
| 周期数/指令 | 1 | 若干(取指/译码/执行/访存…) |
| 时钟周期长度 | 由最慢指令决定(load 要访存+ALU) | 由最慢的阶段决定,周期可更短 |
| 功能部件 | 每条指令独占整个通路 | 不同阶段复用同一部件(ALU 被取指、执行共用) |
| 性能 | 简单,但浪费——快指令也要等慢指令 | CPI 大但周期短,净收益通常更好 |
| 硬件 | 部件不能复用,冗余 | 部件复用,省面积 |
注意:单周期的死穴是木桶效应——周期必须容纳最长的 load(取指+读寄存器+访存+写回),快指令大量空等。多周期拆长指令、周期变短,但 CPI 变大。流水线(第 6 章)两全其美:周期短 + 吞吐 1 IPC。
从取指到完成,一条指令的标准生命周期(也是流水线五级雏形):
① 取指周期 MAR←PC,读内存,IR←MDR,PC←PC+1(顺序)
② 间址周期 若寻址方式需要,再访存取操作数地址
③ 执行周期 操作数进 ALU 运算
④ 中断周期 若检测到中断请求,保存现场、转中断服务(第 9 章)
只有访存指令(load/store)才需完整的「访存」步骤——故单周期按 load 定周期是浪费。
对比:
PC←PC+1是顺序执行,call/jmp改 PC 打破顺序(第 10 章);「间址周期」即二级指针/间接寻址的硬件动作;「中断周期」是第 9 章中断处理前半段。