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

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

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

总线和时钟

  把总线单拉出来讲是因为本工程CPU的延迟瓶颈在总线而不是储存器。储存器体积虽然大但是立体结构使得信号传输时间相对较短。由于本工程CPU的EU部分接口太多,还都是16bit,还要考虑ALU输入输出接口朝向的问题,排了半天也很难将这些接口的距离缩短,最终变成了一个折线形排布。此时就需要总线将所有接口贯通起来。而本工程总线的一个重要特点是环状的,因为游戏用继电器实现信号传输具有二极管特性,只能单向导通(做成双向很麻烦),所以总线如果实现从任意段输入任意段输出只能走环路。环路虽然增加了一倍的距离,其延迟还在可以接受的范围内,大约5.8秒(每一个bit位的总线一共58个继电器800多米长)。最大的难题是当总线在某一周期的任务完成后,需要进行下一轮数据传输。但是因为环路的特性,继电器的储存器效应会让环路保持原有的信号。此时必须加一个开路装置将原有的信号阻断。按照平常的思路在某一个环路节点加一排活塞将线路切断,信号会在总线里拖尾5.8秒(因为继电器会储存相同长度信号,切断的节点其一边的信号会沿环路绕一大圈传输到另一边后才会最终消失)。这样的话一个周期一共要耗费11.6-12秒,这长度实在是难以接受。

  在我本以为实在没办法解决这个延迟问题准备向其妥协的时候,突然想到了一个解决方案:总线清存也用时序逻辑控制。也就是说在总线上找若干个节点都放上一排开路活塞,每一次传输完毕后所有活塞在同一时间切断线路,那么这时需要考虑的延迟时间就是相隔最远的两个节点之间的距离差。比如最后的成品中相隔最远的两个节点是180米,那么就是1.2秒的信号拖尾,从原来的5.8秒节省到1.2秒,总的单周期时间正好是7秒。只需要加一个总线控制电路让其和系统时钟同步就可以了。而且这样设计的另一个好处马上凸显:在这1.2秒的清存时间里,指令发射端正好可以做各种调整工作,此时不需要使用总线,打了一个时间差,意味着各设备都充分利用到了时间间隙,是一个让我很惊讶的非常巧合的设计,感觉就好像有一种内在驱动力会让这一切看起来就应该是这样契合一样。

  下图黑色方块部分为总线清存器(第一部分已经提到过一次)。图中蓝白相间的,橙灰相间的,以及深灰色的线路全是总线,蓝白相间的是高八位,橙灰相间的是低八位,深灰色的是转角处的线路。颜色不同只是为了方便识别节点和高低位,没有功能上的区别。黑色方块上有很多继电器都是时序控制电路,用于周期性的向活塞输出开路信号。每7秒输出一个1.2秒的信号将一段一段的信号阻隔直到全部消失。

游民星空

  时钟暂定为总线周期7秒,取指周期5秒。所有信号的源头都是CU的时钟信号发生器发出的。一般的指令都是1或2周期,所以一般执行一条指令需要7或14秒,乘除类的运算指令时间较长,最长的除法指令需要6个周期。所以这个计算机的运算速度根本指望不上了,一个极简单的程序就会运行几分钟。毕竟是在“计算机实时模拟计算机”,所以速度什么的已经尽力做到最快了。

PS:在最新版的DATA BUS中,我做了相当多的改进,比如互联驻存机制,每一个节点都可以储存信号,使信号可以在同一周期内一直停留在环路内。

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

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