来源 | 书圈
作者 | 蒋宝尚
编辑丨陈彩娴
本科大三,正在学习计算机组成原理,能做个什么项目?
清华大学贵系说:造台计算机吧!
清华有门本科三年级必修课,名为《计算机组成原理》,据说要想顺利结课,拿到合格的成绩,必须在期末造一台“计算机”。
这门课包括理论课和实验课。理论课主要讲解计算机各组件的基本工作原理和其协同运行关系,以及程序是如何在计算机硬件上运行的。 而在实验方面,则需要完成5次小实验,以及最终的大作业——“奋战三星期 做台计算机”!
对于此项作业的难度,授课老师轻描淡写地说道:“我一直认为这门实验课是我们系比较容易的课程之一。”
清华大学的这门《计算机组成原理》,具体情况如何,网上能找出的资料极其少。直到今日,其神秘的面纱才在近日清华大学官博的一个视频中揭开。
视频中介绍,课程中提到的计算机并不是“我们以为”的计算机。在清华贵系研究者的眼中,计算机并不是只等于台式机或者笔记本电脑,准确的计算机概念:只是一个能执行程序的装置。
图片来自清华大学:清华眼中的计算机
而课程的具体要求是:在三周时间内写出一个功能完整的CPU,并将其“烧写”进老师提供的实验板中,从而能够执行一套程序。据介绍,在如今的在线云实验条件下,同学们只要点击“上传”按钮就能实现自动“烧写”。
换句话说,有了CPU的写入,一块实验板就变成了一台真正的计算机。据课程实验课老师李山山介绍,“我们的基本要求是同学们做出的CPU能运行一套监控程序,它是用来协助运行程序的程序,导入实验板内存后,可以通过运行测试程序检测同学们做出的CPU运行是否正确。同学们造出的CPU需要通过性能测试、额外指令测试等各类测试才算成功。”
难度:目前正在学C++的11岁姑娘可以试试?
但是,正如清华贵系老师所言那样,作业三周就能做出来,并且一点都不难么?在清华大学官方微信下有网友留言问:
我想让我11岁的闺女试试这个项目,她目前在学C++,给她一年时间够不够,当然需要她的老师来指导她。我是计算机小白,但是为什么我看着不怎么难,能跟我打个比方形容难度吗?要是很难我就给她三年的时间试试。
有网友回应:
做这个实验的前期必修课程包括(但不限于)离散数学,信号处理原理,数据结构,程序设计,操作系统,数字电路…
还有网友在自己任教的大学做了一次实验:
当年我们年级选了八组同学做新的FPGA机器THU Union+,要自己找合适的指令集,自己写监控,真·小白鼠啊,印象特别深刻:
1. 新机器还不老么稳定,跑个跑马灯也会死,找老师老师查了一圈说:嗯,这边有个拉杆电阻阻值不对……
2. 自己找指令集,我综合当时的硬件配置选了MIPS16e,据说后来成为了造机主流指令集,直到配置提高之后逐渐被MIPS32和RISC-V代替;
3. 印象最深的一次调bug:简单程序都OK,汉诺塔会跑飞,单步调试了一整晚发现是内存高地址有段区域有问题,读出来的内容跟写进去的不一样,而我们刚好选了那块地方做堆栈……
也有网友表示,这门课程对以后工作有着非凡的意义:
非计算机专业毕业,现在工作会遇到文中提到的各种cpu、fpga、flash、烧写软件等问题,由于对原理和整体系统不了解,感觉所有认知和经验都浮于表面,所以在考虑要不要自己也来造一台?就当学习了。
不过,得益于清华大学的强大的课程教师团队以及清华学子的天赋与努力。都交出了满意的答卷。
例如,有的学习小组实现了视频输出:把许多图片写到flash里,每隔一段时间播放一张,放快一些就变成了视频。
再例如,有的学习小组视线里康威生命游戏:每一个时刻细胞都会根据当前周围八个格子内有无细胞,按照某一规则确认下一个时刻这个细胞是否存活。
还有Windows操作系统的logo,据悉完成这个项目的同学来自数学系,他的另外两个队友分别来自土木系、航院。造机所需要的编译原理、硬件描述语言、数字逻辑电路等基本知识都是现学的。
整个过程并没有像老师说的那样:“不难”。据参与的刘同学介绍:“和之前学习的软件相比,硬件调试真的很痛苦。”所需的工作量是:他们3人一组做出CPU一般需要200-300小时,一共写了3560行代码。
在知乎上,也有网友从另一个方面指出了困难之处:硬件的设计思想跟软件还是有点差别,特别是调试起来,非常蛋疼。再加之贵系大三课业繁重,三周的时间便成为了很多人熬夜最为频繁的日子,甚至留下“出校开房调板子”的佳话。
图注:计算机系计网联合小班同学和助教
据介绍,2020年秋季学期一共有242位同学选修了“计算机组成原理”,课程安排了计算机系刘卫东教授、陈康副研究员、陆游游副教授三位理论课老师,实验课老师李山山,以及六位助教。也就是说,为了让242位同学顺利拿到成绩,清华配备了强大的教师天团。
另外,在实验课上,每位同学都会介绍自己对计算机的构思,老师们、助教们以及上一届的热心同学都会在课上及课后和同学们一起讨论其构思的可行性。
为了同学们操作方便,课程教师“天团”还开发了“虚拟实验板”,上面的按钮都可以用鼠标点击控制,可以通过在线平台把写好的代码‘烧写’到其中某一块实验板上。
实验器材是老师们为这门课专门开发的。据李山山介绍:“从早期的小规模芯片连线,到后来的可编程器件FPGA,再到现在的在线云实验。这项大作业的实验模式和内容都在持续更新。”
最后,完成《计算机组成原理》课程的所有同学,都会得到一份纪念物:
图片来自清华大学
END