一个人,到底能肝到什么程度/p>
最近B站上大火的一个视频,或许给了这个问题一个完美诠释:
纯!手!工!自制CPU!
纯手工“肝”出一个CPU,还成功运行了流水灯效果,直接引发了一大波 友们的惊呼:
肝帝!焊武帝!
人长在肝上了!
(感受下这满屏的Respect)
万万没想到,真的是说干就干。
据这位Up主介绍,他主要采用了3个原材料:
二极管、三极管和电阻。
通常来讲,CPU的结构可以大致分为运算逻辑部件、寄存器部件和控制部件等。
而他最先“下手”的,就是CPU的寄存器部分。
Up主设计了一个6位的移位寄存器:
程序计数器涉及的功能那可就多了。
像最基本的就是挨个字节读完指令后,计数要自动+1;而CPU重启之后,计数便会清零。
而且在不同的条件之下,还要能实现直接跳转、调用函数、函数返回等功能。
听着就有够复杂的了。
奈何,除此之外,还时常伴随着各种各样的“玄学问题”。
Up主就举了个例子:
花了一个多星期才在最深处找到一只焊反的二极管……
但功夫不负有心人,在经历3个月令人头秃的时光之后,最复杂的模块还是被他搞定了。
上电测试也没有问题:
△左:RAM和指针 右:ROM
再将ROM和RAM组装上去,现在CPU的基础模块已经基本完成了。
接下来就是打造指令译码器。
它主要是用于把传到这里的CPU指令,进行解析运行:
最后还得再焊一个通用缓存上去:
噫吁嚱!噫吁嚱!
这一手露的,直接引发了 友们的第二波高潮:
手写指令集,牛皮!这才是真·写代码!
直接上机械码,太狠了吧!
然后……然后……
Up主竟然就开启了上古编程模式——“扣”程序!
但bug很快被找到了:
有个地方断开了。
与此同时,因为还没有I/O接口,所以测试使用的灯是临时寄存器的灯。
而且左移指令和跳转指令都使用了同一组灯。
因此,流水灯的效果就不是非常明显。
于是,大神重新编程,使CPU跳转到0X0F处运行。
如此一来,在跳转时灯就是灭的,给左移指令让出了一条路。
走进“肝帝”大神
在看完这波“神级”操作之后,想必大家都想了解这位大神。
量子位帮你实现这个梦想。
大神原名林乃卫,广西北海人。
那时候大神便萌生出了一想法:
CPU是怎么执行这一串0101的/p>
在结合数电课程的知识之后,大神猜测到了大致的原理,于是就想试一试。
最初他想用门级电路来做的,但是感觉难度不是很高,又想把整个过程从零开始理解透。
于是,便决定从最基础的模拟电路开始。
而整个过程最难的部分,便是“器件每一级的连接”和“CPU的运行速度”:
在此之前没有看过关于CPU原理方面的书籍,是靠自己对门电路的理解而设计的一套电路 ,想设计一套属于自己的架构。
从最基础的三极管开关到门级电路, 上找的电路图根本没法用,需要自己设计。虽然设计好后理论通过了,但是门级之间组合成功能级器件就有新的问题,功能级的电路再多个 组合起来成为功能模块又会产生新的问题,模块与模块之间连接更会产生新的问题.
这每一级的问题都很有可能要修改基础电路,然后又会从头开始产生新的问题。
因为没有专业的设备去调试,我用的是一盏LED和蜂鸣器,想尽办法也将速度提高到100kHz左右 而已,这是十分慢的,过程也十分艰难。
至于器件方面,大神均是从 上购得,然后再将它们一点一点地焊接成为模块。
这个CPU大致耗费了1000多个三极管、2000多个二极管,电阻数量也达到了2000多,焊点近万。
目前的费用大概花了1000多元。
而 友在弹幕中调侃居多的,还有制程方面的问题。
据大神介绍:
要是非得给它定个工艺制程,那就是2.54mm,比先进的3纳米大了将近1百万倍。
最后,Up主还表示,将在接下来的工作中,持续完善CPU的功能,让它能够运行更加复杂的程序。
对此,你期待了吗/p>
参考链接:
[1]https://www.bilibili.com/video/BV1sy4y1j7Ue
[2]https://tieba.baidu.com/p/7432882849ee_lz=1
—— The End ——
推荐好文 点击蓝色字体即可跳转
? 一个超级好用的插件—EIDE,在VSCODE下快速创建ARM工程
? 如何在GitHub上白嫖代码学会Git吧
长按识别二维码关注我
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!