数据通路
1. 数据通路概述
数据通路是 CPU 中执行数据处理的部分,包括寄存器文件、ALU、缓存接口等。
2. 主要组件
2.1 寄存器文件
- 32 个 32 位通用寄存器 (x0-x31)
- 双读端口,单写端口
- x0 固定为 0
2.2 ALU
- 支持 RISC-V 基本算术逻辑运算
- 32 位加法器
- 比较器
- 移位器
2.3 乘法器
- 32×32 位乘法
- MUL/MULH/MULHSU/MULHU 指令支持
3. 数据通路图
graph TB
subgraph IF["IF 级"]
PC[PC 寄存器]
I_CACHE[I-Cache]
end
subgraph ID["ID 级"]
REGFILE[寄存器文件]
IMM[立即数生成]
end
subgraph EX["EX 级"]
ALU[ALU]
MUL[乘法器]
end
subgraph MEM["MEM 级"]
D_CACHE[D-Cache]
end
subgraph WB["WB 级"]
WB_MUX[写回选择器]
end
PC --> I_CACHE
I_CACHE --> REGFILE
REGFILE --> ALU
REGFILE --> MUL
IMM --> ALU
ALU --> D_CACHE
MUL --> WB_MUX
D_CACHE --> WB_MUX
WB_MUX --> REGFILE
4. 数据流向
4.1 R-type 指令
| REGFILE[A] → ALU ← REGFILE[B] → ALU 结果 → WB_MUX → REGFILE[WD]
|
4.2 Load 指令
| REGFILE[Base] → ALU → 地址 → D_CACHE → 读回数据 → WB_MUX → REGFILE[WD]
|
4.3 Store 指令
| REGFILE[Base] → ALU → 地址 → D_CACHE
REGFILE[Data] → D_CACHE 写数据
|
4.4 Branch 指令
| REGFILE[A] → ALU 比较 ← REGFILE[B] → 分支决策 → PC 选择
|
5. 前递通路
| 前递源 | 前递目标 | 条件 |
| EX/MEM.EXE_result | EX.ALU operand | EX 级写寄存器 |
| MEM/WB.WB_result | EX.ALU operand | MEM 级写寄存器 |
| MEM/WB.WB_result | ID.REGFILE read | Load 后使用 |
6. 控制信号
| 信号 | 描述 |
| RegWrite | 寄存器写使能 |
| ALUSrc | ALU 第二操作数选择 (0:寄存器, 1:立即数) |
| MemToReg | 写回数据选择 (0:ALU, 1:内存) |
| MemRead | 内存读使能 |
| MemWrite | 内存写使能 |
| Branch | 分支使能 |
| Jump | 跳转使能 |