一个能跑、能测、带缓存的 RV32I 子集 CPU。
这是一个基于 Verilog-2001 实现的 32 位 RISC-V 处理器(不不不是MIPS) 。 架构是经典的 5 级流水线 (IF/ID/EX/MEM/WB) 。该有的冒险处理和缓存都有。
支持 RV32I 基础指令集 (29条),包括算术、逻辑、分支跳转、访存 。
- Data Hazard: 全Forwarding处理 (EX/MEM -> EX, MEM/WB -> EX),除了 Load-Use 都能流水执行 。
- Load-Use Hazard: 硬件检测并插入 Bubble (Stall) 。
- Control Hazard: 分支预测失败时自动 Flush 流水线 。
- I-Cache: Direct-mapped, 16B Line 。
- D-Cache: Write-through, No-write-allocate 。
支持通过参数一键开关 Cache 进行性能对比 (A/B Test) 。
支持最基础的 irq_ext 中断信号及 mret 返回 。
别去点 Vivado 的 GUI 按钮了,直接用脚本跑。环境要求:Windows + Vivado 。
双击 run_sim.bat 。 会自动编译并运行所有测试点 (isa, stall, cache 等) 。 看着终端飘绿色的 PASS 就行。
双击 run_demo_bfs_wave.bat 。 这是一个 16x16 的迷宫寻路算法演示 。 跑完会自动打开波形,你可以看到 CPU 是怎么算最短路径的。
.
├── rtl/ # 核心代码
│ ├── core/ # 流水线各级模块 (alu, controller, datapath...)
│ └── mem/ # Cache 和 RAM 实现
├── sim/ # Testbench 和 测试程序
│ ├── tests/ # 各种指令的定向测试
│ └── programs/ # BFS Demo 的汇编和 hex
├── vivado/ # TCL 构建脚本 (没事别动) [cite: 2]
└── run_*.bat # 仿真启动脚本
在模拟器上,我给cache bypass加了4拍惩罚
- IPC: 在开启 Cache 的情况下,CPI 接近 1.5 。
- Cache 收益: 在 BFS 算法中,开启 Cache 相比关闭 Cache 有约 2.2x 到 5.0x 的性能提升 。
如果你发现了 Bug... 比如 bfs demo 开icache关dcache有概率会阻塞...(小声)