|在《我的世界》中,造出一台计算机有多难?玩家脑细胞死完了


本工程基于一个叫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 , 这对于现实中的储存器容量而言太小了 。 所以想利用这有限的空间做一个汇编编译器 , 简易的操作系统实在是太困难 。


    推荐阅读