从一块 FPGA 开始,亲手造一颗 CPU:RISC-V 五级流水线实战全记录
设计处理器是数字世界的核心挑战。本文介绍如何在 Xilinx FPGA 上,用 Verilog 从零实现一个完整的 RISC-V 五级流水线 CPU。包含取指、译码、执行、访存、写回五大阶段,并解决真实数据冒险与控制冒险的可运行核心。
为什么选择 RISC-V + FPGA?
- 开放免费:没有授权费,文档齐全,寄存器编码明确。
- 简洁清晰:RV32I 只有 40 多条指令,无历史包袱。
- 模块化扩展:基础整数指令够用,后续可加浮点、压缩指令、向量扩展。
FPGA 允许灵活修改逻辑,重新综合后快速烧录验证。ILA(集成逻辑分析仪)可以抓取内部任意信号波形,提供芯片级调试的透明度。
五级流水线:让 CPU'并行'起来的秘密
现代 CPU 靠让多条指令同时处于不同阶段来提高吞吐率。
拆解五大阶段
| 阶段 | 对应操作 | 类比 |
|---|---|---|
| IF(Instruction Fetch) | 根据 PC 读取指令 | 店员去仓库拿食谱 |
| ID(Instruction Decode) | 解码指令,读取寄存器值 | 看懂食谱,准备好原料 |
| EX(Execute) | ALU 运算或地址计算 | 开始揉面、发酵 |
| MEM(Memory Access) | 访问内存(load/store) | 把成品放进/拿出烤箱 |
| WB(Write Back) | 写结果回寄存器 | 把做好的面包摆上货架 |
理想情况下,每个时钟周期都有一个新任务进入流程。关键指标:CPI ≈ 1,加速比 ≈ 5 倍于非流水线设计。
但现实会遇到三大障碍:结构冲突、数据冒险、控制冒险。
如何在 Xilinx FPGA 上搭建这个 CPU?
目标:使用 Digilent Nexys A7 开发板(XC7A35T),基于 Vivado 2023.1 工具链,构建完整 SoC。
系统架构总览
整个系统采用哈佛架构(分离指令与数据存储),关键模块如下:
+------------------+
| Clock (50MHz) |
+--------+---------+
|
+------------------+------------------+
| | |
+-------v--------+ +---------v---------+
PC Reg Inst ROM (BRAM)
IF Stage
( instruction PC)
ID
Control Unit ← Opcode Decoder
RegFile Read ← rs1, rs2
EX
ALU Control ← funct3funct7
ALU Operation (subsltetc.)
MEM
Data Memory (Block RAM)
Handle lwsw
WB
Write Mux ← ALU MEM data
RegFile Write Enable

