龙空技术网

为Doom而生!大神纯FPGA实现Doom游戏芯片,无CPU、无指令计数器

机器之心Pro 4044

前言:

此刻小伙伴们对“fpga数码管计数器”大概比较珍视,朋友们都想要分析一些“fpga数码管计数器”的相关资讯。那么小编在网络上搜集了一些有关“fpga数码管计数器””的相关内容,希望我们能喜欢,大家快快来学习一下吧!

机器之心报道

机器之心编辑部

无 CPU、无操作码、无指令计数器纯 FPGA 实现,图形学大神 Sylvain Lefebvre 为经典射击游戏 Doom 打造打造了一款芯片。

毁灭战士系列(Doom)是由 id Software 开发的第一人称射击电子游戏系列。在电子游戏界中,人们普遍认为 Doom 系列是第一人称射击游戏的开拓者之一。自 Doom 于 1993 年发布以来,该系列已有 4 部续作、无数的扩展关卡以及同名电影《毁灭战士》。

作为经典的射击游戏,Doom 拥有大量拥趸,它能够在大量设备上运行,如数码相机、旧版诺基亚手机等等。在强化学习领域,Doom 也被用作策略训练环境之一。

最近,计算机图形学大神级人物、法国国家信息与自动化研究所(INRIA)研究总监、MFX 团队负责人 Sylvain Lefebvre 在新的设备上运行 Doom 游戏,并放出了一段视频,展示他自制的无 CPU、无操作码、无指令计数器,仅靠纯 FPGA 实现的芯片运行 Doom 的效果。

使用 Altera CycloneV FPGA 运行 Doom 游戏。

为 Doom 游戏而生:DooM-chip

Sylvain 在推特上介绍了该芯片 DooM-chip 的具体细节:

DooM 芯片可以运行 E1M1 直到世界末日(或者电量耗尽)。代码烧写到了 FPGA 的 LUTs 及触发器中,其中无 CPU,无操作码,无指令计数器,可以说是纯硬件实现。

简而言之,DooM 芯片的运行只需要:SDRAM 控制器、分隔符、BSP 遍历、纹理单元等。主渲染器(没有数据)有 666 行代码!

下图展示了一个不错的测试用例,我们可以看到它做出了一些改进,修复了一些问题,并在 CycloneV + Quartus 上学到了很多。

渲染使用的是原始 BSP 树,不过为了配合硬件实现,Sylvain 对其进行了修改。所有列经过光影投射,并立即从前向后绘制,直到被完全填充。

当 BSP 从前向后遍历时,列总是自顶部或底部向中间生长。

据介绍,该芯片的制作利用了多个信息源:

Fabien Sanglard 写的「Doom 黑皮书」(Game Engine Black Book DOOM);

Doom Specs v1.666 的非官方版本及其源代码()。

此外,Sylvain 还利用了真实的游戏数据:在编译过程中,使用 Lua 预处理器从 Doom WAD 中抽取数据,并基于此写表和硬件。

由于计算会随着游戏中墙的不同而发生变化,因此获得天花板和地板的纹理并非易事。Sylvain 提供了一个 debug 视图,可以帮助确保计算与天花板和地板的纹理相匹配。

在介绍完 DooM-chip 的基本细节后,Sylvain 还说明了一些有待改进和优化的地方:并行化列,隐藏绘制、纹理映射和 BSP 树遍历之间的延迟;有一些纹理没有对齐,一些小问题还有待修复(下图即为 debug 展示图);以 320x200 60Hz 运行,而不是 70Hz。

Sylvain 表示,Doom 诞生的时候自己还在学习如何编码图形。不管是那时,还是现在,Doom 都是其灵感和动力的来源。

网友热议:有赞许,也有质疑

这款纯 FPGA 实现芯片在 Doom 游戏中的效果引起了广大游戏发烧友的注意,并纷纷发表自己的看法。有人投以赞许,也有人严谨地提出了质疑。

有网友认为这款 Doom 芯片有点像是原始街机游戏 Pong 芯片或 AY-3-8500 芯片。不需要操作系统(OS),只需要输入驱动输出视频即可。

更有网友认为这有助于促进 Doom 游戏的永恒。Doom 游戏几乎可以被移植到任何具有 CPU 的系统上,如 Linux。用户甚至可以搜索到 JSDoom 以及 RISC-V 游戏端口。如果能够超越以往简单的绘制水平,一切将会非常有趣,以后 Doom 游戏甚至都不需要 CPU 运行了。

不过,有网友对这款 Doom 芯片的运行帧率以及成本提出了质疑。

ta 表示虽然 Doom 芯片能够以 60fps 的帧率运行,并且不需要太多的 headroom,但是这远远慢于现代 GPU 的速率。最新的 Doom 游戏能够以 200fps 以上的帧率运行,并且更加复杂。因此,结合硬件成本以及与游戏数字拷贝的比较来看,ta 认为这款 Doom 芯片对游戏行业的益处不大。

针对这位网友提出的质疑,作者承认自己的实现过于简单,很多东西还需进一步优化。

最后,有网友表示状态机的「状态」可以看作是一种指令计数器。

针对此看法,作者承认使用了 vga、sdram 控制器、帧缓冲器、texturing、分频器和渲染器等几种状态机,并且每个状态机都有活动状态指数。其中,渲染器最大,具有 69 个状态。并且,作者也同意将状态指数看作是一种指令计数器,尽管它是非常专业的指令。

但同时,作者表示给定的模块中没有两个相同的指令,每个指令各自实现算法的精确子部分。此外,状态还决定了流程以及选择下个状态,所以没有可以编程或重排列的指令。基于此,他的想法是将算法完全嵌入到电路本身,而不执行任何其他操作。

作者简介

Sylvain Lefebvre

Sylvain Lefebvre 在法国国家信息与自动化研究所(INRIA)Grenoble-Rhône-Alpes 研究中心获得博士学位,所在的团队为 iMAGIS/EVASION 团队。他在博士阶段主要研究使用 GPU 的前沿纹理方法。2005 年,Sylvain 前往微软研究院(西雅图)任博士后研究员。之后他和 Hugues Hoppe 一起研究纹理合成和纹理化。2006 年 9 月,Sylvain 加入 INRIA Sophia Antipolis 研究中心 REVES 团队。2009 年年底,加入 INRIA Nancy 研究中心 ALICE 团队。2018 年开始,Sylvain 成为 MFX 团队的领导者。

2010 年,Sylvain 获得 EUROGRAPHICS 青年研究者奖项。2012 年,他的 ShapeForge 项目得到了 ERC 启动资金。此外,Sylvain 还是 IceSL 软件的创始人和主要开发者。

Sylvain 的研究方向是简化内容创建,尤其是生成高度细节化的模式、结构和形状。应用范围从计算机图形学到 3D 打印、渲染高度细节化的场景、设计复杂对象,或者建模需要遵循精确规格的技术部件。

标签: #fpga数码管计数器