RISCBoy 开源便携式 RISC‑V 游戏机概述
RISCBoy 开源便携式 RISC‑V 游戏机概述
RISCBoy 在单个低成本 FPGA 上实现完整的手持游戏机
RISCBoy 是一款完全开源的便携式游戏机,在 iCE40‑HX8k FPGA 上实现了自定义 RISC‑V CPU、光栅图形流水线和完整的外设基础设施,证明了 32 位游戏系统可以装进一个体积小、价格低的设备中。
核心架构:RISC‑V CPU、总线结构和图形
RISCBoy 集成了兼容 RV32IMC 的处理器,已通过官方 RISC‑V 合规性套件和形式化验证检查。 CPU 包含 M‑mode CSR、异常处理以及向量化中断扩展,为游戏软件提供了坚实的基础。
系统总线是带有 APB 外设的 AHB‑lite 交叉开关(UART、GPIO、SPI、PWM 等),实现了 CPU、内存控制器和自定义图形单元之间的高效通信。
图形流水线是基于扫描线缓冲区的光栅引擎,驱动显示控制器,详见项目的 PDF 文档。该设计借鉴了经典 Game Boy Advance 的渲染方式,但完全使用可综合的 Verilog 2005 实现。
FPGA 目标:iCE40‑HX8k 约束与工具链
整个游戏机能够装入 Lattice iCE40‑HX8k FPGA(7680 逻辑单元)中。 为实现此密度,需要精心的 RTL 设计和资源感知的编码实践。
开源工具链: 综合使用 Yosys,布局布线使用 nextpnr,位流生成依赖 Project Icestorm。这些工具可在 Linux 上运行,甚至可以在 Raspberry Pi 上编译。
其他 FPGA 支持: 还有针对 Lattice ECP5(LEF5UM5G‑85F‑EVN)的实验性构建,使用内部 256 KiB 32 位同步存储器取代外部 512 KiB SRAM。
软件栈:RV32IMC 工具链与测试套件
RV32IMC GNU 工具链: 项目提供了构建自定义 RISC‑V GNU 工具链的说明,配置为 RV32IMC ISA(--with-arch=rv32imc,--with-abi=ilp32)。多库设置会为所有支持的 ISA 变体生成标准库,避免编译后的二进制与处理器配置不匹配。
测试: 仓库中包含 HDL 级回归测试和在模拟器上运行的软件测试。仿真流程使用 Linux 上的 Xilinx ISIM 14.x,scripts/ 目录下有相应的 Makefile。初始化子模块后,可通过 ./runtests 启动测试。
PCB 设计与生产
KiCad PCB 布局: RISCBoy Rev A 板尺寸为 5 × 5 cm,四层设计,兼容 iTead 的打样服务(约 $65 可制作 10 块板)。原理图以 PDF 形式提供(board/fpgaboy.pdf)。
后续版本: Rev B 将在门电路和引导加载程序成熟后推出,开发者当前的硬件类似 Snowflake FPGA 开发板。
仓库结构,便于导航
board/– 主 PCB 与辅助板的 KiCad 文件。doc/– LaTeX 源码和文档 PDF,包括详细的系统架构图。hdl/– Verilog RTL:busfabric/– AHB‑lite 交叉开关和 APB 外设。graphics/– 像素处理单元。hazard5/– 自包含的 RV32IMC 核心。mem/– 内存控制器和模型。peris/– 小型外设(UART、SPI、PWM)。riscboy_core/– 所有组件的顶层集成。riscboy_fpga/– 针对不同 FPGA 目标的板级封装。
synth/– 完整系统综合的 Makefile 与约束文件。test/– Verilog 测试平台和软件测试用例。software/– 用于系统级测试的 C 文件集合。
社区反馈与重要提及
“它是来自平行宇宙的 Gameboy Advance,那个宇宙在 2001 年已经有 RISC‑V。是一封写给我童年手持游戏机的情书,也是凌晨 3 点醉酒时给驱动它们的技术发的短信。” – 项目描述。
“哦,这就是 Luke Wren 的作品。他是 Raspberry Pi 的 ASIC 设计工程师。惊人的项目,我爱死它了!” – HN 评论,强调作者资历。
“PDF 中描述的可编程扫描线缓冲区渲染流水线值得对这类技术感兴趣的朋友阅读。” – HN 评论,赞扬图形设计。
“该设计已经在 wafer.space 的首次流片中送出,但我还不知道它是否真的成功了。” – HN 评论,提及硅原型尝试。
入门指南:克隆、构建与综合
# 克隆并获取子模块
git clone --recursive https://github.com/Wren6991/RISCBoy.git riscboy
# 构建 RV32IMC 工具链(Ubuntu 20.04 示例)
sudo apt install -y autoconf automake autotools-dev curl python3 \
libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex \
texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev
cd /tmp
git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
cd riscv-gnu-toolchain
./configure --prefix=/opt/riscv \
--with-arch=rv32imc --with-abi=ilp32 \
--with-multilib-generator="rv32i-ilp32--;rv32ic-ilp32--;rv32im-ilp32--;rv32imc-ilp32--"
sudo mkdir /opt/riscv && sudo chown $(whoami) /opt/riscv
make -j$(nproc)
# 为 HX8k 评估板综合
. sourceme
cd synth
make -f HX8k-EVN.mk bit
为什么 RISCBoy 很重要
RISCBoy 证明了使用开源硬件、普通的 FPGA 与免费工具链,就能实现功能完整的 32 位手持游戏系统。它提供了从硅级 RTL 到 PCB 布局的完整参考设计,使爱好者、教育工作者和研究人员能够在没有专有限制的情况下探索基于 RISC‑V 的游戏机架构。