大家好,我是讯享网,大家多多关注。
小茶来自奥菲寺。
量子比特报告|微信官方账号QbitAI
一个小小的CPU里有多少个晶体管?数十亿个。
自己造一个CPU甚至一台完整的电脑需要多长时间?有个大牛在游戏《我的世界》里用实际行动回答了这个问题:可能要一年多。
这篇关于搭建电脑的教程一转载就在知乎火了。
这不是游戏策略,而是复旦大学纪写的一篇课程论文。他在大二的时候有了一个大胆的想法,经过一年的精心构建,他建造了一台名为Alpha21016的原型计算机。
虽然不能和真正的计算机相比,只能实现一些简单的功能,但是这台计算机体积惊人,光看它复杂的结构就已经能感受到工作量的巨大。
有网友感叹,发课程论文太可惜了,发学术论文也差不多。
这台电脑能做什么?
纪的计算机采用哈佛结构,而不是更常见的冯·诺依曼结构。程序存储器和数据存储器是分开放置的。1kb用于程序,0.5kb用于数据。
可以实现各种函数运算:加减乘除,三角函数,矩阵运算。它包含一个16位CPU和一个32位浮点单元(FPU)。
从硬件上看,它是一个VLSI,逻辑门总数大约在5-10万。光是内存就叠了8层。
建造这样一台计算机,数字电路、微机原理、汇编语言、编译原理缺一不可。想一想哪些课程你失败了,从中吸取教训去熟练运用就更难了。
在专业知识的支持下,可以将电脑拆解成基本部件。
我们都知道计算机的基础是数字电路,数字电路的基础是“门”。纪在游戏中用基本的“红石电路”建造了一个逻辑门。
从逻辑门开始,建立组合电路、时序电路和触发器。有了这些,就可以形成CPU的一些基本单元,最后就可以造出整个计算机了。
实际上,晶体管是数字电路的基础;在我的世界里,红石电路是复杂电路的基本单元。
红石电路玩家可以用火把和方块创造基本的逻辑门:或门和非门。“或”门和“非”门的组合可以构成与门、异或门等任意逻辑门。
但仅仅知道怎么做逻辑门,和做电脑差远了,大概相当于从做一个汉字笔画到写红楼梦的距离。
纪韩文首先画了他的CPU架构草图:
每个盒子代表一个或几个硬件单元,从一两百个门到几千个门不等。这个密集的部分只是架构的右半部分:
了解CPU的基本架构,然后根据架构图做出各个部分,比如CPU的重要模块,算术逻辑单元(ALU)和指令寄存器(IR),这需要做大量的工作。
算术逻辑单元可以进一步分解。它的加法器由几个全加器组成,上面的基本逻辑门可以组成加法器中最基本的全加器(下图)。
加法器也是计算机的核心部件。
同时,《我的世界》还提供了基于活塞机械的开路,用信号控制电路的通断,也就是继电器。利用继电器和逻辑门的组合可以制成存储器。
计算器→单片机→计算机
大概是因为太复杂了,纪韩文一开始并不想直接造一台电脑。
起初,他的目标是建立一个简单的16位计算器。
但进行到一半,他觉得可以实现更复杂的东西,于是想把它改成单片机:这是一台简单的计算机,具有“图灵完备性”,可以执行所有的计算机程序。
他规划了指令集架构,内存架构,指令发起模式等等。
后来,纪成功地设计了触发器、读写存储器、缓冲队列等重要电路。
有了这些,少年制定了一个更宏大的计划:做一个16位CPU。
在CPU旁边,有一个具有超越功能的单精度32位浮点处理器(FPU)。
在这里,作为一个片外系统,计算器并没有被抛弃。纪把16位计算器改成了由完全时序逻辑电路控制的、具有溢出判断的计算器——这在红石电路玩家中是前所未有的。
它借用CPU的ALU部分进行运算,通过总线传输数据。
CPU和计算器的大部分硬件都在这个表中:
桌子上的40块硬件,除了指令译码器、指令发送器、异常中断响应,其他都完成了。还有一些小硬件单元没有列出。
目前CPU的EU部分,如ALU、主存、寄存器等已经完成,内部环形总线已经完成,而CU部分,也就是最繁琐的部分,还没有完成。
肉眼可见的能量
纪韩文说,虽然还没有完全完成,但CPU已经可以执行很多种机器指令(主要是MOV):通用寄存器赋值、字/字节+立即数/间接/直接寻址。
其中最容易用肉眼感受到威力的,还是借用CPU的ALU来完成运算的计算器。
他在视频中展示了加减乘除、正弦余弦、平方根的计算。
从养猪的地方走下楼梯,计算器就在那里。这里有两排按钮,还有一个显示屏,如上图。
在屏幕后面,你可以看到正在运行的电路。
先做加减乘除。如加法:
减法也是如此。但是,这里减号和负号分两个按钮。
乘除法需要大量的计算:三位数乘以三位数,大概需要20秒;除法比较慢,电脑会卡。
下图是除法。因为玩的是除数反号(\),被除数在右边。左下是商,右下是余数。
空限制了计算能力,所以计算器要有溢出判断。如果超过32627的范围,就会报错,显示“E”。
无论是输入的数字还是计算结果,如果超出范围,都会报告错误:
除以“0”也会报错。
注意,计算机是用二进制来计算的,计算完还要从二进制转换成十进制,这就是最终答案。这里使用BCD/BIN转换算法将二进制BIN码转换成十进制BCD码。
然后完成四则运算,正弦和余弦,使用Cordic旋转迭代算法:
需要多次迭代,所以操作比较慢,大概需要两分钟。
相比之下,使用快速平方根算法,根号要快得多:
20秒后就好了。
计算能力到此为止。
而机智的你可能已经感受到显示器对一台电脑有多重要了。所以:
怎么做显示器?
游戏空房间太窄,做不了显卡:2×2红石灯是游戏能控制的最小像素。
因此,纪对做了一个人物展示。
首先,使用七段显示器来表示数字。
△一个“日”字由七根棍子组成。
比如“4”有四根棍子:左上、右上、中、右下。
每根棍子由三个正方形组成。拉回这些方块的活塞,凹进去的“4”就出现了。
而且每个十进制数可以对应四个二进制数,比如3是0011,9是1001。输入一个二进制数,屏幕将以十进制显示。
数字做好了,还有其他字符。纪用的是自己设计的精简ASCII码,不到64个字符:
给每个字符一个数字:0,1,2,…,63。每个数字都可以转换成二进制数00000-111111。
然后,它看起来是这样的:
打开夜视,萤火虫一般美丽。
其实这些字是“印”在显示器的键盘上的。白天看起来是这样的:
也就是说电脑,显示器,键盘都有。
而这样的大作居然出自一个“业余玩家”。
“我不是学计算机的”
现在让我们回顾一下从逻辑门到计算机要经历的过程:
或者,不是门。
→与门、异或门
→全加器、信号长度转换器、多状态选择器、存储器单元、解码器单元、补码单元、移位器单元。
→读写存储器、解码器、加法器、移位器、时钟发生器
→加减器、乘法器、除法器、读写存储器阵列、寄存器、程序计数器
→总线、ALU、CU
→计算机
令人惊讶的是,创造这个复杂项目的纪是复旦大学2011级生命科学学院的本科生,并没有接受过系统的计算机科学教育。他说他对外国选手的作品很感兴趣,所以自学了一些专业课程。
大二的时候,我开始了Alpha21016计算机的开发,作为《网络虚拟环境与计算机应用》课程的一个项目。
从他对技术细节的解读来看,当时的纪在硬件和软件方面已经有了无比充分的准备。
普通人可能知道逻辑电路的基础。普通红石玩家可以利用逻辑电路的基础知识搭建简单或复杂的红石电路。
在纪的项目开始之前,高水平的红石玩家也制作了计算器。
但是没有多少人敢做电脑。纪韩文不仅想到了这一点,而且花了整整一年才实现它,差不多完成了。
毕竟,如果你有一个惊人的大脑,你就必须使用它。
技术博客原始门户:
http://blog.renren.com/blog/263123705/911088369
第一阶段视频门户:
https://v.youku.com/v_show/id_XNTkyNTg0NTEy.html
第二个视频门户:
https://www.bilibili.com/video/av4221161/
—结束—
真诚招聘
量子正在招聘编辑/记者,工作地点在北京中关村。期待有才华有热情的同学加入我们!详情请在QbitAI对话界面回复“招聘”二字。
量子qbitai头条签约作者
追踪AI技术和产品的新趋势。
本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://51itzy.com/32906.html