RISCBoy 是一款从零开始设计的开源便携游戏机

Hacker News Top 产品

摘要

RISCBoy 是一款开源便携游戏机,采用 RISC-V CPU 和光栅图形流水线,基于 iCE40 FPGA 实现。该项目包含处理器设计、图形硬件、PCB 布局,并且完全开源。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/12 10:47

Wren6991/RISCBoy

来源: https://github.com/Wren6991/RISCBoy

RISCBoy

RISCBoy 是一款完全从零设计的开源便携游戏机。其设计包含:

  • 一款兼容 RISC-V 的 CPU
  • 一套光栅图形管线与显示控制器
  • 其他芯片基础设施:总线结构、内存控制器、UART、GPIO 等
  • KiCad 格式的 PCB 布局

它本质上是一个来自平行宇宙的 Gameboy Advance — 在那个宇宙里,RISC-V 早在 2001 年就已存在。这是我写给童年掌机的一封情书,也是凌晨三点醉醺醺地发给驱动它们的技术的一通短信。

整个设计使用可综合的 Verilog 2005 编写,目标器件为 iCE40-HX8k FPGA。这是一款基于 LUT4 的 FPGA,拥有 7680 个逻辑单元,要在其上塞进一台 32 位游戏机,就像撬棒抹凡士林一样勉强,或者说需要极为精巧的设计。HX8k 曾是开源 Icestorm (http://www.clifford.at/icestorm/) FPGA 工具链所支持的最大 FPGA,但如今该工具链已转向 (https://github.com/SymbiFlow/prjtrellis) 更宏大的目标 (https://github.com/SymbiFlow/prjxray)。

更详细的信息请参阅文档

处理器支持 RV32IMC 指令集,并通过了该指令集的 RISC-V 合规套件测试、riscv-formal (https://github.com/SymbioticEDA/riscv-formal) 验证套件测试,以及我自己编写的一些用于指令前端一致性和基本总线合规的形式化属性检查。它还支持 M 模式 CSR、异常以及一个用于向量化外部中断的简单兼容扩展。

克隆

本仓库使用子模块管理 HDL 以及测试用例

git clone --recursive https://github.com/Wren6991/RISCBoy.git riscboy

或者

git clone https://github.com/Wren6991/RISCBoy.git riscboy
cd riscboy
git submodule update --init --recursive

注意:运行处理器的独立测试需要递归更新子模块。若只构建 RISCBoy 的门电路代码,则无需此步骤。

构建 RV32IMC 工具链

编译基于软件的测试需要 RV32IMC 工具链。请按照 RISC-V GNU Toolchain GitHub (https://github.com/riscv/riscv-gnu-toolchain) 上的说明操作,但 configure 行需做如下调整:

# 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 参数是这里最重要的区别
./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)

在较小的 FPGA(如 iCE40 UP5k)上,RISCBoy 可以配置为使用较小型的 RV32I 处理器变体,而非高性能的 RV32IMC 版本。编译器会支持 RISCBoy 上可用的所有 ISA 变体,但我们还需要通过 --with-multilib 参数告知工具链构建脚本为这些变体生成标准库。如果在仅支持 RV32I 的处理器上运行链接了 RV32IMC 标准库的 RV32I 可执行文件,那麻烦可就大了!

仿真

仿真流程由 Xilinx ISIM 14.x 驱动;makefile 位于 scripts/ 文件夹中。该流程仅在 Linux 版本的 ISIM 下测试过。

你还需要检出 RISC-V 合规套件才能运行这些测试(注意 -- test 参数用来防止 git 进入 KiCad 目录并抱怨那里的库结构)。

$ git submodule update --init --recursive

准备好后,应该可以运行以下命令:

. sourceme
cd test
./runtests

这将运行所有 HDL 级别的测试。软件测试需要 RV32IC 工具链。如果 ISIM 安装在非默认位置,你可能需要调整 sourceme 中的一些路径。若要以图形方式调试某个测试,可直接运行其 makefile:

cd system
make TEST=helloworld gui

PCB

图片展示了 Rev A 版本的 PCB。它兼容 iTead 的 4 层 5x5 cm 打样服务,目前 10 块板的价格为 65 美元。

原理图可在此处查看 PDF

Rev B 将有较大不同;我在等待门电路代码和引导程序成熟后再推进。我目前的开发硬件与我设计的 Snowflake FPGA 板 (https://github.com/Wren6991/Snowflake-FPGA) 非常相似。

综合

针对 iCE40 的 FPGA 综合使用开源工具链。如果你想用现有的 makefile 构建此项目,首先需要构建我所使用的工具链:

  • Yosys (https://github.com/yosyshq/yosys) 用于综合
  • nextpnr (https://github.com/YosysHQ/nextpnr) 用于布局布线
  • Project Icestorm (http://www.clifford.at/icestorm/) 用于比特流生成

注意,我仅在 Linux 上构建过这些工具。听说它们也可以在 Windows 上构建,但我没试过。不过,它们也可以在树莓派上轻松构建。

工具链就绪后,运行

. sourceme
cd synth
make -f HX8k-EVN.mk bit

即可生成适用于 Lattice HX8k 评估板的 FPGA 镜像。

此外,还提供了对 ECP5 的高度实验性支持(即并非我的主要开发平台),并附带 Lattice LEF5UM5G-85F-EVN 评估板的板级文件:

make -f ECP5-EVN.mk BUILD=full bit

此构建将 RISCBoy 开发硬件中使用的外部 512 kiB、16 位宽 SRAM 替换为内部 256 kiB、32 位宽同步存储器,Trellis 会将其构建为 ECP5 的系统内存块。

目录结构

  • board: 主 RISCBoy PCB 及开发中使用的其他小型板的 KiCad 文件
  • doc: 文档的 LaTeX 源码、图表及最新生成的 PDF
  • hdl: RISCBoy 门电路代码的 Verilog 源码。
    • busfabric: AHB-lite 交叉开关与 APB 外设总线结构
    • graphics: 像素处理单元的源码
    • hazard5: RISC-V 处理器的源码。完全独立。
    • mem: 内存控制器,以及内存的推理/注入封装与模型
    • peris: 小型外设,如 UART、SPI、PWM
    • riscboy_core: 结构化模块,用于实例化并连接组成 RISCBoy 的各个组件
    • riscboy_fpga: 针对几种不同 FPGA 和板卡的最顶层封装:连接 IO、提供时钟和复位
  • reference: 一些 RISCBoy 所使用标准的 PDF 文档(如 RISC-V 指令集)
  • scripts: 无处安放的杂项
  • software: 松散的 C 文件集合,用于系统级测试。目前还不是一个实用的软件树。
  • synth: 运行全系统综合的工作目录。包含顶层 makefile 和引脚约束文件。
  • test: 回归测试。部分为 Verilog 测试台,其余为在处理器或全系统仿真上运行的软件测试用例。

相似文章

书籍:RISC-V系统芯片设计

Hacker News Top

一本涵盖RISC-V微处理器和系统芯片详细设计的教材,包括用于单发射、超标量和多核实现的开源SystemVerilog代码和测试用例。

一人,双内核,与大量RISC-V

Hacker News Top

QRV Systems的Yuri Zaporozhets在FPGA上构建了一台基于RISC-V的个人计算机和一台大型机,并两次重写了QNX。他最新的操作系统QSOE正在FOSS世界中引起关注。

RISC-V路由器

Hacker News Top

一款基于RISC-V的路由器的众筹活动目前已完成目标的10%,有89位贡献者。