| 项目 | 值 |
|---|---|
| 组成 | 寄存器、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寄存器
时钟周期1:R2 → 总线 → A(ALU 输入A)
时钟周期2:R1 → 总线 → B(ALU 输入B)
时钟周期3:ALU 执行加法,结果 → 总线 → R1
需要 3 个时钟周期!
两条独立的总线,可同时传输两个操作数
总线A ←── 寄存器组 ──→ 总线B
↓ ↓
└───→ ALU ──────→ 结果寄存器 ──→ 总线A
时钟周期1:R1 → 总线A,R2 → 总线B
时钟周期2:ALU 计算,结果 → R1
只需 2 个时钟周期!
三条总线:两条输入,一条输出
总线A ←── 寄存器组 ──→ 总线B
↓ ↑ ↓
└───→ ALU ←────────────┘
↓
总线C(结果总线)
↓
寄存器组
时钟周期1:R1 → 总线A,R2 → 总线B,ALU 计算,结果 → 总线C → R1
1 个时钟周期完成!
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。
将指令执行分为多个时钟周期(IF / ID / EX / MEM / WB 各 1 周期),不同阶段可共享硬件(ALU 复用于地址计算、加减、比较;存储器复用于取指和读写数据)。
| 信号 | 功能 |
|---|---|
| RegDst | 选择写入的寄存器号(rd 还是 rt) |
| RegWrite | 使能寄存器写入 |
| ALUSrc | ALU 的 B 输入来源(寄存器还是立即数) |
| ALUOp | ALU 操作类型 |
| MemRead | 存储器读使能 |
| MemWrite | 存储器写使能 |
| MemtoReg | 写入寄存器的数据来源(ALU 还是存储器) |
| PCSource | PC 的来源(PC+4、分支地址、跳转地址) |
| 指令 | RegDst | RegWrite | ALUSrc | MemRead | MemWrite | MemtoReg |
|---|---|---|---|---|---|---|
| R-type | 1 | 1 | 0 | 0 | 0 | 0 |
| LW | 0 | 1 | 1 | 1 | 0 | 1 |
| SW | x | 0 | 1 | 0 | 1 | x |
| BEQ | x | 0 | 0 | 0 | 0 | x |
选择指令,逐步观察它在「取指 → 译码 → 取数 → 执行 → 访存/写回」各周期中流经的数据通路(橙色 = 数据流,青绿 = 写回,棕黄 = PC 更新)。
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。