36

在《我的世界》里从零打造一台计算机有多难?复旦本科生大神花费了一年心血

 5 years ago
source link: https://www.tuicool.com/articles/YFziQbe
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

栗子 晓查 发自 凹非寺

量子位 报道 | 公众号 QbitAI

eiiUrqv.gif

一块小小的CPU里有多少个晶体管?几十亿个。

单枪匹马造出一个CPU乃至完整的电脑需要多长时间?有位大牛在《我的世界》游戏里用实际行动回答了这个问题:可能要花费 一年多

这篇造计算机的教程一经转载就在知乎上火了。

qeuAvqI.jpg!web

ya2EJjZ.jpg!web

这并不是一篇游戏攻略,而是来自复旦大学的 季文瀚 ,写的一篇课程论文。他在大二时就有了大胆的设想,经过一年的精心营造,建起了一个计算机雏形,取名 Alpha21016

虽然它不能与现实中的计算机相比,只能实现一些简单的功能,但这台计算机体积惊人,光看它复杂的结构就已经能感受工程量的巨大。

有网友感叹,发课程论文可惜了,简直可以发学术论文啊。

这台计算机能做什么

季文瀚计算机使用的是 哈佛结构 ,而非更常见的冯·诺依曼结构。程序储存器和数据储存器分开放置。程序储存器1kb,数据储存器0.5kb。

它可以实现各种函数运算:加减乘除、三角函数还有矩阵运算。它包含一个16bit的CPU和一个32bit的浮点运算单元 (FPU) 。

nU7NjmI.gif

从硬件上看,它是个超大规模集成电路,逻辑门总数大概在5万-10万门之间。光是存储器堆叠起来就有8层。

uUFbmm7.jpg!web

要造出这样一台计算机,数字电路、微机原理、汇编语言、编译原理都不能少。想想你挂过哪几门课,从学会到熟练运用就更难了。

r2mIryE.jpg!web

有了专业知识的支持,就能将计算机拆解成基本的部件。

我们都知道计算机的基础是数字电路,数字电路的基础是“门”,季文瀚用游戏里基本的“红石电路”搭建出了逻辑门。

从逻辑门出发,再搭建出组合电路、时序电路、触发器,有了这些就能组成CPU的一些基本单元,最终造出整个计算机。

现实世界中,晶体管是数字电路的基础;在《我的世界》中,红石电路是构成复杂电路的基本单元。

uQNbq2q.jpg!web

红石电路玩家,只用火把和方块,就能造出基本的 逻辑门 :或门和非门。或门和非门的组合可以造出与门、异或门等任意逻辑门。

但仅仅知道怎么制造逻辑门离造出计算机还很远,可能大致相当于造出汉字笔画到写出《红楼梦》的距离。

季文瀚先给自己的CPU架构画了一个草图:

aIJv2yu.jpg!web

其中每一个方框都代表一个或若干个硬件单元,小一点的大约一两百个门电路,大的有几千个门电路。这个密密麻麻的部分,也只是架构的右半部分而已:

bM73Ifn.jpg!web

知道了CPU的基本架构,再按照架构图分别造出每个部分,比如CPU的重要模块“算数逻辑单元”(ALU)和“指令寄存器”(IR),工程量很大。

算数逻辑单元还能进一步拆解,它的加法器由数个全加器组成,上面基本的逻辑门可以组成加法器中最基本的 全加器  (下图) 。

FbUJVfm.jpg!web

全加器也是计算机的一个核心部件。

同时,《我的世界》还提供的基于活塞机械的断路,用信号控制电路的通断,也就是继电器。利用继电器和逻辑门的组合可以造出存储器。

ruAVV37.gif

计算器→单片机→计算机

大概是因为太复杂,季文瀚一开始也没想直接搭个计算机。

最初,他的目标是造出一台16 bit的简单计算器。

但做到一半,他就觉得可以实现更复杂的东西,于是想改成 单片机 :这是具有“ 图灵完备性 ”,可以执行一切计算机程序的简单计算机。

他规划了指令集架构,储存器架构,以及指令发射方式等等。

后来,触发器、可读写储存器、缓冲队列等等重要电路,季文翰都设计成功了。

67Bnq2Q.jpg!web

有了这些,少年又做了更雄伟的计划:做个 16 bit的 CPU

CPU旁边,还有一个包含超越函数的单精度32 bit浮点处理器 ( FPU ) 。

这里, 计算器 作为片外系统,并没有被抛弃。季文翰把16 bit计算器,改成了完全时序逻辑电路控制、且有溢出判断的计算器——这在Minecraft红石电路玩家里,已是 前所未有

它借用CPU的ALU部分进行运算,并经过总线传输数据。

CPU和计算器的大部分硬件,都在这张表格里:

MV7zQjU.jpg!web

表上的40个硬件,除了指令译码器、指令发射端、异常中断响应没有做完,其他都做好了。还有一些小的硬件单元没有列出来。

目前,CPU的ALU、主储存器、和寄存器等 EU部分 已经完工,内部环状总线已竣工, CU部分 ,也就是最繁琐的部分,还没有完工。

iMBbYrQ.gif

肉眼可见的威力

季文翰说,虽然还没完全竣工,但CPU已经可以执行许多种机器指令 (以MOV为主) :通用寄存器赋值,按字/字节+立即数/间接/直接寻址。

其中,最容易用肉眼感受到威力的,还是借用CPU的ALU完成运算的 计算器

他在视频里展现了 加减乘除正余弦 ,以及 平方根 的计算。

EVb2YbA.gif

从养着小猪的地方走楼梯下来,就是计算器的所在地了。这里有两排按钮,还有显示屏,如上图。

AnIV3mN.gif

屏幕后面,可以看到运转的电路。

先做加减乘除。比如加法:

减法也是同理。只不过,负号和减号在这里分成了两个按钮。

乘法和除法的运算量比较大:三位数乘三位数,大概需要20秒;除法更慢一些,电脑还会卡。

下图就是除法,因为打了 反除号 (\) ,所以被除数在右边。左下是商,右下是余数。

JFRnman.jpg!web

空间限制了算力,所以计算器要有 溢出判断 ,超过±32627的范围就会报错,显示“E”。

不论是 输入的数 还是 计算结果 ,超出范围都会报错:

FNJ3Mjm.gif

除以“0”,也会报错。

注意,计算机用二进制来计算,算好之后还要从二进制转成十进制,才是最终的答案。这里用到了 BCD/BIN 转换算法,把二进制BIN码,转成十进制BCD码。

四则运算做完了,还有 正余弦 ,用的是Cordic旋转迭代算法:

AR7fMjv.jpg!web

需要多次迭代,所以运算比较慢,大概花了两分钟。

相比之下 开根号 就快许多,用的是快速平方根算法:

i6byqy2.jpg!web

20秒 (就) 开好了。

计算能力就展示到这里。

而机智的你可能已经也感受到了,显示器对于一台计算机有多重要。那么:

显示器怎么做?

游戏空间太狭窄,造显卡是不现实的:2×2个红石灯,就是游戏能控制的最小像素了。

所以,季文翰做了 字符显示器

首先,用 七段显示器 来表示数字。

Ive6zuQ.jpg!web

一个“日”字,是7根小棒组成的

比如,“ 4 ”就有左上、右上、中、右下,一共四根小棒。

每根小棒又由 三个方块 组成。把这些方块的活塞往回抽,就显示出凹陷的“4”了。

而每个十进制数,都可以对应二进制的四位数,比如3是0011,9是1001。输入二进制数,屏幕就能显示成十进制。

数字搞定了,还有其他字符。季文翰用了自己设计的缩减版ASCII码,只有不到64个字符:

6bYJNrU.jpg!web

给每个字符编个号:0,1,2,…,63。每个号码,都可以转成二进制数00000-111111。

然后,显示出来长这样:

mQBn2yn.jpg!web

打开夜视,萤火一般,美不胜收。

其实,这些字是“印”在了显示器的键盘上,白天长这样:

Qna2eaf.jpg!web

也就是说,计算机有了,显示器有了,键盘也有了。

而这样的杰作,居然来自一位“业余选手”。

“我学的不是计算机”

现在来回顾一下,从逻辑门到计算机,都要经历什么:

或门,非门

→与门,异或门

→全加器,信号长度转换器,多态选择器,储存器单元,译码器单元,求补码单元,移位器单元

→可读写储存器,译码器,加法器,移位器,时钟发生器

→加减法器,乘法器,除法器,可读写储存器阵列,寄存器,程序计数器

→总线,ALU,CU

→计算机

令人意外的是,造出这项复杂工程的季文瀚,是复旦大学2011级生命科学学院的本科生,没有受过系统地计算机科学专业教育。他说,看到国外玩家的作品很感兴趣,才自学了一些专业课。

JjuENvQ.jpg!web

大二便启动了Alpha21016计算机的开发,作为《网络虚拟环境与计算机应用》这门课的项目来做的。

UNRZJnb.jpg!web

从他对技术细节的解读来看,那时的季文翰,已经硬件和软件上拥有无比充分的准备。

普通人的话,可能了解逻辑电路的基础。 普通红石玩家 的话,可以把逻辑电路的基础知识,用来搭建简单或复杂的红石电路。

高阶红石玩家,也曾经在季文瀚的项目开始之前,造出过计算器。

但制造一台计算机,并没有多少人敢想。季文翰不但想到,还用了一整年去实现,几近完成。

毕竟,如果有个容量惊人的大脑,总归要拿来用的吧。

bEVBf2U.gif

技术博客原文传送门:

http://blog.renren.com/blog/263123705/911088369

一期视频传送门:

https://v.youku.com/v_show/id_XNTkyNTg0NTEy.html

二期视频传送门:

https://www.bilibili.com/video/av4221161/

—完 —

订阅AI内参,获取AI行业资讯

jeMNBjI.jpg!web

加入社群

量子位AI社群开始招募啦,量子位社群分:AI讨论群、AI+行业群、AI技术群;

欢迎对AI感兴趣的同学,在量子位公众号(QbitAI)对话界面回复关键字“微信群”,获取入群方式。 (技术群与AI+行业群需经过审核,审核较严,敬请谅解)

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

AVjI3uE.jpg!web

量子位  QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

喜欢就点「好看」吧 !


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK