概述
SystemVerilog 实现的五级顺序执行 RV32I 处理器核:IF、ID、EX、MEM、WB。2024 年 9 月为 ECE 411 首次实现,2026 年 9 月以更清晰的 hazard 处理重写;本页描述 2026 版。

Hazard 与控制
- Forwarding。四条路径:rs1 和 rs2 各有 MEM 到 EX、WB 到 EX 两条。Register file 是 write-through 的,同一周期的读能读到新写入的值。
- Load-use。Load 后面紧跟依赖它的指令时,前端 stall 一个周期。
- 分支。静态预测为 not-taken。分支和跳转在 EX 级解析;分支 taken 时 flush IF 和 ID,代价 2 个周期。
- 访存握手。存储器的响应只有效一个周期。指令侧和数据侧各有 hold 寄存器,保存另一侧 stall 时到达的响应。



验证
- RVFI 上报每条 retire 的指令。Spike 运行同一程序,两份 commit log 逐条指令比对。
- 该比对发现过一个 stall 时取指级丢指令的问题,由指令侧的 hold 寄存器修复。
结果
| 指标 | 数值 |
|---|---|
| CoreMark IPC | 0.70(理想存储器) |
| 依赖密集、无分支的代码 | IPC 0.998 |
| 时钟 | 2.0 ns(500 MHz),Design Compiler 综合满足时序 |
| 2024 版综合 | Nangate 45 nm,13,802 µm²,register file 占面积 62% |
与 2024 版的区别
2024 版在译码级做 bypass 和分支比较,遇到每个 load 和 store 都让取指 stall,也没有 hold 寄存器。重写后分支解析移到 EX 级,并加入 load-use 检测和 hold 寄存器。
Discussion
Loading comments…
Checking sign-in…