精简版 · 小杯2026-08 冻结,已停止更新(发布前修订了 4 处已知错误)。后续勘误与新增内容只在正式版。看正式版(中杯)→
Skip to content

单周期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

数据流:

  1. PC → 指令存储器,取出指令
  2. 指令中 rs、rt 字段 → 寄存器堆,读两个操作数
  3. 两个操作数 → ALU,执行 funct 指定的运算
  4. ALU 结果 → 寄存器堆,写入 rd 号寄存器

控制信号:RegDst=1, ALUSrc=0, MemToReg=0, RegWrite=1, MemRead=0, MemWrite=0, Branch=0

lw 指令(Load Word)

格式:lw rt, imm(rs),功能:rtM[rs+imm]

数据流:

  1. 取指令
  2. 读寄存器 rs
  3. 符号扩展 imm(16位 → 32位)
  4. ALU 计算 rs + 立即数,得到有效地址
  5. 有效地址 → 数据存储器,读出数据
  6. 读出数据 → 寄存器堆,写入 rt

控制信号:RegDst=0, ALUSrc=1, MemToReg=1, RegWrite=1, MemRead=1, MemWrite=0, Branch=0

sw 指令(Store Word)

格式:sw rt, imm(rs),功能:M[rs+imm]rt

数据流:

  1. 取指令
  2. 读寄存器 rs 和 rt
  3. 符号扩展 imm
  4. ALU 计算基址 + 偏移 = 有效地址
  5. 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

数据流:

  1. 取指令,同时 PC+4 计算完毕
  2. 读寄存器 rs 和 rt
  3. ALU 计算 rs - rt,检查零标志 Zero
  4. 符号扩展后左移2位的偏移量 + (PC+4) = 分支目标地址
  5. 若 Zero=1 且 Branch=1,则 PC ← 分支目标地址;否则 PC ← PC+4

控制信号:RegDst=x, ALUSrc=0, MemToReg=x, RegWrite=0, MemRead=0, MemWrite=0, Branch=1

图 5.16 完整的单周期数据通路
图 5.16 完整的单周期数据通路
(袁春风《计算机组成与系统结构》第 3 版,见文末教材出处)

这张图是把前面按指令类型逐步搭出来的四张通路(R 型 / I 型运算 / load-store / 分支)合并的结果。图上带下划线的名字(RegWr、RegDst、ALUSrc、ExtOp、ALUctr、MemWr、MemtoReg、Branch、Jump)就是控制器要产生的全部控制信号。

控制信号汇总表

指令RegDstALUSrcMemToRegRegWriteMemReadMemWriteBranch
R型1001000
lw0111100
swx1x0010
beqx0x0001

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(无关项)不影响功能但影响电路设计

真题练习

教材出处

  • 完整的单周期数据通路与控制信号(图 5.16):袁春风《计算机组成与系统结构》第 3 版 §5.2 单周期处理器,印刷页 p143