直面大型综合现场,“我的红石电路世界”——MinecraftHDL

乐活   2024-09-04 10:03   北京  

众所周知,Minecraft的红石系统是一种模拟逻辑电路运行的游戏机制,它允许大家在游戏中创建复杂的逻辑电路、自动化装置和机器。通过红石系统,我们可以创造各种基础逻辑门比如AND、OR、NOT、NAND等并在此基础上实现更为复杂的组件。之前就听说有大神在Minecraft里用红石系统做CPU和计算机,还有在Minecraft里的计算机上运行Minecraft(这个我一直不知道真假,不妨了解的人讲讲)。

不过对于我这类,对Minecraft浅尝辄止最多在里面挖挖地下室做做轨道小火车的人来说呢,费时费力的红石系统搭建逻辑电路似乎就离的有点远了。更不要说在Minecraft通过红石电路来实现流水线呀跑马灯呀这些天方夜谭的“大工程”了。但是如果我们提出了既没有经验时间又想在里面搭逻辑电路这样非分的要求呢?

这个时候就发生了件很巧的事情,那天浏览有意思的开源工程恰好就就看到了这个项目——MinecraftHDL:

https://github.com/itsfrank/MinecraftHDL

这名字起的太清晰简洁了,一看就知道是要在Minecraft游戏里搞点HDL小动作。事实上也是如此,可以把MinecraftHDL理解成一个数字电路综合工具,它的输入是verilogHDL电路描述文件,输出自然是Minecraft的红石电路。令人汗颜的是,这个项目由麦吉尔大学电子、计算机与软件工程系的三名学生开发完成的本科毕业设计项目,想想自己的本科毕设再看看人家的,真是人比人气死人。

MinecraftHDL 的构想源于一个简单的问题:如何让复杂的数字设计概念更易于理解和接触?三位开发者发现,Minecraft 作为一个广受欢迎的游戏其红石系统提供了一个完美的平台来直观的模拟数字电路的行为。因此,他们决定创建一个工具,将 Verilog 这样的硬件描述语言与 Minecraft 的红石电路相结合,将综合出的电路以最直接的方式呈现在开发者眼前。

在展示页面里,作者们给了很多的使用范例,例如对于如下的verilogHDL输入文件:

module fulladder(    input x, y, cin,    output A, cout); assign {cout,A} =  cin + y + x; endmodule
经过MinecraftHDL“综合工具”的一番操作后,就会得到这样的红石电路:

怎么对这个电路进行一下仿真呢,可以来到“input”这里给一个输入值,比如下面这个输入就是cin=0,y=1,x=1:


然后再跑到“output”端就能看到输出结果亮的就是1暗的就是0,所以cout=1,A=0:

后面工程文档中还展示了一个7段式数码显像管的代码和综合结果:

module sevenseg (    input I1, I2,    output S1, S2, S3, S4, S5, S6, S7);
assign S1 = ~I2 | I1;assign S2 = 1;assign S3 = ~I1 | I2;assign S4 = ~I2 | I1;assign S5 = ~I2;assign S6 = ~I1 & ~I2;assign S7 = I1;
endmodule

当然了这个肯定不能没有仿真结果,鉴于其结果是一个GIF图太大了没法放上来,就截图展示一下好了:

这黑灯瞎火的前面出来一个大显像管隔这倒计时,你说谁能不爱上这个工具呢对不对!

当然了毕竟这是一个本科毕业设计,因此其还是有很多不完善的地方。作者在说明文档中也明确的说了,项目最大的两个问题是无法支持过于复杂的电路设计以及无法综合时序电路:

这个项目并非完全无错误或已完善;它生成的电路在客观上比“手工”设计的红石电路要差,且并非设计用于修改后的生存模式中。虽然它几乎可以生成任何Verilog电路,但实际上只有简单的设计才能在游戏中进行测试,因为任何中等复杂度的设计最终都会超过Minecraft中加载的最大方块数量。 

此外,我们目前无法综合时序电路,也就是任何带有回路或反馈的电路。这意味着无法生成存储器、计数器或任何能够保持状态的电路。

当然了虽然有这些缺陷吧,但是仍不妨碍这是一个伟大的开源工程,毕竟其自我定位为一个教育工具,目标是宏观地展示微电子数字电路的设计和生产过程,同时向年轻观众介绍数字设计世界并且向首次学习RTL课程的本科工程师展示软件设计与硬件设计的区别。这些目的都已经完成,甚至还勾起了一个没有使用过Minecraft红石系统的新手萌生出去了解探索的欲望。

关于工程如何与Minecraft结合在一起使用,作者也给出了详细的步骤以及GIF实例进行指导,看得出来流程并不复杂。不过因为我电脑上并没有安装游戏,因此也没有实际操作,就留给感兴趣的朋友去一试究竟。

项目的代码语言占比如下:

本来我是打算看看SystemVerilog分组下的高星项目,但是显然这个平台是基于C++完成的,因此不关系到项目学习上的事,单纯作为一个感兴趣的开源项目分享给大家吧。

系列文章入口——

【芯片设计】SoC 101(一):绪论
【芯片设计】FIFO漫谈(零)从无处不在的FIFO开始说起
【芯片设计】计算机体系结构(一)虚拟内存

【芯片设计】深入理解AMBA总线(零)绪论

【芯片设计】握手协议的介绍与时序说明
【芯片设计】复位那些小事 —— 复位消抖
【芯片设计】快速入门数字芯片设计(一)Introduction
【芯片验证】UVM源码计划(零)下定决心读源码前的自测环节
【芯片设计】异步电路碎碎念(一) 到底什么是异步电路
【芯片设计】从RTL到GDS(一):Introduction
其他文章链接——
【芯片验证】sva_assertion: 15道助力飞升的断言练习
【芯片验证】可能是RTL定向验证的巅峰之作
【芯片验证】RTL仿真中X态行为的传播 —— 从xprop说起
【芯片验证】年轻人的第一个systemVerilog验证环境全工程与解析
【芯片设计】verilog中有符号数和无符号数的本质探究
【芯片设计】论RTL中always语法的消失术
【芯片设计】代码即注释,注释即代码
【芯片设计】700行代码的risc处理器你确实不能要求太多了
入职芯片开发部门后,每天摸鱼之外的时间我们要做些什么呢
如何计算系统的outstanding 和 burst length?
芯片搬砖日常·逼死强迫症的关键词不对齐事件
熟人社会里,一群没有社会价值的局外人


芯时代青年
专心数字前端全流程,芯时代有为青年的自我修养
 最新文章