Skip to content

五级流水线 RV32I 处理器

顺序执行的 RV32I 流水线:4 条 forwarding 路径、1 个周期的 load-use stall、分支在 EX 级解析,并通过 RVFI 与 Spike 协同仿真。

CPU RTL RISC-V Verif
Contents

概述

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

五级流水线总览:各级、流水线寄存器、forwarding 路径和七个关键设计决策

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 时到达的响应。

执行级与 forwarding:forward mux、ALU、比较器和分支目标

Hazard 与 flush:forwarding、load-use 和分支 taken 的逐周期时序

访存与 stall:byte lane、stall 控制和 hold 寄存器

验证

  • RVFI 上报每条 retire 的指令。Spike 运行同一程序,两份 commit log 逐条指令比对。
  • 该比对发现过一个 stall 时取指级丢指令的问题,由指令侧的 hold 寄存器修复。

结果

指标数值
CoreMark IPC0.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…