Skip to content

gugugaaa/riscv_cpu

Repository files navigation

RV32I 五级流水线 CPU (Verilog)

一个能跑、能测、带缓存的 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 。

1. 跑回归测试

双击 run_sim.bat 。 会自动编译并运行所有测试点 (isa, stall, cache 等) 。 看着终端飘绿色的 PASS 就行。

2. 跑迷宫演示 (BFS Demo)

双击 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有概率会阻塞...(小声)

About

合工大23级,硬件综合设计课设,RV32I多周期流水线

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Contributors