项目概述
本文记录在 Xilinx FPGA 上从零实现完整 RISC-V 五级流水线 CPU 的过程。该设计包含取指(IF)、译码(ID)、执行(EX)、访存(MEM)、写回(WB)五大阶段,并完整解决数据冒险与控制冒险问题,最终在 Digilent Nexys A7 开发板上成功运行自定义汇编程序。
为什么选择 RISC-V 与 FPGA?
- 开放免费:无授权费用,架构文档公开透明,寄存器编码规范清晰。
- 指令集简洁:RV32I 基础整数指令仅 40 余条,无历史包袱,适合教学与原型设计。
- 模块化扩展:基础架构稳定,后续可逐步扩展浮点、压缩指令(RVC)及向量扩展。
- FPGA 优势:硬件逻辑可重构,配合 ILA(集成逻辑分析仪)可实时观测内部信号波形,提供极高的调试透明度。
五级流水线核心原理
流水线技术通过让多条指令同时处于不同执行阶段来提升吞吐率。理想状态下,每个时钟周期可完成一条指令(CPI ≈ 1),加速比约为非流水线设计的 5 倍。
| 阶段 | 缩写 | 核心操作 | 硬件类比 |
|---|---|---|---|
| 取指 | IF | 根据 PC 读取指令 | 获取任务清单 |
| 译码 | ID | 解析指令,读取寄存器 | 准备执行原料 |
| 执行 | EX | ALU 运算或地址计算 | 核心加工处理 |
| 访存 | MEM | 读写数据存储器 | 存取外部数据 |
| 写回 | WB | 将结果写回寄存器堆 | 归档处理结果 |
流水线设计需重点解决三大冲突:结构冲突、数据冒险与控制冒险。
系统架构设计
系统采用哈佛架构(指令与数据存储器分离),基于 Xilinx Vivado 2023.1 工具链,目标器件为 XC7A35T。核心数据通路如下:
+----------------+ +----------------+
| PC Reg |---->| Inst ROM |
+-------+--------+ +-------+--------+
| |
+-------v----------------------+-------+
| IF Stage |
+-------------------+------------------+
|
+-------------------v------------------+
| ID Stage |
| Control Unit + RegFile Read |
+-------------------+------------------+
|
+-------------------v------------------+
| EX Stage |
| ALU Control + ALU Operation |
+-------------------+------------------+
|
+-------------------v------------------+
| MEM Stage |
| Data Memory (BRAM) + lw/sw |
+-------------------+------------------+
|
+-------------------v------------------+
| WB Stage |
| Write Mux + RegFile Write Enable |
+--------------------------------------+
关键辅助模块:
- Forwarding Unit(前递单元):解决 EX 阶段的数据依赖。

