机器之心报道
编辑:小舟、张倩
CPU如何执行0101?出于这种好奇心,一个哔哩哔哩的老板自己焊接了一个中央处理器.
作为b站的UP主,门槛是出了名的高。
有人可以用AI还原朱元璋,有人可以造自动驾驶自行车,有人可以用手搓CPU…….
从外观上看,这款CPU采用了先进的“3D堆叠”技术(手动狗头),全部由三极管、二极管、电阻焊接而成。
具体来说,UP的拥有者林乃伟使用了约1000个三极管、2000个二极管、2000个电阻,焊点数以万计,网购材料花费约1000元。
为了打造这款CPU,UP主花了半年时间逐点焊接,人们给他起了个外号“焊帝武”。
因为体积巨大,网友开玩笑说:“这是当年的巨型电脑。就连作者本人也嘲讽其制造工艺为2.54mm,“比先进的3 nm大了近100万倍。」
但是,比外表更古灵精怪的是UP大师的编程方法:因为指令集和架构都是独立开发的,没有适应任何编程语言,所以他选择使用二进制编程,也就是原来的机器语言——0和0。
1。
这种“庞然大物”奔跑的效果也很酷:
UP用自制的CPU运行流水灯效果,即让小灯一个个点亮。
有人说:“我不懂,也不是很震撼,但这就是我小时候想象的“科学家”。奇怪的仪器和五颜六色的灯泡将各种五颜六色的液体相互混合,然后产生各种超强的氧化反应。」
我们知道,我们必须控制这个。
CPU,除了掌握数字电、模拟电、汇编等基础知识外。还应该有超强的动手能力和毅力。这个过程的艰辛可能普通人很难理解。那么,林为什么要费这么大的劲去做呢?
“在编写代码时,我们应该分析可执行文件中的二进制。当时我们在想,CPU是怎么执行0101这个字符串的?
怎么样?结合数字电的课程,我估计大概是这样,所以就想试一试。起初,我想用门级电路来做,但我并不觉得很难。如果我想从头开始了解整个事情,我开始从最基本的模拟电路开始构建它。”林告诉机器之心。
当然,当UP老板只是林的一个爱好时,他的工作就是php/。net/安卓APP。
程序员。他说自己喜欢学习各种新技术,学习高难度技术的动力很强,有很多新奇的想法,但是没有钱去实现。在这个B
火了之后,我希望林能有更多的资金来实现他的创造力。
一位 B 站 UP 主的手搓 CPU 之路
虽然只花了半年时间就造出了这款CPU,但林透露,它的原理图是几年前画的,大概是这样的:
_来源:https://tieba.baidu.com/p/7432882849?见_lz=1_
画图后,Up主先验证门电路。这一步属于理论验证,是必要的一步。
_来源:https://tieba.baidu.com/p/7432882849?见_lz=1#140122397516l_
经过验证,搓手部分正式开始。CPU通常由通用寄存器组、算术单元、控制器和数据通路组成。从寄存器开始。
他首先使用Up构建了一个移位寄存器——一个基于级联触发器的设备,可以在几个相同的时间脉冲下工作
换句话说,数据从一个方向进入,在一个时钟周期内移动一个位置,最后从另一个方向出来。上行主机的最终产品是一个6位移位寄存器:
有网友问:“为什么轮班送?
存器不用现成的芯片?」Up 主表示「为了乐趣」。_图源:https://tieba.baidu.com/p/7432882849?see_lz=1#140122397516l_
接着,Up 主手搓的第二个 CPU 部件是程序计数器(PC)。PC 是控制器的一部分,涉及的功能较多,也是手搓阶段最复杂的一个模块。CPU
重启时要将它的计数清零,工作状态下要借助 PC 实现挨个字节读取指令和数据,每操作一次,计数自动加一,同时还要实现直接跳转、调用函数,函数返回的功能,因此
PC 的构建过程比移位寄存器要复杂和困难得多。
尤其是 Up 主采用「纯手搓」――焊接的过程也会遇到一些虚焊的麻烦,找出问题并解决花费了 Up 主大量时间和精力。其中有一次一个二极管焊反了,Up 主排查了
3 天。
不过,最后的成品很优秀,上电测试也成功通过:
CPU 中还有两个关键的部分――ROM 和 RAM,不过这两个部分手搓不太现实,Up 主选择用 hm628512 来组装 ROM 和 RAM。
然后 Up 主开始构建指令译码器,用来解析 CPU 指令以运行,它也是控制器的一部分。
最后还有两个要组装的部件:运算器(ALU)和通用缓存。
至此,CPU 中寄存器、控制器、运算器等主要部件已经完备,一个手工焊接的 CPU 就基本做成了!
搓出来了,怎么运行?
由于这个 CPU 是 Up 主自己手搓的,全部是由二级管、三极管和电阻焊接而成,因此没有现成的指令集和编程语言能够使用。那这样的 CPU
怎么跑起来?回归最原始的二进制吧。
二进制在计算机工作机制中属于最底层的基础原理,对于计算机专业的同学来说并不陌生,但用二进制直接编程就不是所有人都能掌握的技能了。UP
主正是借助二进制编程让手搓的 CPU 跑了起来。
有了二进制码,怎么输入机器?Up 主自己上手「扣」代码,真 手敲代码。目前有三条指令,包括内存赋值指令、内存地址左移指令和跳转指令。Up
主编写了一个流水灯的程序,用于测试。
这下指令也输入了,CPU 能跑出结果吗?
出现了一些小问题,流水灯有时不能正常亮起。别担心,有 bug 是常有的事,那 debug 一下吧。
Up 主很快就找到了 bug,是「有个地方断开了」。修复之后为了让运行效果更明显,Up 主又重新写了一遍二进制代码,将 CPU 调整为跳转到 0X00FF
处运行。
再手扣一遍程序,结果是运行成功,流水灯正常亮起,完全没有问题。
组件完整,能运行程序,这个「爆肝」的手搓项目终于大功告成。
网友留言道:「冯诺依曼大呼内行」。
在完成这个 CPU 的基础原型之后,林同学下一步打算继续完善它的功能,让它可以运行更加复杂的程序。
_参考链接:_
_https://www.bilibili.com/video/BV1sy4y1j7Ue?from=search
&seid;=2585687743248627133_
_https://tieba.baidu.com/p/7432882849?see_lz=1_
_https://mp.weixin.qq.com/s/cUq8AXCkJ1EQTXSkBPYLmw_