当前位置: 首页 > 科技观察

手工焊接,写二进制码,B站UP主手搓CPU,炸出圈

时间:2023-03-20 14:50:08 科技观察

身为B站UP主,门槛是出了名的高。有人会用AI还原朱元璋,有人会造自动驾驶自行车,有人会用手搓CPU……从外观上看,这款CPU采用了先进的“3D堆叠”技术(说明书狗头),都是由三极管、二极管和电阻焊接而成。具体来说,UP主林乃伟用了1000多只三极管、2000多只二极管、2000多只电阻,几万个焊点,网购材料花了1000多块钱。为了打造这颗CPU,UP的主人花了半年多的时间一点一点焊接,被人戏称为“焊接大帝”。由于体积庞大,网友戏称“这是当年的超级计算机”。连作者自己都开玩笑说它的制造工艺是2.54mm,“比先进的3nm大了近100万倍”。然而,比外表更原始的是UP主的编程方式:由于指令集和架构是自研的,没有适配任何编程语言,所以他选择使用二进制编程,即原始机器语言——0和1这个“庞然大物”的运行效果也很炫酷:UP主用自制的CPU运行运行灯效果,也就是让小灯一个一个点亮。有人说,“看不懂,也不震惊,但这就是我小时候想象的‘科学家’,奇怪的仪器和五颜六色的灯泡,将各种五颜六色的液体相互混合,然后产生各种超能力。氧化反应。”我们知道,要想做出这样的CPU,除了要熟练掌握数字电子、模拟电子、组装等基础知识外,还需要有超强的动手能力和毅力。过程的艰辛,普通人可能难以理解。那么,为什么琳琳要花那么多时间去做呢?”写代码的时候需要分析可执行文件中的二进制,当时我就在想,CPU是怎么执行0101这一串的呢?结合数学和电学的课程,我猜想可能是case,所以想试试,一开始我以为是用门级电路做的,但是感觉难度不是很高,如果想从头理解整个东西,我就从搭建开始最基本的模拟电路。”林心告诉机机。当然,做UP主只是小林的爱好之一,他的工作是php/.net/AndroidAPP程序员。他说自己喜欢学习各种新技术,有很强的学习难度的技术的动力。他有很多新奇的想法,但他没有资金去实现。B站火了之后,希望Lin能有更多的资金来实现自己的想法。虽然这款CPU的打造只用了半年时间,但林总透露,它的原理图是几年前画的,大概长这样:来源:https://tieba.baidu.com/p/7432882849?see_lz=1画完图,Up主先验证了门电路。该步骤属于理论验证,是必须的步骤。图片来源:https://tieba.baidu.com/p/7432882849?see_lz=1#140122397516l验证完成后,搓手部分正式开始。CPU通常由通用寄存器、运算单元、控制器和数据通路组成。Upmaster先从寄存器开始。他首先构建了一个移位寄存器——一种基于触发器级联的设备,可同时在多个脉冲下工作。用Up主的话来说,数据从一个方向进入,一个时钟周期移动一个位置,最后从另一个方向出来。最终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。内存。然后Upmaster开始构建指令解码器,它解析CPU指令运行,这也是控制器的一部分。最后要组装两个部分:算术单元(ALU)和通用高速缓存。至此,CPU中的寄存器、控制器、运算器等主要部件已经完成,一个手工焊接的CPU基本完成!蹭出来了,怎么跑?由于这个CPU是Up老板自己做的,全是二极管、三极管和电阻焊接而成,所以没有现成的指令集和编程语言可以使用。这样的CPU是如何运行的?让我们回到最原始的二进制。二进制是计算机工作机制中最低的基本原理。对于计算机专业的学生来说并不陌生,但是直接用二进制编程并不是人人都能掌握的技能。UP主使用二进制编程让手搓的CPU跑起来。有了二进制码,如何进入机器?Up主自己“演绎”代码,真正的手敲代码。目前共有三种指令,包括内存分配指令、内存地址左移指令和跳转指令。MasterUp写了一个流水灯的程序进行测试。既然指令也输入了,那CPU能跑出结果吗?运行灯有时无法正常点亮时出现了一些小问题。别着急,有bug是常有的事,我们调试一下。Up主很快就找到了bug,就是“某处断线”。修复后,为了让运行效果更明显,Up主重新编写了二进制代码,调整CPU跳转到0X00FF运行。再次点击程序,结果运行成功,流水灯正常亮,完全没有问题。组件齐全,程序可以运行。这个“爆肝”搓手项目终于完成了。有网友留言称:“冯·诺依曼喊出了自己是专家。”在完成这个CPU的基本原型后,林打算继续完善它的功能,使其能够运行更复杂的程序。