纯手工拼晶体管!可跑程序的CPU原来是这样做出来的!
<section><p>【来源:量子位】</p>
<p>一个人,到底能<strong>肝</strong>到什么程度?</p>
</section>
<section>最近B站上大火的一个视频,或许给了这个问题一个完美诠释:</section>
<blockquote>
<section><strong>纯!手!工!</strong>自制CPU!</section>
</blockquote>
<section></section>
<section>这位叫做<strong>“奶味的”</strong>Up主,耗时整整半年,用他那双勤劳的双手,“逐点”焊接,最终打造出了一个完整CPU!</section>
<section>手工做一个CPU能用么?</section>
<section>当然可以,他还做了一个demo展示,来看一下效果吧。</section>
<section></section>
<section>纯手工“肝”出一个CPU,还成功运行了流水灯效果,直接引发了一大波网友们的惊呼:</section>
<blockquote>
<section>肝帝!焊武帝!</section>
<section>人长在肝上了!</section>
</blockquote>
<section>(感受下这满屏的Respect)</section>
<section> </section>
<section>接下来,让我们一同看下“肝帝”自制CPU的完整过程。</section>
<h2>纯手工自制CPU</h2>
<section>其实在发布这个视频之前,Up主便在贴吧中“开玩笑”的说了句:</section>
<blockquote>
<section>CPU太贵了,买了显卡就买不起CPU,手工捏个出来……</section>
</blockquote>
<section> </section>
<section>万万没想到,真的是说干就干。</section>
<section>据这位Up主介绍,他主要采用了3个原材料:</section>
<blockquote>
<section>二极管、三极管和电阻。</section>
</blockquote>
<section>通常来讲,CPU的结构可以大致分为运算逻辑部件、寄存器部件和控制部件等。</section>
<section>而他最先“下手”的,就是CPU的<strong>寄存器</strong>部分。</section>
<section>Up主设计了一个6位的<strong>移位寄存器</strong>:</section>
<section> </section>
<section>它的作用不仅能是用来存储,还能在时钟信号的控制下,将数据进行进行逐次右移或左移。</section>
<section>简单来说就像是一个交警叔叔,当数据从一个方向进来的时候,这个移位寄存器可以指挥它什么时候该往哪里走。</section>
<section>Up主处理的第二个结构,是<strong>程序计数器</strong> (PC)。</section>
<section>它作用简单来说,就是记录程序运行的位置。</section>
<section>而这也是整个项目下来最耗时、最复杂的部分,花了整整3个月之久。</section>
<section> </section>
<section>程序计数器涉及的功能那可就多了。</section>
<section>像最基本的就是挨个字节读完指令后,计数要自动+1;而CPU重启之后,计数便会清零。</section>
<section>而且在不同的条件之下,还要能实现直接跳转、调用函数、函数返回等功能。</section>
<section>听着就有够复杂的了。</section>
<section>奈何,除此之外,还时常伴随着各种各样的“玄学问题”。</section>
<section>Up主就举了个例子:</section>
<blockquote>
<section>花了一个多星期才在最深处找到一只焊反的二极管……</section>
</blockquote>
<section>但功夫不负有心人,在经历3个月令人头秃的时光之后,最复杂的模块还是被他搞定了。</section>
<section>上电测试也没有问题:</section>
<section> </section>
<section>然后就是硬盘(ROM)和内存(RAM)。</section>
<section>这是CPU外的比较庞大两个部分要手搓一个不太现实。</section>
<section>因此,Up主用上了比较容易操作的hm628512来做ROM和RAM:</section>
<section></section>
<h6><strong>△</strong>左:RAM和指针 右:ROM</h6>
<section>再将ROM和RAM组装上去,现在CPU的基础模块已经基本完成了。</section>
<section>接下来就是打造<strong>指令译码器</strong>。</section>
<section>它主要是用于把传到这里的CPU指令,进行解析运行:</section>
<section> </section>
<section>再把做加减乘除的运算器(ALU)加上去:</section>
<section> </section>
<section>最后还得再焊一个通用<strong>缓存</strong>上去:</section>
<section> </section>
<section>现在,这个全部由三极管、二极管和电阻焊接而成的CPU就完成了!</section>
<section>看到这密密麻麻的元件,工程量的浩大就不用多说。</section>
<section>也难怪能让一众网友直呼“肝帝”了。</section>
<h2>还有纯手写最原始代码</h2>
<section>以为纯手工焊接就完了?</section>
<section>不不不,还有更<strong>硬核</strong>的。</section>
<section>因为这个CPU的指令集和架构都是自主研发的,所以没有适配的编程语言。</section>
<section>那怎么能让它跑起来呢?</section>
<section>这位Up主的对策是:</section>
<blockquote>
<section>纯手写最原始代码——<strong>二进制编程</strong>!</section>
</blockquote>
<section> </section>
<section>噫吁嚱!噫吁嚱!</section>
<section>这一手露的,直接引发了网友们的<strong>第二波高潮</strong>:</section>
<blockquote>
<section>手写指令集,牛皮!这才是真·写代码!</section>
<section>直接上机械码,太狠了吧!</section>
</blockquote>
<section>然后……然后……</section>
<section>Up主竟然就开启了<strong>上古编程模式</strong>——<strong>“扣”程序</strong>!</section>
<section> </section>
<section>面对此情此景,怎么一句“绝绝子”了得。</section>
<section>……</section>
<section>一切准备工作就绪。</section>
<section>接下来,便是见证奇迹的时刻。</section>
<h2>亮灯,跑起!</h2>
<section>但最开始,程序的运行并不是一帆风顺。</section>
<section>即便大神重启了几次,跑马灯的效果偶尔还是出现问题。</section>
<section> </section>
<section>但bug很快被找到了:</section>
<blockquote>
<section>有个地方断开了。</section>
</blockquote>
<section>与此同时,因为还没有I/O接口,所以测试使用的灯是临时寄存器的灯。</section>
<section>而且左移指令和跳转指令都使用了同一组灯。</section>
<section>因此,流水灯的效果就不是非常明显。</section>
<section>于是,大神重新编程,使CPU跳转到0X0F处运行。</section>
<section>如此一来,在跳转时灯就是灭的,给左移指令让出了一条路。</section>
<section> </section>
<section>一切修改完毕,重新“扣”程序,启动!</section>
<section>这一次,就没有任何的异常了。</section>
<section> </section>
<h2>走进“肝帝”大神</h2>
<section>在看完这波“神级”操作之后,想必大家都想了解这位大神。</section>
<section>量子位帮你实现这个梦想。</section>
<section>大神原名<strong>林乃卫</strong>,广西北海人。</section>
<section>做这个项目的灵感,来源于在他写代码时分析可执行文件中的二进制。</section>
<section>那时候大神便萌生出了一想法:</section>
<blockquote>
<section>CPU是怎么执行这一串0101的?</section>
</blockquote>
<section>在结合数电课程的知识之后,大神猜测到了大致的原理,于是就想试一试。</section>
<section>最初他想用门级电路来做的,但是感觉难度不是很高,又想把整个过程从零开始理解透。</section>
<section>于是,便决定从最基础的<strong>模拟电路</strong>开始。</section>
<section>而整个过程最难的部分,便是<strong>“器件每一级的连接”</strong>和<strong>“CPU的运行速度”</strong>:</section>
<blockquote>
<section>在此之前没有看过关于CPU原理方面的书籍,是靠自己对门电路的理解而设计的一套电路 ,想设计一套属于自己的架构。</section>
<section>从最基础的三极管开关到门级电路,网上找的电路图根本没法用,需要自己设计。虽然设计好后理论通过了,但是门级之间组合成功能级器件就有新的问题,功能级的电路再多个 组合起来成为功能模块又会产生新的问题,模块与模块之间连接更会产生新的问题.</section>
<section>这每一级的问题都很有可能要修改基础电路,然后又会从头开始产生新的问题。</section>
<section>因为没有专业的设备去调试,我用的是一盏LED和蜂鸣器,想尽办法也将速度提高到100kHz左右 而已,这是十分慢的,过程也十分艰难。</section>
</blockquote>
<section>至于器件方面,大神均是从网上购得,然后再将它们一点一点地焊接成为模块。</section>
<section>这个CPU大致耗费了<strong>1000</strong>多个三极管、<strong>2000</strong>多个二极管,电阻数量也达到了<strong>2000</strong>多,焊点近万。</section>
<section>目前的费用大概花了1000多元。</section>
<section>而网友在弹幕中调侃居多的,还有<strong>制程</strong>方面的问题。</section>
<section>据大神介绍:</section>
<blockquote>
<section>要是非得给它定个工艺制程,那就是<strong>2.54mm</strong>,比先进的3纳米大了将近1百万倍。</section>
</blockquote>
<section>最后,Up主还表示,将在接下来的工作中,持续完善CPU的功能,让它能够运行更加复杂的程序。</section>
<section>对此,你期待了吗?</section>
<section> </section>
<p>这需要多大耐心和兴趣动力啊 !</p>
<p>佩服</p>
<p>蓝色灯的图片以为做了一个霸王龙</p>
<p>这个牛了,光这个耐心就不得了</p>
<p>没必要手工焊接</p>
<p>可以打板贴片</p>
<p>然后发现花费这么多还不如买个简单的MCU</p>
<p>性能比手工的强,而且适用起来还方便</p>
<p>佩服!</p>
<p>我做过没有CPU的电子琴,用数字电路和模拟混合电路、分离元件搭的。</p>
<p>当时的音质和音效是市面上电子琴没有的,已经很霸了。当时中国还没有电子琴产品及芯片。</p>
<p>这个更霸气!</p>
<p>太有才了,能力不是一般的强,这是对技术的一份超级热爱,</p>
有实力,终于知道cpu是这样的,感谢感谢感谢 <p>做这个需要渊博的知识,强大的动手能力,最重要的,要有一颗持之以恒的心</p>
<p>要有极大的耐心!耐心!耐心!</p>
<p>过不了多久就会出现小作坊生产的cpu了,cpu价格有望大幅度下降。</p>
页:
[1]