指令集|贴吧大神是如何自制CPU的?( 二 )


比如在一次成功运行后,虽然肉眼之下一切正常,但是当naiweide用手机记录并慢放视频后,很快就发现程序计数器的执行速度忽快忽慢,而在正常情况下执行速度应该是恒定的,忽快忽慢就说明其中有一个硬件出现了问题。
在经过一个星期的debug后,终于在硬件深处找到了一个焊接反了的二极管,再加上处理其他各种问题的时间,程序计数器花了超过一个月的时间才终于制作成功,而这还只是第一步,在将其与寄存器组合在一起后,能否正常运行还是一个未知数。
为了更直观的给大家展示一下程序计数器的复杂程度,可以看一看naiweide拍摄的局部细节图。
指令集|贴吧大神是如何自制CPU的?
文章插图

指令集|贴吧大神是如何自制CPU的?
文章插图

指令集|贴吧大神是如何自制CPU的?
文章插图

指令集|贴吧大神是如何自制CPU的?
文章插图

而且,在打造程序计数器的过程中,naiweide还发现自己的原理图存在严重问题,无法正确控制和分析指令,最终只能够一边debug一边对电路图进行修改,功夫不负有心人,最终成功点亮所有指示灯,得到了正常运行的回馈。
在寄存器和程序计数器均完成后,接下来还要打造一个指令集,用于解析和执行输入的指令,也就是控制部件。某种程度上,指令集的先进程度会直接影响到CPU的性能,但是对于naiweide打造的这个古董级CPU来说,能够正常运行就是成功的。
指令集|贴吧大神是如何自制CPU的?
文章插图


相较于程序计数器,指令集部分的设计和制作并不算难,但是同样会遇到许多问题,因为到了这一步已经需要将三大部件组合在一起进行测试,只要其中一环出现冲突,那么就会反馈出错误的信息和结果。

指令集|贴吧大神是如何自制CPU的?
文章插图

指令集|贴吧大神是如何自制CPU的?
文章插图

在焊接上对应的硬件后,naiweide成功让这个古董级CPU成功运行了00H和01H两个指令,严格上来说,他已经成功打造了一颗真正的CPU,接下来的目标是使用这颗CPU实现流水灯效。
甚至在此之前,程序计数器部分又一次损坏,在经过详细检查后发现一颗二极管在运行过程中被电流击穿,完全损坏,在更换后才终于正常启动。
真·写代码流水灯效,简单来说就是灯光依次亮起熄灭,是我们日常生活中最常见的灯效之一,在一般情况下,只需要一个小指甲盖大小的芯片就可以实现包括流水灯效在内的多种灯效控制。
这么看来,似乎不难?毕竟只是灯光控制罢了,随便一个玩具都可能具备这个功能。但是,不要忘了这颗CPU是完全手工打造的,相当于完全自主研发的指令集和架构,所以没有办法从现有的资料中获得帮助,甚至连配套的编程语言都欠缺。
那么,naiweide是如何解决编程问题的?很简单,使用最原始的机械语言——二进制,也就是由0和1组成的一长串数字代码。对于一般人来说,也许光是看着那一大串代码就已经头晕,并且觉得人类真的可以理解吗?实际上想要对其进行编译也不是什么异想天开的事情,一些常用的代码还是可以比较轻松记忆下来的。
指令集|贴吧大神是如何自制CPU的?
文章插图

如果是利用现有的一些编程软件,其实也可以轻松的写下这段代码,不过naiweide还是使用了最原始的手写代码方式,来打造这颗CPU的第一个完整程序。至于输入程序的方式也是相当硬核,“扣”按键,在一块8位指令输入板上按照二进制代码的顺序依次扣动对应按键,输入完成后再进行第二条代码的输入。

推荐阅读