游民星空 > 资讯中心 > 正文

技术宅惊世之作 《我的世界(Minecraft)》如何打造计算机

2014-08-28 12:24:16 来源:人人网 作者:季文瀚 编辑:暗影猫 浏览:loading

  对于用《我的世界》打造计算机这一消息相信大家已有所耳闻,下面小编便为大家找来的详细教程,有兴趣的同学可以一试。如果看不懂,全当我们对于逆天技术宅的膜拜吧。

  (文章来自季文瀚——《基于Minecraft实现的计算机工程》)

  2014年8月25日更新,更新内容为超越函数计算器和CPU指令实现部分。

  断断续续终于做好了视频和介绍,就用日志一起发出来了。工程还未完工,视频展示计算器功能,电子表和字符显示器时序控制。

  视频建议看的时候点右下角设置选超清+全屏观看,选标清既不清楚有时候还会卡,高清也看不清细节,就算是超清也比我上传的原视频缩了。优酷60秒的广告还要缩画质满地节操真心抱歉。。。

  本工程基于一个叫Minecraft的游戏,我使用的版本是1.4.7。之所以使用一个游戏作为平台,是因为这个游戏可以做到实时运行超大规模集成电路模型(大于10000个逻辑门)并且提供壮观的可视化效果(三维数字电路)。

  半年前我刚接触这个游戏的时候,想做一个简单的计算器。国外玩家两年前已经有人做到了,基于整数ALU和直连总线的机器。我开始规划做一个16bit的计算器,输入输出线路一样是直连的,也就是说这个计算器完全是专用的芯片,连单片机的等级都不到。后来我发现这个游戏可以实现更加复杂的东西。原因很简单,游戏只提供了“或”“非”逻辑电路,但理论上“或”“非”门可以表达一切逻辑。同时游戏提供的基于活塞机械的断路,继电器的延时时序特性以及继电器的锁存特性会让很多高级触发器成为可能。换句话说,FPGA能实现的东西这个游戏基本都能实现,区别在于这个游戏提供的是一个纯粹数学模型化的信号系统,元器件是简化的模型而不是现实中根据半导体材料设计的具有一定特性的电子元件,在线路连接的拓扑结构上也和现实中的电路不同。

  在造计算器到一半的时候我打算改单片机,也就是具有“图灵完备性”的简单计算机,他可以执行一切计算机程序。我规划了指令集架构,储存器架构和指令发射方式等。随着除法器,可读写储存器,缓冲队列等重要电路结构的设计成功,我开始有了一个大胆的设想,尝试实现一个具有流水线结构,总线结构,溢出中断,堆栈,标志位寄存器,基本的分支预测和乱序执行等现代高级计算机技术的16bit RISC CPU以及一个附属的包含超越函数的单精度浮点处理器32bit FPU(目前只规划作为计算器使用)。

  工程现在进展顺利,只是因为工程量巨大进度较慢。我已经将16bit整数计算器改成了完全时序逻辑电路控制,并且有溢出判断的计算器。这在全世界Minecraft红石电路玩家里应该是首次。这个计算器作为片外系统借用CPU的ALU部分进行运算并经过总线传输数据。目前CPU的ALU,主储存器,和寄存器等EU部分已经完工,内部环状总线已经完工,CU部分,也就是最繁琐的部分正在建设中。而FPU部分已经完成了加法器,乘法器,三角函数运算单元,开方运算单元。现在整个工程大约有10万门以上的电路。

  目前不可逾越的困难是游戏的基准单位延时t是0.1秒,加载地图最大范围是长宽1024m,高256m的范围,这就限制了计算机的运算速度以及造出来的硬件规模。特别是储存器,我的片上程序储存器只有1kb,这对于现实中的储存器容量而言太小了。所以想利用这有限的空间做一个汇编编译器,简易的操作系统实在是太困难。

  对于工程的介绍我分为6部分:信号系统,硬件单元和硬件算法,储存器架构和流水线,指令集架构,总线和时钟,图形显示原理。我尽量用非专业的语言来介绍,不可避免会用一些术语。

  本工程需要的专业知识基本就是微机原理,数字电路,少许编译原理和计算机图形学。

  先贴一张CPU架构图

游民星空

游民星空

  其中每一个方框都代表一个或若干个硬件单元,小一点的大约一两百个门电路,大的有几千个门电路。架构图基本是按照实际距离做的,在工程上方俯视看到的结构和架构图可以一一对应。下面的俯视图对应架构图的右半部分(Data Bus以及其围住的右下部分。

  PS:目前决定把乱序执行模块取消。

游民星空

信号系统:

  构成超大规模信号系统的逻辑等级基本如下:

  基本信号元件→基本逻辑门→复杂逻辑门→简单功能结构:组合电路,时序电路,触发器→复合功能结构→硬件功能单元→硬件功能模块→计算机

举例如:

  或门,非门→与门,异或门→全加器,信号长度转换器,多态选择器,储存器单元,译码器单元,求补码单元,移位器单元→可读写储存器,译码器,加法器,移位器,时钟发生器→加减法器,乘法器,除法器,可读写储存器阵列,寄存器,程序计数器→总线,ALU,CU→计算机

信号元件:

  先从逻辑底层开始介绍。这个游戏用于传输信号的原件称为“红石电路”,是在游戏地下的矿藏里挖出来的红石矿物加上各种材料合成出来的东西。最主要的原件只有四个,如下图:

游民星空

  从左到右依次为:1.继电器/二极管/锁存器/延时器(同时兼有四个功能)2.红石火把(高电平信号源)3.红石粉(红石导线)4.粘性活塞(可推拉的开/通路元件)

  这些元件可以被放置在其他实体方块上,方块是这个游戏所有东西占据的空间结构,每一个物品占据一个正方体空间,将一个方块空间占满的是实体方块,像下面几个图中蓝色的,紫色的都是实体方块。长度的计量单位游戏中每一个方块的边长是1米,玩家身高大约1.7米。本工程占地大约600x600x200米

  红石火把和继电器:红石火把给邻近的同一高度的方格输出高电平信号,红石粉和继电器都会被激活并传递信号,如下左,而继电器同时为二极管,所以是单向导通的,如下右。继电器亮了表示信号通过,不亮的那个是因为方向反过来所以信号不通过。

游民星空

  信号不是无限传输下去的,每传输15个方格就需要1个继电器延续信号,如下左,可以看到距离红石火把越远的红石导线亮度就越暗,当超过15格还没有继电器的时候就会熄灭。同时每个继电用的电路元件会花0.1秒来反应,并不是一瞬间就继电。游戏中0.1秒即为最小的时间单位,这对应为数字电路里的一刻时间“1t”,一切时序逻辑都是建立在0.1秒这个最小单位上的,这也正好对应现实电路中电子传递速度导致的信号传递延迟。继电器有延时器的特性,可以选择1,2,3,4四种档位,分别对应0.1秒,0.2秒,0.3秒,0.4秒的延时(反应时间),也就是说默认的最小0.1秒反应时间可以延长到0.4秒。如右下,靠左上的继电器档位在1,靠右下的档位在4。这一特性可以用于用尽量少的器件累积长时间延时。比如5个4档继电器串联时信号输出就将延迟2秒。

  另外一个重要的特性是,只要信号输入时间够长,继电器将累积一定的信号,累积值和输入时间相等,最大累积值和档位延迟时间相同。比如4档继电器输入端输入信号0.1秒,则0.4秒后继电器输出信号,长度为0.1秒,当输入端输入0.3秒信号,则0.4秒后继电器输出信号,长度为0.3秒。当输入0.4秒信号及以上,输入端关闭后,继电器输出端将输出0.4秒信号。

游民星空

  像下图那样,红石火把发出信号,之后蓝色方块上每15格继电一次。第二个继电器到第一个橙色方块正好是第16格,此时没再加继电器,所以橙色两个方块上的红石导线熄灭了。每15格的传输线需要一个继电器,所以一个单位传输线路最长距离是15格的线+1格的继电器=16格,16格正好是二进制数,游戏开发者选这个数肯定是为了方便编程。

游民星空

更多相关资讯请关注:我的世界专区

1 2 3 4 5 6 7 8 9 10 11 下一页
友情提示:支持键盘左右键“← →”翻页
人喜欢
游民星空APP
随时掌握游戏情报
code
休闲娱乐
综合热点资讯
单机游戏下载
好物推荐
游民星空联运游戏
技术宅惊世之作 《我的世界》如何打造计算机https://imgs.gamersky.com/upimg/2014/201408281220432943.jpg