我正在尝试为单周期MIPS处理器实现jr(跳转寄存器)指令支持。在下面的图片中,我画了一个简单的多路选择器,允许选择正常链PC或指令(jr)地址。
如何知道指令是否为JR以将多路选择器选择设置为“1”? 我已经完成了跳转和跳转链接(虽然图像没有显示,因为我现在没有我的项目),为了控制它们,我只是检查主控件中的OP代码是否为10(跳转)或11(jal),然后将多路选择器sel设置为'1'。 但是我认为我不能用相同的方法来控制jr,因为指令布局是不同的。
我正在尝试为单周期MIPS处理器实现jr(跳转寄存器)指令支持。在下面的图片中,我画了一个简单的多路选择器,允许选择正常链PC或指令(jr)地址。
如何知道指令是否为JR以将多路选择器选择设置为“1”? 我已经完成了跳转和跳转链接(虽然图像没有显示,因为我现在没有我的项目),为了控制它们,我只是检查主控件中的OP代码是否为10(跳转)或11(jal),然后将多路选择器sel设置为'1'。 但是我认为我不能用相同的方法来控制jr,因为指令布局是不同的。
JR
指令的操作码具有 Instruction[31:26] == 0
(特殊指令)和 Instruction[5:0] == 0x08 (JR)
。您需要查看这两个位位置才能确定这是一个 JR
指令。您的图表上的 Control
块需要有一个额外的输入: Instruction[5:0]
。 Instruction[25:21]
中的 rs
字段选择此指令的源寄存器。执行 JR
指令时,需要将 PC 分配给 rs
。!Inst[5] & !Inst[4] & Inst[3] & !Inst[2] & !Inst[1] & !Inst[0]
。您必须检查 Instruction[5:0]
的所有位。 - markgz我认为您可以通过在跳转选择器之前实现JR多路复用器来提高硬件性能,因为JR多路复用器不依赖于跳转选择器的pcnext输出。
jr $ra
跳转到上次保存在返回地址寄存器中的位置。 - wazy