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

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

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

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

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

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

这台计算机能做什么

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

计算器→单片机→计算机

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

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

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

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

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

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

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

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

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

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

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

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

肉眼可见的威力

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

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

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

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

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

先做加减乘除。

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

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

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

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

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

除以 "0",也会报错。

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

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

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

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

20 秒 ( 就 ) 开好了。

计算能力就展示到这里。

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

显示器怎么做?

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

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

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

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

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

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

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

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

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

然后,显示出来长这样:

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

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

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

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

" 我学的不是计算机 "

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

或门,非门

→与门,异或门

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

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

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

→总线,ALU,CU

→计算机

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

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

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

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

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

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

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

如何在我的世界里打造一台计算机,在《我的世界》里从零打造一台计算机有多难?...相关推荐

  1. 厉害 !在《我的世界》里从零打造一台计算机有多难?复旦本科大神花费一年终于实现!...

    一块小小的CPU里有多少个晶体管?几十亿个. 单枪匹马造出一个CPU乃至完整的电脑需要多长时间?有位大牛在<我的世界>游戏里用实际行动回答了这个问题:可能要花费一年多. 这篇造计算机的教程 ...

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

    点击蓝色"五分钟学算法"关注我哟 加个"星标",天天中午 12:15,一起学算法 栗子 晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一块小小的C ...

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

    朋友的公众号在送书,晚上八点开奖,她说参与的人有点少,那索性拿过来给我的粉丝白piao一下,哈哈哈哈...:送66本技术书籍 栗子 晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 一块小 ...

  4. 第一台计算机如何工作原理,世界上第一台计算机是什么原理_世界上第一台计算机...

    世界上第一台电子计算机叫什么 史上第一台笔记本电脑 世界上第一台计算机诞生于 世界上的第一台电子计算机叫什么 今天你如何和远方的他交流 20世纪改变世界的通讯技术 世界上第一台电脑靠什么作为动力 向蒸 ...

  5. 从零打造聚合支付系统:一、浅谈聚合支付的核心价值

    支付被誉为一切交易活动的咽喉,是商业活动的本质环节. 近两年,市场如雨后春笋般地涌现出一批"聚合支付"商家,如收钱吧.Ping++.钱方好近等等. 从零打造聚合支付系统系列文章将带 ...

  6. 我的世界科学计算机,在我的世界打造一台计算机有多难?复旦大神花了一年

    欢迎关注"创事记"微信订阅号:sinachuangshiji 文/栗子 晓查 来源:量子位(ID:QbitAI) 一块小小的CPU里有多少个晶体管?几十亿个. 单枪匹马造出一个CP ...

  7. 从零打造一台计算机有多难?复旦本科生大神花费了一年心血!

    微信改版,置顶本公众号避免遗漏最新文章! 栗子 晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 一块小小的CPU里有多少个晶体管?几十亿个. 单枪匹马造出一个CPU乃至完整的电脑需要多长 ...

  8. 这台计算机似乎没有安装操作系统_【每日一练】计算机一级考试(一)

    没关注?伸出手指点这里--- 选择题 1.Windows操作系统中,文本文档的扩展名为(). (A).wps (B).doc (C).xls (D).txt 正确答案:D 解析:文本文档的扩展名为.t ...

  9. 世界上以一台计算机体积多大,世界上体积最大的计算机器有多大

    互联网时代,轻薄小巧的计算机给我们的生活带来了巨大的便利,各位也许不知道,世界上体积最大的计算机有多大,接下来,学习啦小编给大家一一介绍下. 世界上体积最大的计算机器简介 第一台电子计算机叫 ENIA ...

最新文章

  1. 假设检验_python 重点
  2. 移动端网站优化有哪些技巧性问题?
  3. p和li之间的应用上的区别
  4. 使用FLANN进行特征点匹配
  5. 每天学一点儿shell:Linux中crontab的用法
  6. win10 uwp unix timestamp 时间戳 转 DateTime
  7. fernflower idea内置的反编译工具
  8. 苹果计算机 win10,苹果windows10怎么安装_苹果电脑安装win10教程
  9. windows下调用外部exe程序 SHELLEXECUTEINFO
  10. 教程 参数设置_AI全自动剪辑软件安装教程,参数设置与使用注意事项
  11. 通达OA2017恢复数据库Access denied for user 'root'@'localhost' (using password: YES)报错的解决办法
  12. java,Hash冲突及解决办法
  13. 通达OA2019安装教程
  14. PAT 1160 Forever
  15. 【开发管理类软件必备知识视频教程之一】登录窗体前台注意事项
  16. 2020哔哩哔哩校招后端开发笔试编程题总结
  17. 计算机硬盘一只闪烁,硬盘灯一直亮,小编教你电脑硬盘指示灯一直亮怎么办
  18. java动态心形程序_java swing实现动态心形图案的代码下载
  19. Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operat
  20. 齿轮振动信号的数字滤波处理-含Matlab代码

热门文章

  1. 显示Linux系统执行的进程
  2. VI编辑器的操作模式
  3. Quartz整合Spring
  4. 精简 opencv python_01_opencv_python_基本图像处理
  5. 完全二叉树最小深度_二叉树:我有多少个节点?
  6. Java有线程安全的set吗?
  7. 如何更规范化编写 Java 代码
  8. struts.xml配置文件(二)
  9. Java面试绕不开的问题: Java中HashMap底层实现原理(JDK1.8)源码分析
  10. 一天搞定CSS:文本text--05