- 本项目仅供学习参考使用,禁止直接使用源码于各类比赛,后果自负。
- 实现了MIPS I指令集中的52条指令,并未实现中断异常。其包括 14 条算术运算指令、8 条逻辑运算指令、6 条移位指令、8 条分支跳转指令、4 条数据移动指令、12 条访存指令。
- 代码编码为utf-8,使用vscode编辑。vivado版本为2019.2。测试环境为龙芯杯的trace测试平台。
- 旁路实现方法为自EX、MEM、WB流水级的尾部到达ID段的头部。具体实现可参考《自己动手写CPU》(雷思磊著)中的实现方法。
- 当前关键路径为 ex运算 -> 分支判断 -> 取指。
- 关键路径的优化提供一下几种参考方案:
- 当检测到ID段需要跳转,且EX段中有分支跳转指令需要的源操作数时,阻塞ID段,从而断开了 EX运算 -> 分支判断 这个关键路径。实现时需要注意,是通过整体设计让这种情况不会再出现,而不是通过检测组织这种情况的执行。前者避免了关键路径的出现,后者则会因为检测电路,重新连接起关键路径。
- 把分支跳转移到EX段执行,使用这种方法,则在没有分支预测器的情况下,每跳转一次,则必然会有一拍的气泡产生,执行效果相对于 方案1 效果略差,但更规整。
- 乘法器使用了单周期的booth-wallace乘法。
- 除法器使用了32周期的试商法。
欢迎参加龙芯杯,群号:583344130