航砖祭祖后日谈

本文将对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实验开始,有的老师可能已经讲完了流水线和冒险有关知识,而有的老师还没开始,这就会导致实验进度与理论课进度的脱节。这问题没啥好解法,自己看往年课件吧。

在这两点以外,其实就没什么好吐槽的了,挺好的。

作者

LajiPZ

发布于

2025-02-04

更新于

2025-02-04

许可协议

评论