- Link类跳转指令可以拆分为两个部分,一个是跳转,即下一个PC的生成,如果将分支条件的比较放到译码级来进行,则这部分只涉及取值级和译码级流水;另一个是Link操作,简单来说就是写寄存器,这部则主要涉及到执行级、访存级、写回级。
- 根据指令规范文档可知,JAL指令完成跳转目标地址的生成,并将PC+8写入到 31号 寄存器中。跳转这部分功能可以复用J指令的数据通路,而保存返回地址的操作在原有的基础上无法完成,需要增加新的数据通路。
-
写寄存器涉及到写端口的地址和写数据,所以对于写地址,需要调整通用寄存器堆写端口的地址输入waddr的生成逻辑,增加一个固定数值31作为新的输入;而对于写数据,需要得到PC+8,可以复用ALU的加法器,只不过第一个源操作数原来是仅来自寄存器堆的第一个输出端口,需要添加一个二选一部件,使其可以选择PC作为第一个源操作数,第二个需要将原有的二选一部件调整为三选一部件,8作为第三个输入。