航砖祭祖后日谈
本文将对BUAA_CO_2024进行简要回顾,并给出自己的一些主观建议,仅供参考。
预习建议
主要针对实验部分进行预习。理论部分听课/考前看408资料即可。有简单/复杂两个预习方法。
简单玩法,我推荐游玩图灵完备(Turing Complete)。玩到汇编之前基本就差不多了,当然能打完是最好,2333
复杂玩法(地狱难度!!),我力推“一生一芯”项目。做到B阶段,在体系结构方面的理解就足够薄纱课程组给的实验方案了;课上测试另说(笑)
要完成“一生一芯”,请预留至少两个月时间。难度真的很高,做之前做好思想觉悟!!
只不过,一生一芯用的指令集是RISC-V,跟课程组选用的MIPS有所不同。二者都属于RISC,不过有一些实现细节的不同,我认为影响不大。
哪怕你在大二上上完了计组,如果你对体系结构感兴趣,我还是推荐你抽时间做一做一生一芯这个项目。因为在你上完后(至少我上完后),你会发现,本校的计组在硬件实现方面的知识实在欠缺,想不到吧?
课程概况
最终目标:要求实现支持数条MIPS指令,以及异常、中断的五级流水线处理器。
要求实现的指令集十分精简,具体可看本人P7的设计文档。
课程分为理论课与实验课两部分。理论课讲述的是正常的计组课程内容。理论课部分的资料,出于课件版权问题,不在此放出。在课程正式开始时,建议咨询各路学长/学姐获取资料。
实验课即是各个Project。
- P0~P1:利用Logisim构建一些简单电路
- P2:利用MARS编写MIPS汇编程序
- P3:使用Logisim搭建单周期MIPS处理器
- P4:使用Verilog实现单周期MIPS处理器
- P5:实现五级流水线,处理各类冒险(数据冒险等)
- P6:进一步完善P5的设计,主要是添加MDU与新指令
- P7:支持异常与中断
实验部分,在线上测试平台(cscore.buaa.edu.cn),对各位的设计进行测试。
细说实验部分
包含机房上机、课下作业两环节。
对每一Project,需完成课下提交,方有上机测试资格;在完成上机测试之后,该Project才视为通过。各Project实行闯关制,唯有前一Project通过才可进行下一Project。
在本届中,闯关制在P3才正式启动;也就是说,P0-P2课下/课上未通过,也不会影响后续进度,到P3开始才影响。但考虑到实验部分成绩会算入最终成绩,我仍然建议尽力而为。
在学期的第1-3周为Pre阶段;同学在此期间在课程网站的教程部分,学习后续要用到的知识。其中有一些习题,由于判分标准始终不明,我还是建议尽力而为。
4-15周则是实验正式开始阶段。期间,你需要完成“一周一P,打下计组Project那些事”(P7例外,给了两周)。12周对8个Project(0-7),还包括P0-P2的保送,容错其实还行。
课下测试是弱测,仅对你的实现是否基本正确进行测试,在边界条件下的正确性可能不会测试。在线上测试时,除对你的新加指令进行测试外,还会对你的课下提交进行强测,覆盖更多的边界条件。
若你课下没考虑周全,看到课下提交通过就认为完事的话,那你很有可能会在课上满脸痛苦的找bug,还找不出,最后喜提再来一次…
这也是为什么,我们需要在课下造评测机,数据生成器等等,自行尽可能全面测试。
机房上机类似于考试,在本届设在每周一晚7点开始,共持续2小时,闭卷。
每次上机考三个题,三个过两个记为通过,全过记为优秀。过两题和过三题的给分区别至今无人明确,我继续建议尽力而为。同时,在时间不够的时候,切勿盲目追求三题全过。
P0-P2就是做一下Pre练习类似的题目,有一定难度;
P3-P6是三个加指令题。这部分就有意思了,这里加的不是MIPS指令集中的指令,而是课程组自行编写的新指令。具体题型建议参考往届学长/学姐博客。
P7则是对课下提交进行强测,并附带一个异常有关的加指令题。只要课下写得好,P7其实更简单。
在每次上机完成后,还要简要回答一些问题。这部分就是助教挑几个问题问,大家基本都能答上,不用担心。
讨论区
课程平台设有讨论区。在此鼓励各位积极水帖,积极分享交流经验。
你可以分享:
- 解题思路
- 架构搭建经验
- 数据生成思路/实现
- 评测机搭建思路/实现
- 其它可以提高效率的窍门:比如我自己就找到了命令行调用ISE的办法,直接抛弃臃肿的GUI🤤
杂项
有关硬件实现
前面有稍微提到,本课程设计在硬件实现方面有所欠缺。何出此言?
在P6时,我们要求加入MDU,以支持乘除操作。但是,课程组给出的要求是用*
、/
、%
行为级描述乘、除、取余操作,其硬件实现在实验教材中并未提及(在我这一届)。在理论课那边呢?这要看老师,有些老师可能会提,也有不提的,这是一点。
第二点,自2023年(我的上一届),课程设计去掉了P8 - FPGA实验。自此,实验设计中唯一跟硬件沾边的部分被砍没了。
因此,只看实验教程,你不会知道:
- 怎么把自己的设计搬上FPGA
- 时序约束文件怎么写
- FPGA上怎么调用IP核,用上板载DRAM/SRAM
- 自己设计的时序情况如何,怎么进行时序优化
第三点,课上测试。有一些指令逻辑对应的电路设计很难实现,且需要搭建专门模块,在我看来不大符合“通用处理器”的设计初衷。有些题目,在我看来,考察的其实是面向过程编程能力和读题能力,跟体系结构没什么关系。但从考察对自己架构的熟悉程度而言,这种设计也合理。
因此,如果你实在对体系结构感兴趣,我推荐你课下自己多花时间了解,不要窘于课程设计。当然,如果你对体系结构不感兴趣,这种课程设计也确实足够了。
和理论课的脱节
这个情况主要对2306。对于高工的同学(2318)是另外一个故事,我看他们的实验性实验设计挺不错的。
主要是,理论课讲了Cache,实验课没有考察实现。这个问题在高工部分的新版实验解决了,那个实验有考察Cache部分的内容,不知道这个实验2406会不会采用。
还有就是,理论课进度取决于老师。比如,P5实验开始,有的老师可能已经讲完了流水线和冒险有关知识,而有的老师还没开始,这就会导致实验进度与理论课进度的脱节。这问题没啥好解法,自己看往年课件吧。
在这两点以外,其实就没什么好吐槽的了,挺好的。