有人能从零开始成功制造出一块完整的 GPU吗?
国外一名游戏开发人员和硬件爱好者Dylan Barrie做到了。他花了四年时间,做出一块开源的完全定制 GPU——FuryGPU,理论上可以在 Windows 上运行旧版游戏软件。
FuryGPU是 Barrie一个人的杰作,在过去 14 年的游戏行业职业生涯中,Barrie 主要专注于图形渲染的软件方面。不过,四年前他受到Ben Eater从头开始构建可编程 8 位计算机项目的启发后,开始利用其业余时间完成了这个极其复杂的硬件和软件项目。
Barrie说,从头开始创建图形卡的过程简直是地狱般的煎熬,但经过四年的不懈努力,他终于可以与大家分享他的心血,现在附加卡的设计工作已基本完成。FuryGPU是基于 Xilinx Zynq UltraScale+ FPGA 设计的"真正的硬件 GPU"。该卡使用定制的印刷电路板,通过一个 PCIe 插槽与主机连接。原型 PCIe 显卡目前能够在 Quake Timedemo 中实现约 44fps。
FuryGPU 可支持相当于 20 世纪 90 年代中期"高端"显卡的硬件功能,并通过配备DisplayPort 和 HDMI输出进行了现代化改造,为现代 Windows 版本提供完整的软件和驱动程序栈。
该图形处理器可以以实时、可玩的帧速率渲染那个年代的游戏。巴利公司最终将通过开源许可发布硬件原理图、软件和驱动程序。
硬件,从开发板到显卡
Barrie说因为他不知道 GPU 如何工作的 "实际细节",他决定从头开始制造图形处理器。由于对软件方面的 3D 渲染过程 "极为熟悉",Barrie 意识到创建 GPU 可能是一个虽然艰巨但可行的个人项目。
Barrie 在购买了一块装有 FPGA 的 Arty Z7 开发板并进行了一些初步开发和测试后,开始实现他从零开始构建 GPU 的梦想。
随后,Xilinx Kria 系统级模块(SoM)的问世推动了这一项目,该模块将价格低廉的 Zynq UltraScale+ FPGA 与大量的 DSP 单元、(相对)海量的 LUT 和 FF 以及特别令人感兴趣的硬核化 PCIe 内核结合在一起。
Barrie 是一个软件工程师,对于硬件开发来说,刚开始只能算是硬件小白。为此他花了 "无数个小时" 学习 FPGA 芯片如何工作,以及如何通过硬件描述、验证和实现语言 SystemVerilog 来构建芯片设计。不过Barrie却表示,设计 PCIe 图形卡的硬件是一项“艰巨的工作”,但还不是最痛苦的工作。
最初,FuryGPU设计的目标是将一个简单的旋转立方体演示放在一起,以展示 GPU 的工作原理。然而,随着项目的发展,以可玩帧率玩标志性的 PC 游戏《雷神之锤》开始成为新的目标。
Barrie 解释说,在准备好 Windows 驱动程序后,他编写了一个自定义图形 API 来与 GPU 通信,并创建了管理显示和音频信号的 Windows 内核驱动程序。FuryGPU 可以以每秒 60 帧的"稳定"速度渲染《雷神之锤》(1996 年发布的初代)。
这里的视频演示了Barrie 的自制GPU 的 Quake Timedemo 视频捕获,证明 FuryGPU 在大约一个月前的 720p 基准测试中可以达到 44fps。
FuryGPU Windows 驱动程序支持视频和音频输出(图片来源:Dylan Barrie - FuryGPU)
Barrie表示,他看到了一些明显的瓶颈,他将针对这些瓶颈进行优化工作,让 Quake“运行得更快”。
Barrie 表示,打算在某个时候将FuryGPU项目开源,包括整个堆栈(PCB原理图,所有HDL,Windows WDDM驱动程序,API运行时驱动程序)。
此外,FuryGPU 网站上有一篇专门介绍 GPU 纹理单元的文章,适合那些希望更深入了解该架构的人。
演示视频:https://www.youtube.com/watch?v=VJigQ2Rm-TQ