RISCBoy 是一个从零开始设计的开源掌上游戏机项目。它包含一个兼容 RISC-V 的 CPU、图形处理单元以及完整的芯片基础设施,旨在重现一个“假如 RISC-V 在 2001 年就已存在”的 Gameboy Advance。整个设计基于 Verilog 语言,并计划部署在 iCE40-HX8k FPGA 上,所有相关硬件和软件资源均已开源。
这既是写给我童年时代掌上游戏机的一封情书,也是在凌晨三点醉意朦胧时,发给那些驱动了它们的技术的一条信息。
核心技术组件
RISCBoy 的设计完全从零开始,包含了一台游戏主机所需的所有关键部分:
- 一个兼容 RV32IMC 指令集的 RISC-V 处理器。
- 一个光栅图形管线和显示控制器。
- 其他芯片基础设施,如总线、内存控制器、UART、GPIO 等。
- 使用 KiCad 设计的 PCB 布局。
整个设计采用可综合的 Verilog 2005 编写,目标是适配 iCE40-HX8k FPGA。这款 FPGA 拥有 7680 个逻辑单元,要把一个 32 位的游戏机塞进去,需要非常精巧的设计。
如何获取项目
该项目仓库使用了子模块(submodules)来管理硬件描述语言(HDL)和测试文件。
推荐的克隆方式:
git clone --recursive https://github.com/Wren6991/RISCBoy.git riscboy或者分步操作:
git clone https://github.com/Wren6991/RISCBoy.git riscboycd riscboygit submodule update --init --recursive
注意: 必须使用 --recursive 参数才能完整地运行处理器的独立测试。
构建编译工具链
编译软件测试用例需要 RV32IMC 工具链。你可以遵循 RISC-V GNU Toolchain GitHub 上的说明进行安装,但配置步骤有所不同。
最重要的配置参数如下:
./configure --prefix=/opt/riscv --with-arch=rv32imc --with-abi=ilp32 --with-multilib-generator="rv32i-ilp32--;rv32ic-ilp32--;rv32im-ilp32--;rv32imc-ilp32--"这个配置确保编译器能为 RISCBoy 支持的所有指令集变体(如 RV32I 或 RV32IMC)生成正确的标准库。在 RV32I-only 的处理器上运行链接了 RV32IMC 标准库的程序会导致严重错误。
仿真与测试
仿真流程由 Xilinx ISIM 14.x 驱动,相关的 makefile 文件位于 scripts/ 目录下。
运行所有 HDL 测试:
cd test./runtests进行图形化调试: 若要对某个特定测试(如 helloworld)进行图形化调试,可以直接运行其 makefile:
cd systemmake TEST=helloworld gui
硬件设计 (PCB)
目前的 A 版 PCB 兼容 iTead 的 4 层 5x5 厘米原型服务。在硬件和引导程序成熟之前,B 版的设计不会启动。目前的开发硬件看起来更像 Snowflake FPGA 开发板。
FPGA 综合
FPGA 综合使用的是一套开源工具链,你需要先构建它们:
- Yosys:用于逻辑综合。
- nextpnr:用于布局布线。
- Project Icestorm:用于生成比特流文件。
工具链准备就绪后,运行以下命令即可为 Lattice HX8k 评估板生成 FPGA 镜像:
cd synth
make -f HX8k-EVN.mk bit
项目目录结构
board: 存放 RISCBoy 主 PCB 和其他开发板的 KiCad 文件。doc: 文档的 LaTeX 源码、图表和 PDF 文件。hdl: RISCBoy 门级电路的 Verilog 源码。hazard5: 完全独立的 RISC-V 处理器源码。graphics: 像素处理单元的源码。peris: UART、SPI 等小型外设。
scripts: 其他辅助脚本。software: 用于系统级测试的 C 语言文件集合。synth: 用于运行全系统综合的工作目录,包含顶层 makefile 和引脚约束文件。test: 回归测试集合,包括 Verilog 测试平台和软件测试用例。