我曾经在知乎上看到一个提问,询问关于大学生完成CPU的可能性,有一个人的回答让我印象深刻。
大致意思是作为一个正常的计算机科学专业的大四学生,一定是学过计算机组成原理,汇编语言,编译原理,操作系统这些课程的,那么理论而言,这个大学生已经学过了完成CPU乃至上层的所有知识。因此,一个合格的计算机科学专业的学生,是具备制作CPU的能力的。
种子发芽
这个回答在我心里埋下了颗种子,我一直把这个合格标准记在心中,不断积累各方各面的知识。最终,有两件事的发生让我觉得,是时候了。
第一件事是在操作系统的课程结束后,我成功用一星期的时间完成了《30天自制操作系统》的课程设计,虽然理解的不算很深入,但也学到了不少东西,算是我在大学诸多玩具课设中最复杂,难度最大的玩具课设了。这件事让我对自己的实际动手能力有了极大的自信,相信自己有能力挑战更难的事情。
第二件事则发生在备考过程中,我复习的专业课是408。在某一天时我突然发现,自己对计算机从底层向高层的一整套工作原理有了成体系的理解,这种理解不只是能做对题目,而是能站在一个全局的角度,对整体的工作过程做出阐释。就有一种醍醐灌顶的感觉。
这两件事发生后,我开始认真考虑制作CPU这件事,并回顾起自己所学。电路基础,数字电路,电路设计,电路仿真,绘制PCB,烧焊元件,计算机体系结构,计算机组成原理,微机原理,汇编程序设计,计算机操作系统,编译原理,C语言程序设计,数据结构。这次的回顾,让我惊奇的发现自己所接触过的知识已经构成了自下而上的体系,而在这套体系中,完成一个CPU的设计并在之上进行进一步的开发,似乎并不是不可能。
准备与计划
前面说的很好听,自下而上的一系列课程都学习过,但实际上有一部分的课程是足以应付期末考试的学习,也有一部分是深入学习过的,学习的深度各不相同,所以实际实现起来绝对不会是水到渠成,颇有一番虎山行的味道。
首先是电路的设计与烧焊,我实际掌握的能力就只有实验课上按老师的电路图按图索骥,然后在另一个实验课上根据老师给出的步骤摸摸焊笔,调调电路表。但所幸它们都给我打开了一扇大门,知道想要深入的话应该寻找什么。
我曾在大二后的暑假学了学中国大学慕课网中谭志虎老师的硬件设计课程,当时只完成了第一部分的任务,对硬件设计步骤有了一定的了解,就打算先按照它的课程走,完成课程要求的基于MIPS指令的五段流水。
之后给他改成基于RISCV的(逃
但是这个CPU只是在logisim平台上运行的,条件十分的理想。于是接着我会去B站学习Altium Designer,曾经我在实验课上短暂的用过一段时间,至少知道它是能从原理图设计到PCB设计的工具,从理论上的软件到实际上的硬件。
那么我要开始模电焊了吗?也不是,找个能借我焊笔的实验室本身就会麻烦点,还要一个个手工焊元件,我估计会疯。这一部分的工作就交给嘉立创解决,专业人做专业事。实际上这是我估计成本最高的部分了,我的钱哪里来呢?
资金问题其实早在准备了,最开始两套方案,奖学金或者接单攒钱,然后申请到了励志奖学金,这个奖学金其实还有蛮多故事的,总之在这个节点申请到从各方面来讲都是挺好的。奖学金发下来后一直没有动,也不知道重复不断的下单打板到最后,我还会剩多少钱。
假如一切顺利的话,那我可以开始考虑操作系统了。这方面我听说清华大学的ucore课程很不错,我大概率会跟着走一遭,一路上慢慢写出自己的操作系统(也有可能直接拿来用)。操作系统这个部分涉及到不少有趣的问题解决思路,我还蛮期待动手实现一下。
接着就是实现个编译器,在系统上进行开发。实际上我听说过riscv-gcc这个项目,虽然我自认为给出时间我最终还是能写出编译器的,但是如果始终不行的话,也不是不能考虑使用前人的成果。
到这里已经是做梦都能笑醒的地方了,要是真能推到这一步,我打算实现网络连接,绘制一个显示状态的仪表盘,在毕设现场连接展示,就会很帅233。
动手
就像我上边说的,这个作品在我的计划中,应该是作为毕业设计展示四年所学。所以在考研结束开始毕设进程时,我终于开始实际动手了。
因为之前各种各样的事情,有关系比较好的老师为我推荐了很好的老师,没有刻意刁难,任我发挥。老师在得知我的想法后也是给了鼓励,如果遇到什么问题和我一起解决。
我最初的题目是Re:从0开始的计算机科学,这是显然借鉴了Re:从零开始的异世界生活,我觉得我在毕设期间反复调试,吸取经验再前进就和Re0这部番剧有异曲同工的相似。接着,这里面用了0而不是零其实是玩了一个文字游戏,并不是指一无所有的零,而是逻辑代数中的逻辑假0,也正是我的起点。然后理所当然的被老师认为不可行233。
其实考研结束也有半个月了,我玩也该玩的差不多了,也是时候开始动手。我打算每周周末的时候记录以下这周所学以及毕设进度,以后用来展示会比较方便些。
加油!