简介

如标题所说,用Verilog实现一个完整的Game Boy。最初是PSU CMPEN275(数字设计实验)的课程设计,现在完全是自己做着玩了。

相关链接

项目目标

本项目最初的目标是在FPGA开发板上设计一个完整的Game Boy兼容系统,需要能够运行商业游戏。具体而言,需要拥有一个GB兼容的CPU,能够运行未经修改的Game Boy机器代码;拥有一个GB兼容的PPU,产生和原本GB一致的图像并输出到外部显示器;拥有一个GB兼容的PSG,能够产生和原本GB接近的音频并输出,最后需要能够通过手柄控制游戏。串口联机和红外通信不在本项目计划之内。

上述目标已于2018年4月达成。

当前目标为,设计一个独立的FPGA掌机,运行VerilogBoy的代码。掌机的名称就称为VerilogBoy Handheld。GameBoy Color支持和串口联机通信机能也在长期计划之内。

项目进展

第一版

1551323139213-image0.jpg

第一版已于2018年4月设计完成,实现的部分包括:

  • SM83兼容CPU
  • PPU(像素FIFO结构)
  • PSG
  • MBC5支持

硬件相关支持见硬件支持部分。

第二版

第二版目前还在开发中。CPU设计已基本完成,但是还需要进行很多测试。

硬件分支

本项目计划支持多种不同的FPGA目标平台,具体支持情况在以下列出。

Xilinx ML505

第一版的设计完全是在ML505上进行、完成的,也是第一版唯一支持的平台。

配置/移植信息

  • FPGA:Xilinx Virtex-5 LX50T
  • WRAM/VRAM:使用FPGA内置Block RAM实现
  • 游戏ROM:使用板载NOR Flash实现
  • 音频:通过板载AD1981B输出(3.5mm)
  • 视频:通过板载CH7301B输出(VGA+DVI)
  • 手柄:通过GPIO连接DualShock 2手柄

分支状态

第一版已经完整支持,相关外设驱动均已完成。未来会移植第二版代码。

VerilogBoy Handheld

VBH就是在开发的掌机了,目前还在设计和调试阶段。

结构框图

1551323816645-hardware_arch.png

配置/移植信息

  • FPGA:Xilinx Spartan-6 LX16
  • WRAM/VRAM:使用FPGA内置Block RAM实现
  • 游戏ROM:使用板载PSRAM实现
  • 音频:通过板载WM8960输出(3.5mm+扬声器)
  • 视频:通过板载TC358778转接DSI驱动液晶屏输出
  • 手柄:GPIO按键阵列

分支状态

最后一版PCB完成于2019年1月,下一版计划为2019年7月。

Pano Logic G1

性价比还挺不错的瘦客户机,用来当FPGA开发板玩。支持该平台可以让更多人玩到VerilogBoy,相关框架也算是贡献社区吧。

配置/移植信息

  • FPGA:Xilinx Spartan-3E 1600
  • WRAM/VRAM:使用FPGA内置Block RAM实现
  • 游戏ROM:使用板载LPDDR实现
  • 音频:通过板载WM8750BL输出(3.5mm+扬声器)
  • 视频:通过板载THS8139输出(VGA)
  • 手柄:通过ISP1760连接USB HID手柄

分支状态

VGA已完成(19年2月),DAC有现成代码还没具体研究,LPDDR控制器已经完成(19年2月),目前正在设计缓存控制器,下一步计划是先测试CPU,随后开发USB协议栈以实现手柄控制和USB读取游戏。

相关博文