「BUAA CO」关于课下设计的说明

「BUAA CO」关于课下设计的说明

Squirrel7ang Lv2

关于课程

课下设计指北航2023-2024学年上学期的计算机组成课程的实验部分设计,包括Pre到P7的9次课下设计。22级计组取消P8,助教们辛苦了!

由于22级今年的计组没有P8,因此在文章的内容和质量上或许不尽人意。P8的缺失意味着在我的设计中没有过多考虑代码的可综合性,也可能没有做好Bridge的相关规范,更是和FPGA完全不沾边。

关于这个分类

本人只是一名计组小菜鸡,只是希望自己能够给后来者提供一些建议而已。因此只打算在这个系列里讲一下本人在计组课程中遇到的问题和解决方法。

关于本人设计的不足

设计文档和代码在这里 。需要着重说明的是,本人的设计有许多不妥善之处,仅供参考。如有未提及到的错误,欢迎指正!

下面是我觉得不妥的地方:

P1

  • P1-GRF的同步复位/异步复位有误,导致我在P3中debug了很久。P1的GRF测试并没有测出同步复位和异步复位的差异。

P5

从P5开始进行流水线CPU的迭代开发。因此P6和P7都继承了P5的问题。毕竟过了P7,因此在正确性上基本不会出现太离谱的问题。但是会存在非常多的效率问题。P5的问题大致有以下几点:

  1. D级叫Decode级不是没有原因的,不应该像我一样把控制器ctrl放在F级。这样会使得F级需要同时完成取值和译码操作,大大增加始终周期;同时D级由于不需要进行译码操作,读写几个寄存器不会花费太多时间。因此会降低CPU性能。好处就是F级也有控制信号啦(ˊᗜˋ*)。F级的控制信号使得我在P7中可以在F级完成对RI异常的判断并进行流水。
  2. 转发应当从流水寄存器转发,但是在本人的设计中是过了一到两个多路选择器,延长关键路径,降低CPU性能。设计初衷在于将所有值都流水下去,以应对变幻莫测的上机题。事实证明上机题虽然诡异,但基本不会对设计进行大改,因此在可扩展性方面只需要考虑一些正常的指令就行。课上的诡异指令如果直接阻塞住一般不会卡周期数。
  3. 没有使用内部转发,而是使用向D级转发进行了替代。起初是因为懒得实现内部转发,因此使用了一个等价的转发进行替代。事实证明正确性确实没问题,但是完全没必要。内部转发确实更好,封装起来真的是舒服多了。
  4. 转发模块没有进行$T_{Use}$和$T_{New}$的比较。只要后面的流水级对寄存器数值进行了更新就进行转发。$T_{Use}$和$T_{New}$只用于阻塞的判断。事实证明这也没有什么大问题。

P6

P6进行新增指令,并实现八条和乘除有关的指令。认真读题就几乎没难度。P6的设计问题主要在于增加了一个不必要的MDStall信号,属于是在开发过程中遗留下来的无伤大雅的问题,其效果和Stall信号完全一致。

P7

P7的问题可多了。

  1. 要对异常优先级进行判断。但是由于我F级有控制信号,当我没有进行异常优先级判断的时候也可以得到正确的异常。
  2. 分布式和集中式译码杂糅在一块了。主要是在M级进行了大量的分布式译码使得整体结构相当混乱,只能说正确性没问题。
  3. 进入核心态时除F级以外全部流水线PC置32'h0000_3000,使得宏观PC鬼畜。但是由于此时已经进入核心态,不会响应异常中断,因此可以保障正确性。

最后祝大家计组上机顺利!

  • 标题: 「BUAA CO」关于课下设计的说明
  • 作者: Squirrel7ang
  • 创建于 : 2023-12-30 21:32:31
  • 更新于 : 2024-01-06 18:25:27
  • 链接: https://redefine.ohevan.com/2023/12/30/CO/About/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
此页目录
「BUAA CO」关于课下设计的说明