FPGA+ESP32 = GameBoy 是你的童年吗?

发布于:2025-05-14 ⋅ 阅读:(12) ⋅ 点赞:(0)

之前介绍的所有的复古游戏机都是基于Intel-Altera FPGA制作的,今天就带来一款基于AMD-Xilinx FPGA的复古掌上游戏机-Game Bub。

Game Bub是一款掌上游戏机,旨在畅玩 Game Boy、Game Boy Color 和 Game Boy Advance 游戏。与大多数现代掌上游戏机一样,它可以处理 ROM 文件。此外,它还可以使用卡带,这使得它成为一款功能与原始硬件非常相似的现代设备。

架构

整体架构由ESP32+FPGA组成,典型的CPU+FPGA架构,其中MCU 负责系统控制:它启动设备并管理 FPGA(电源和配置)。它还负责渲染 UI(将完成的帧发送到 FPGA 进行显示)。

FPGA 负责所有游戏模拟。它可以直接访问SD卡槽和连接端口,并配备专用内存(32 MB SDRAM,512 KiB SRAM)来辅助执行。它生成音频并通过 I2S 将其发送到 DAC,并且具有一个高带宽 18 位并行接口来连接显示器。

FPGA 还具有 4 个高速差分对,连接至 USB-C 接口。该接口与定制扩展坞配合使用,并处于特定于供应商的 alt 模式,用于输出 HDMI 音频和视频(直接从 FPGA 输出)。

MCU 和 FPGA 之间的高速 QSPI 链路(4 位,40 MHz,20 MB/秒)主要用于控制信号(指示 FPGA 播放或暂停)以及渲染 UI。FPGA 驱动显示屏,因此 MCU 必须通过 FPGA 发送其 UI。

此外,当使用模拟卡带时,MCU 会将 ROM 文件发送到 FPGA 以存储在 SDRAM 中,并定期发送 IMU 更新(以模拟带有加速度计或陀螺仪的卡带)。

启动后,MCU 从 microSD 卡(4 位 SDIO)加载 FPGA 比特流,启动 FPGA 并进行配置(使用 80 MHz 的单 SPI)。它会初始化显示屏和其他外设,并渲染初始 UI。

现代语言的敏捷开发

整个项目的开发分为MCU及FPGA开发,其中 MCU 固件是用 Rust 编写的,FPGA是由Chisel编写的,都属于现代对于各自领域的敏捷开发语言(MCU不是特别了解)。详细的文件及架构我还没研究,等后续再进行详细的展开。

开源的魅力

这个项目从底层硬件到上层固件全部开源,甚至作者把自己开发过程的想法都写成了blog分享出来,对于想进行类似项目开发的人员很有启发意义。

这里说一下此次项目的开源对后续该类项目的影响。复古游戏机的架构基本都是CPU+FPGA,而Altera FPGA系列之所以在这个领域占有率比较高的原因主要是第一版开源人员将CPU及FPGA的功能划分清楚,对于只会进行CPU或者FPGA开发的人员可以独立进行开发。而本次的架构我觉得可以继续深入下去,ESP32价格低廉,支持WIFI和蓝牙,减少一部分外设,符合现代掌机的特点,后续的其他复古游戏机也不会遥远。

演示视频


相关资料

核心库:

https://github.com/elipsitz/gamebub/tree/handheld

库里包含软硬件文档。

作者博客:

https://eli.lipsitz.net/posts/introducing-gamebub/


网站公告

今日签到

点亮在社区的每一天
去签到