计组全踩坑记录

那些踩过的坑:

  • 暑假时除了把几个软件下载,几乎没看预习部分,想着开学再看也来得及。于是 pre 喜提做出来0道题,p0前两天速通Logisim

  • P3 尝试自己从零开始搭,不看往届博客,和 Gemini 共同创作。最终导致 P3 上机截止前还没做完,喜提 P3 就 gap 一周

  • 面对课下推荐题不屑一顾,除了提交代码文件没做任何准备,妄求凭借自己的智慧在上机时直接做出课上题并通过。于是 P4 就这样卡了两周,终于在第三次 P4 前狠狠拟合了课下推荐题,得以一个小时速通掉。

点击直接看总结:总结

结算

感受与吐槽

初见

说实话,这门课,计算机组成,我在开始学习之前对它几乎没有什么概念,暑假的预习部分也是让我一头雾水。看着这13年就停止维护的软件,这如此古老的页面,和如此难用的编程工具,我对未来的学习产生了深深的绝望和怀疑:真的要用这些东西学习吗?这些东西真的还有人在使用吗?
我想这也是我暑假没怎么进行学习的原因。

直到真正学期开始,开始上机,我知道我不得不学了。
很多人吐槽理论课没用,但我要承认lxd老师的计组课还是对我很有帮助的。还能记得刚开始时,我对有限状态机、门电路、信号之类的几乎一无所知。而他在课上的讲解,对我来说是如此的清晰易懂,让我有恍然大悟之感,也对这门课程初步建立了一些认知。(但是感觉到后面的缓存与存储之类的内容,就有些听不进去了…)

中途

在 P3 与它之前的阶段,我几乎都是(好吧没用几乎,就是全部时候)一个人看教程 + 问 AI 的学习方式,因为我认为这样更高效,也因为其实找不到人讨论。在 AI 解决不了的时候,我就开始翻找往届的资料。当时我还是选择自己看教程 + 尝试创造,尽管略微困难,但和ai合作起来也不是做不到。可是我发现这样的模式有个巨大的问题,那就是太耗费时间了,为了完成它,每周要牺牲掉本该属于其他项目的时间,甚至无法在周日的 ddl 前完成(P3 就是这样 gap 掉的),直到 P4 也还在坚持手搓。
直到 P5 … 我发现了 一本书教你通关计组实验 !

于是就开始爽抄那么到这里学习的路线就是 看课内指导书 + 把指导书和教程都同步发给Gemini + 看博客教程 + 自己拼拼凑凑写文档和 CPU 。

关于”创作”

“这样真的学到东西了吗?”
学是可能学到了,但是我想指出的是,我在这里的学习,经历了从自己尝试创作,到阅读参考答案并复刻的转变。虽然结果都是完成了CPU的搭建任务,但方式显然不同,显然前者难度更大,而后者除了学会知识,没怎么获得思维上的提升,所做的,只是理解别人的思想,然后copy罢了。

一方面,我对自己说:“未来除了考试,我应该用不到这门知识了。”所以就这么水过去也无可厚非。
另一方面,我还是在惋惜,想问问设计这门课程的人如何看待这样的现象。也许现在的结果是我们的平均线达到了一个看起来很好的水平,但是从个人的角度来看,结果是灾难性的:

  • 不想学的同学,迫于考试压力,对着往届博客半抄半凑的提交了作业,你真的认为这除了浪费他们一点时间以外对他们还有什么别的帮助吗
  • 想学的同学,他们的时间也是有限的,而一次一次的上机有是卡的那么紧,其他课程的压力也不小,想抽出时间去全身心投入其中,进行“原创”设计也是很难的。

这么看来,没有人在受益。

关于考试与协作

经过简单的推理就可以发现,合作的效率要远大于单打独斗。社会的进步基于分工。如果让远古时代的每个人都自己手搓石质工具、自己用自己的工具打猎、自己去采摘水果,那我相信每个人都会饿死。

而我们现在干的事就是自己磨石头,自己打猎自己吃。
我说的就是上机这个形式。机房里,不许相互交流,不许相互讨论,不许联网搜索。遇到问题了?遇到想不通的地方了?对不起,你要不自己想通,要不带着你的问题一起进入坟墓吧。

问题是得不到及时解决的(甚至有些上机遇到的问题最终就没有被解决),我们做出了一些题,也埋葬了另一些问题。

试想,假如上机是允许相互交流的,那么这个课程的学习会高效多少(这甚至会弥补之前所说原创导致的时间不足)。
“这个数据点为什么通不过啊?”
“检查一下你新增信号的命名,或者位宽什么的。”
于是,问题解决了。而不是瞪眼瞪一个小时,和编译器斗智斗勇,然后恍然惊觉。
这门课要学到的最关键的东西,是面对繁杂的代码仍能仔细 debug 的耐心,还是真正从零到一设计CPU的能力?我想这个问题的答案是显而易见的。

关于拟合

起初我期望着凭借课下的学习与搭建,上机的任务就是考验一个临场发挥。环抱着这个期望,P4 第一次上机做出1道题,第二次上机做出0道题。其实现在回想起来,应该就是某些信号名字什么的没连对,但是在机房时怎么也找不出问题,只能痛苦而终。

终于在连挂两次后发现了(之前看到了但根本没在意)往年题,可以提交与评测。于是我带着想弄清楚上机究竟为什么过不去的想法,去作那些题。第一道题不出意料,在我认为全部改完以后,仍然无法通过,于是在ai的帮助和我自己仔细的查看后,终于找到问题,改对了。这是从零到一的突破,于是直接把所有可以评测的题全找到,全部写了个遍。

其实发现题的套路就那几种,可能犯得错误也就哪几种。就这样,下次上机时一个小时就做完了三道题…
现在想来,拟合这个过程,其实就干了两件事,一个是了解大概会有哪些题型,一个就是把你能犯得错误划了个范围。第二点解决的就是,当初面对错误无从下手,而怀疑自己是思路有问题而不是哪个小代码拼写什么的错了。

后续使用这种方法,只能说很好用,并且通过P56(7能过,就懒得拟合了)。

关键工具:爬取 cscore 网站题目的脚本

总结

  1. 古老而难用的软件
  2. 单打独斗而不是合作的上机
  3. 时间不足,所做的只是阅读理解与迁移应用,而不是思考创作
  4. 拟合往年题的重要性

还是学到了一些

  • 第一次在课上了解和弄懂数据竞争,明白 D 锁存器、 D 触发器的感觉是十分良好的。在学习之前,很难想象出这样一个“记忆”装置是靠小小的上升沿时的延迟实现的,这是纯粹的硬件。从这个方面来想倒是十分有趣。
  • 在编写CPU和做题的时候,往往感受到一种环环相扣的感觉,这是纯粹的理性与逻辑。位宽写错了、逻辑写反了、条件写错了,你都得不到正确的结论(不过这也要归功于古老的ISE,毕竟,你使用一个没有声明的信号,一些不匹配的位宽,它都不给你报错。。。换一个现代的编译器都不会有这个苦恼)。
  • 还有吗?想不出来了。

结算:

alt text

  • 126.5 h,相当于每周 8 个小时
    alt text

  • P5 这个题过不去,求助助教终于解决
    alt text

  • 显然拖到周日,有ddl压力才开始学
    alt text

  • 几乎都在下午与晚上提交
    alt text