Appearance
单周期CPU数据通路
大纲定位
五(三)数据通路的功能和基本结构
要求:能读懂给定的数据通路图,指出某条指令在通路上的数据流向,以及各控制信号在该指令下的取值。
考情分析
数据通路是理解CPU工作原理的核心,408考研在选择题和综合题中会考"某信号的值""某操作的数据流"。单周期是流水线的基础,理解它才能分析后续的多周期与流水线。
教学模型说明
本文采用 MIPS 风格的教学模型(RegDst、ALUSrc、MemToReg 这套信号命名),便于理解"指令如何流过通路"。408 统考综合题考的是唐朔飞式的自定义数据通路(单总线结构 + 题目自带的信号约定),不会直接用 MIPS 这套信号名命题。用本文建立直觉,做真题时按题给通路答题。
单周期的基本思想
每条指令在一个时钟周期内完成执行,时钟周期长度取决于最慢的指令(通常是 load 指令,它的关键路径最长:取指 → 读寄存器 → ALU 算地址 → 读数据存储器 → 写回寄存器,串起了全部五个环节)。
优点:控制逻辑简单。 缺点:时钟周期被最慢指令拖长,简单指令(如加法)也需等待同样长的时间,效率低。
主要功能部件
| 部件 | 功能 |
|---|---|
| 程序计数器(PC) | 存放当前指令地址 |
| 指令存储器 | 根据 PC 输出指令(只读) |
| 寄存器堆 | 读写通用寄存器,有两个读端口、一个写端口 |
| ALU | 执行算术/逻辑运算,输出结果和零标志 |
| 数据存储器 | 支持读(lw)和写(sw)两种操作 |
| 符号扩展单元 | 将16位立即数符号扩展为32位 |
| 加法器 | PC+4 计算器;分支目标地址计算器 |
| 多路选择器(MUX) | 根据控制信号选择不同的数据来源 |
控制信号
| 信号 | 作用 |
|---|---|
| RegDst | 选择目的寄存器编号来源(R型用rd,I型用rt) |
| ALUSrc | 选择ALU第二操作数(寄存器rt 或 立即数) |
| MemToReg | 选择写入寄存器的数据(ALU结果 或 内存读出值) |
| RegWrite | 允许写寄存器堆 |
| MemRead | 读数据存储器 |
| MemWrite | 写数据存储器 |
| Branch | 分支控制,与ALU零标志 AND 后控制 PC 选择 |
| ALUOp | 告知ALU控制单元执行哪类操作 |
各类指令的数据通路
R型指令(ADD/SUB/AND/OR/SLT)
格式:op | rs | rt | rd | shamt | funct
数据流:
- PC → 指令存储器,取出指令
- 指令中 rs、rt 字段 → 寄存器堆,读两个操作数
- 两个操作数 → ALU,执行 funct 指定的运算
- ALU 结果 → 寄存器堆,写入 rd 号寄存器
控制信号:RegDst=1, ALUSrc=0, MemToReg=0, RegWrite=1, MemRead=0, MemWrite=0, Branch=0
lw 指令(Load Word)
格式:lw rt, imm(rs),功能:
数据流:
- 取指令
- 读寄存器 rs
- 符号扩展 imm(16位 → 32位)
- ALU 计算 rs + 立即数,得到有效地址
- 有效地址 → 数据存储器,读出数据
- 读出数据 → 寄存器堆,写入 rt
控制信号:RegDst=0, ALUSrc=1, MemToReg=1, RegWrite=1, MemRead=1, MemWrite=0, Branch=0
sw 指令(Store Word)
格式:sw rt, imm(rs),功能:
数据流:
- 取指令
- 读寄存器 rs 和 rt
- 符号扩展 imm
- ALU 计算基址 + 偏移 = 有效地址
- rt 的值 → 数据存储器,写入有效地址
控制信号:RegDst=x, ALUSrc=1, MemToReg=x, RegWrite=0, MemRead=0, MemWrite=1, Branch=0
beq 指令(Branch if Equal)
格式:beq rs, rt, label,功能:若 rs == rt,则 PC ← PC+4 + imm×4
数据流:
- 取指令,同时 PC+4 计算完毕
- 读寄存器 rs 和 rt
- ALU 计算 rs - rt,检查零标志 Zero
- 符号扩展后左移2位的偏移量 + (PC+4) = 分支目标地址
- 若 Zero=1 且 Branch=1,则 PC ← 分支目标地址;否则 PC ← PC+4
控制信号:RegDst=x, ALUSrc=0, MemToReg=x, RegWrite=0, MemRead=0, MemWrite=0, Branch=1

(袁春风《计算机组成与系统结构》第 3 版,见文末教材出处)
这张图是把前面按指令类型逐步搭出来的四张通路(R 型 / I 型运算 / load-store / 分支)合并的结果。图上带下划线的名字(RegWr、RegDst、ALUSrc、ExtOp、ALUctr、MemWr、MemtoReg、Branch、Jump)就是控制器要产生的全部控制信号。
控制信号汇总表
| 指令 | RegDst | ALUSrc | MemToReg | RegWrite | MemRead | MemWrite | Branch |
|---|---|---|---|---|---|---|---|
| R型 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
| lw | 0 | 1 | 1 | 1 | 1 | 0 | 0 |
| sw | x | 1 | x | 0 | 0 | 1 | 0 |
| beq | x | 0 | x | 0 | 0 | 0 | 1 |
x 表示无关项(don't care)。
交互可视化
单周期为什么不能用单总线结构
这是判断题的固定落点
单周期数据通路不可能采用 CPU 内部单总线结构。
理由很直接:内部单总线同一时刻只能传送一个数据。而执行一条指令至少要在总线上传好几趟——取指要走一趟(PC→MAR、MDR→IR),读操作数走一趟,写结果又走一趟。这些传送必须分时进行,也就必须占用多个时钟周期。
一旦需要多个时钟周期,它就不是单周期 CPU 了。
所以单周期 CPU 必须用专用数据通路(部件之间直接连线,多路数据同时流动),代价是连线多、电路复杂。反过来,唐朔飞式的单总线数据通路一定是多周期的——这也是统考综合题里那类通路每步都要数时钟周期的原因。
顺带把单周期的另外几条判断也列清楚:
| 说法 | 对错 | 理由 |
|---|---|---|
| 每条指令的 CPI 为 1 | ✓ | 单周期的定义 |
| 处理器时钟频率较低 | ✓ | 周期要装下最慢那条指令的完整通路延迟 |
| 指令执行过程中控制信号不变 | ✓ | 控制信号由组合逻辑直接从操作码译出,一个周期内一直保持 |
| 可以采用单总线结构数据通路 | ✗ | 见上 |
第三条容易被当成错的——"一条指令要做那么多步,信号怎么可能不变?"但单周期里那些步骤是同时在空间上展开的(各部件同时工作),不是在时间上分步的,所以控制信号自始至终是同一组值。控制信号随步骤变化的是多周期 CPU。
考点清单
- 单周期不能用单总线结构,必须用专用数据通路;单总线必然多周期
- 单周期一条指令内控制信号保持不变(组合逻辑直接译出);多周期才逐步变化
- 单周期 CPI = 1,但时钟周期由最慢指令决定(通常是 lw)
- 指令存储器和数据存储器分开(哈佛结构),避免取指和访存冲突
- R型指令不访存,但仍需等待完整的时钟周期
- beq 使用 ALU 做减法来判断相等,而不是专用比较器
- 分支目标地址 = PC+4 + 符号扩展(imm) × 4(立即数单位是字,需左移2位转换为字节偏移)
- RegDst、MemToReg 等信号的 x(无关项)不影响功能但影响电路设计
真题练习
相关真题(21题)
教材出处
- 完整的单周期数据通路与控制信号(图 5.16):袁春风《计算机组成与系统结构》第 3 版 §5.2 单周期处理器,印刷页 p143