小型CPU中有多少个晶体管? 其中有数十亿。
独自建造一个CPU甚至一台完整的计算机需要多长时间? 专家在《我的世界》游戏中用实际行动回答了这个问题:可能需要一年多的时间。
这篇搭建电脑的教程一经转发就在知乎上火了。
这不是游戏指南,而是复旦大学季文瀚写的课程论文。 大二时,他有一个大胆的想法。 经过一年的精心建造,他建造了一台计算机的原型机并为其命名。
虽然无法与真正的计算机相比,只能实现一些简单的功能,但这台计算机的体积却是惊人的。 光是看其复杂的结构就已经可以感受到工程量之巨大。
有网友感叹,本来可以发表学术论文,却发表课程论文,太可惜了。
这台电脑能做什么?
季文瀚的计算机采用的是哈佛架构,而不是更常见的冯·诺依曼架构。 程序存储器和数据存储器分开放置。 程序存储器为1kb,数据存储器为0.5kb。
它可以实现各种函数运算:加、减、乘、除、三角函数和矩阵运算。 它包含一个16位CPU和一个32位浮点单元(FPU)。
从硬件角度看,它是一种超大规模集成电路,逻辑门总数为5万到10万个。 仅内存就有8层。
要搭建这样的计算机,数字电路、微机原理、汇编语言、编译原理都是缺一不可的。 想想你有多少门课程不及格。 从学习到熟练使用就更困难了。
在专业知识的支持下,可以将计算机拆解成其基本部件。
我们都知道计算机的基础是数字电路,而数字电路的基础就是“门”。 季文寒利用了游戏中基本的“红石电路”来构建逻辑门。
从逻辑门开始,我们构建组合电路、时序电路和触发器。 有了这些,我们就可以组成CPU的一些基本单元,最终构建出整个计算机。
在现实世界中,晶体管是数字电路的基础; 在《我的世界》中,红石电路是构成复杂电路的基本单元。
红石电路玩家可以仅使用火把和方块来创建基本逻辑门:“或”门和“非”门。 或门和非门的组合可以创建任意逻辑门,例如与门和异或门。
但仅仅知道如何制造逻辑门与制造计算机还相去甚远。 可能大致相当于从打汉字笔划到写出《红楼梦》的距离。
季文寒首先画了一张他的CPU架构的草图:
每个方框代表一个或多个硬件单元。 较小的约有一两百个门电路,较大的则有数千个门电路。 这个密集的部分只是架构的右半部分:
了解了CPU的基本架构后,我们再根据架构图分别搭建各个部分,比如CPU的重要模块“算术逻辑单元”(ALU)和“指令寄存器”(IR)。 工程量巨大。
算术逻辑单元可以进一步拆解。 其加法器由多个全加器组成。 上面的基本逻辑门可以构成加法器中最基本的全加器(下图)。
全加器也是计算机的核心部件。
同时,《我的世界》还提供了基于活塞机械的断路器,利用信号来控制电路的通断,即继电器。 可以使用继电器和逻辑门的组合来创建存储器。
计算器→单片机→电脑
大概是因为太复杂了,季枭寒一开始并不想直接去架电脑。
最初,他的目标是构建一个简单的 16 位计算器。
但中途,他觉得自己可以实现更复杂的东西,于是想把它改成单片机:这是一台具有“图灵完备性”的简单计算机,可以执行任何计算机程序。
他规划了指令集架构、内存架构、指令发布方式等。
后来,季文翰成功设计了触发器、可读写存储器、缓冲队列等重要电路。
有了这些,男孩制定了一个更加雄心勃勃的计划:制造一个16位CPU。
CPU 旁边有一个包含超越函数的单精度 32 位浮点处理器 (FPU)。
这里,计算器作为片外系统并没有被放弃。 季文寒将16位计算器改成了完全由时序逻辑电路控制,并且具有溢出判断的计算器——这在红石电路玩家中是前所未有的。
它借用CPU的ALU部分来执行运算并通过总线传输数据。
大多数 CPU 和计算器的硬件都在下表中:
桌子上的40块硬件除了指令译码器、指令发送器、异常中断响应之外,全部完成。 还有一些小硬件单元没有列出。
目前CPU的ALU、主存、寄存器等EU部分已经完成,内部环形总线已经完成,而CU部分,也就是最繁琐的部分,还没有完成。
可见功率
季文汉表示,虽然还没有完全完成,但CPU已经可以执行很多种机器指令(主要是MOV):通用寄存器赋值、字/字节+立即数/间接/直接寻址。
其中,最容易用肉眼感受到威力的就是借用CPU的ALU来完成计算的计算器。
在视频中,他演示了加法、减法、乘法、除法、正弦、余弦和平方根计算。
从饲养小猪的地方走下楼梯,就是计算器所在的地方。 这里有两排按钮,还有显示屏,如上图所示。
在屏幕后面,您可以看到正在运行的电路。
先做加法、减法、乘法和除法。 例如,加法:
减法也是如此。 不过这里减号和减号被分成了两个按钮。
乘法和除法需要较大的运算量:一个三位数乘一个三位数大约需要20秒; 除法速度较慢,计算机会死机。
下图显示了划分。 因为使用了反除号(),所以被除数在右边。 左下是商,右下是余数。
空间限制了计算能力,所以计算器必须有溢出判断。 如果超出±32627的范围,就会报错,并显示“E”。
无论是输入数字还是计算结果,超出范围都会报错:
除以“0”也会报错。
注意,计算机使用二进制来计算。 计算完成后,需要将二进制转换为十进制才能得到最终的答案。 这里使用BCD/BIN转换算法,将二进制BIN码转换为十进制BCD码。
四次算术运算完成后,仍然有正弦和余弦,使用旋转迭代算法:
需要多次迭代,因此操作速度较慢,大约需要两分钟。
相比之下,使用快速平方根算法打开根符号要快得多:
20 秒内就准备好了。
这里显示了计算能力。
而聪明的你可能已经感受到了显示器对于电脑来说是多么的重要。 所以:
如何制作展示?
游戏空间太狭窄,搭建显卡不太现实:2×2红石灯是游戏可以控制的最小像素。
于是,季文寒做出了人物展示。
首先,使用七段显示器来表示数字。
△“日”字是由7根小棍组成的
例如“4”有左上、右上、中、右下,共四根棍子。
每根棍子由三个正方形组成。 拉回这些块的活塞,露出凹陷的“4”。
每个十进制数可以对应一个四位二进制数,例如3是0011,9是1001。输入一个二进制数,屏幕将以十进制显示。
数字已经完成,还有其他字符。 季文寒使用了他设计的ASCII码的缩减版,长度不到64个字符:
对每个字符进行编号:0、1、2、...、63。每个数字都可以转换成二进制数00000-。
然后,它显示如下:
打开夜视,就像萤火虫一样,美丽极了。
事实上,这些字是“打印”在显示器的键盘上的,白天看起来是这样的:
换句话说,电脑有,显示器有,键盘也有。
而这样的杰作,居然出自一位“业余爱好者”之手。
“我不是学电脑的”
现在让我们回顾一下从逻辑门到计算机要经历的过程:
或门、非门
→与门、异或门
→全加器、信号长度转换器、多态选择器、存储单元、解码器单元、补码单元、移位器单元
→可读写存储器、解码器、加法器、移位器、时钟发生器
→加减法器、乘法器、除法器、可读写存储器阵列、寄存器、程序计数器
→总线、ALU、CU
→电脑
令人惊讶的是,创建这个复杂项目的季文翰是2011年复旦大学生命科学学院的本科生,没有接受过系统的计算机科学专业教育。 他说,他对看到外国选手的作品很感兴趣,所以他自学了一些专业课程。
我在大二的时候开始了计算机开发,作为“网络虚拟环境和计算机应用”课程的一个项目。
从他对技术细节的解读来看,季文寒当时在硬件和软件方面都已经做好了极其充分的准备。
普通人可能了解逻辑电路的基础知识。 普通红石玩家可以利用逻辑电路的基础知识搭建简单或复杂的红石电路。
在季文寒的项目开始之前,高级红石玩家也制作过计算器。
但没有多少人敢于考虑建造一台计算机。 季文寒不仅想到了,还花了整整一年的时间去实施,已经快完成了。
毕竟,如果你有一个具有惊人能力的大脑,你就必须使用它。
技术博客原文传送门:
第一个视频门户:
第二期视频传送门: