首页/计算机组成原理/中央处理器/数据通路 🔗 在 Obsidian 中打开
计算机组成原理 · 中央处理器

数据通路

重要度 ⭐⭐⭐⭐⭐中央处理器总线寄存器ALU控制信号CPU
速查
数据通路是 CPU 中数据流经的路径,由寄存器、ALU、总线、多路选择器组成。按总线数量分 单总线 / 双总线 / 三总线,总线越多可并行性越强、单条指令周期越短。

速查

项目
组成寄存器、ALU、总线、多路选择器
类型单总线、双总线、三总线

概述

数据通路(Datapath)是 CPU 中数据流经的路径,包括寄存器、ALU、总线和各种多路选择器。数据通路的设计直接决定了 CPU 能执行什么操作以及操作的速度。

数据通路的基本组成

功能部件

1. 寄存器组(Register File)
2. ALU(算术逻辑单元)
3. 存储器接口(MAR, MDR)
4. 多路选择器(MUX)
5. 移位器(Shifter)
6. 总线(Bus)

连接方式

寄存器组 ──→ ALU ──→ 结果总线 ──→ 寄存器组/MDR
                 ↑
              MUX选择
                 ↑
         立即数/偏移量

单总线数据通路

结构

所有部件连接到同一组总线
同一时刻只能有一个部件输出到总线

寄存器组 ──→ 内部总线 ←── ALU
              ↕           ↑
           MDR/MAR      A/B寄存器
特点优点:硬件简单、成本低;缺点:速度慢,同一时刻只能传输一个数据。适用于简单 CPU。

操作示例(ADD R1, R2)

时钟周期1:R2 → 总线 → A(ALU 输入A)
时钟周期2:R1 → 总线 → B(ALU 输入B)
时钟周期3:ALU 执行加法,结果 → 总线 → R1
需要 3 个时钟周期!

双总线数据通路

结构

两条独立的总线,可同时传输两个操作数

总线A ←── 寄存器组 ──→ 总线B
   ↓                    ↓
   └───→ ALU ──────→ 结果寄存器 ──→ 总线A
特点可同时读取两个操作数;比单总线快,比三总线简单。

操作示例(ADD R1, R2)

时钟周期1:R1 → 总线A,R2 → 总线B
时钟周期2:ALU 计算,结果 → R1
只需 2 个时钟周期!

三总线数据通路

结构

三条总线:两条输入,一条输出

总线A ←── 寄存器组 ──→ 总线B
   ↓         ↑            ↓
   └───→ ALU ←────────────┘
           ↓
        总线C(结果总线)
           ↓
        寄存器组
特点最快:单周期完成运算;但硬件最复杂。

操作示例(ADD R1, R2)

时钟周期1:R1 → 总线A,R2 → 总线B,ALU 计算,结果 → 总线C → R1
1 个时钟周期完成!

MIPS 数据通路

主要部件

1. 指令存储器(IM)   2. 寄存器组(32×32位)
3. ALU                 4. 数据存储器(DM)
5. 控制单元            6. 各种 MUX

指令执行路径

R 型(ADD rd, rs, rt):IF→IR;ID→A,B;EX→A+B;WB→Rd。

Load(LW rt, offset(rs)):EX→A+offset;MEM→DM;WB→Rt。

Store(SW rt, offset(rs)):EX→A+offset;MEM→B 写入 DM(无 WB)。

分支(BEQ rs, rt, offset):EX→A−B,为 0 则 PC←PC+4+offset<<2。

单周期 CPU 的问题时钟周期由最慢的指令(通常是 Load)决定,每条指令都要等最慢的时间。

多周期数据通路

将指令执行分为多个时钟周期(IF / ID / EX / MEM / WB 各 1 周期),不同阶段可共享硬件(ALU 复用于地址计算、加减、比较;存储器复用于取指和读写数据)。

控制信号

主要控制信号

信号功能
RegDst选择写入的寄存器号(rd 还是 rt)
RegWrite使能寄存器写入
ALUSrcALU 的 B 输入来源(寄存器还是立即数)
ALUOpALU 操作类型
MemRead存储器读使能
MemWrite存储器写使能
MemtoReg写入寄存器的数据来源(ALU 还是存储器)
PCSourcePC 的来源(PC+4、分支地址、跳转地址)

控制信号真值表(部分)

指令RegDstRegWriteALUSrcMemReadMemWriteMemtoReg
R-type110000
LW011101
SWx0101x
BEQx0000x

数据通路设计的关键问题

  1. 时序约束:所有操作必须在一个时钟周期内完成(单周期);时钟周期 $\geq$ 最长路径延迟。
  2. 数据冒险:后续指令需要前面指令的结果 → 前递(Forwarding)、阻塞(Stalling)。
  3. 控制冒险:分支指令导致流水线清空 → 分支预测、延迟槽。

易错点

必记
  1. 单总线数据通路同一时刻只能传一个数据。
  2. 三总线可以单周期完成运算,但硬件最复杂。
  3. Load 指令是最慢的指令(IF+ID+EX+MEM+WB)。
  4. 控制信号由控制器根据指令操作码产生。
  5. ALU 在不同指令中可能做不同操作(加、减、比较)。
  6. PC 的更新可能有多个来源(PC+4、分支、跳转)。
  7. 多周期设计可以复用硬件,节省成本。

交互动画 · 单/双/三总线对比

寄存器组 ALU MDR/MAR 内部总线(同一时刻仅 1 个部件可输出)
橙色连接线表示数据流向;单总线所有部件共用一条总线,双/三总线可并行取操作数与回写结果。

选择指令,逐步观察它在「取指 → 译码 → 取数 → 执行 → 访存/写回」各周期中流经的数据通路(橙色 = 数据流,青绿 = 写回,棕黄 = PC 更新)。

取指 IF取指 IF译码 ID控制信号 取数执行 EX访存 MEM PC程序计数器 IM指令存储器 IR指令寄存器 控制单元译码 → 控制信号 符号扩展立即数 8 → 32 位 寄存器组R1=10 R2=20 R4=40 … A 锁存器源操作数 1 B 锁存器源操作数 2 / 数据 ALU加 / 减 / 比较 / 地址 DM数据存储器
数据流动写回寄存器PC 更新 / 分支

相关知识点

cpu-function-and-structure instruction-execution

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。