实现跳转寄存器控制到单周期MIPS

10

我正在尝试为单周期MIPS处理器实现jr(跳转寄存器)指令支持。在下面的图片中,我画了一个简单的多路选择器,允许选择正常链PC或指令(jr)地址。

MUX

如何知道指令是否为JR以将多路选择器选择设置为“1”? 我已经完成了跳转和跳转链接(虽然图像没有显示,因为我现在没有我的项目),为了控制它们,我只是检查主控件中的OP代码是否为10(跳转)或11(jal),然后将多路选择器sel设置为'1'。 但是我认为我不能用相同的方法来控制jr,因为指令布局是不同的。


1
不知道这会对你有多大帮助,但是:jr $ra 跳转到上次保存在返回地址寄存器中的位置。 - wazy
2
是的,我正在从指令寄存器中获取“保存的位置”。但问题在于如何控制何时将PC设置为此最后位置或默认pc + 4。 - user2509740
2个回答

6
JR 指令的操作码具有 Instruction[31:26] == 0(特殊指令)和 Instruction[5:0] == 0x08 (JR)。您需要查看这两个位位置才能确定这是一个 JR 指令。您的图表上的 Control 块需要有一个额外的输入: Instruction[5:0]Instruction[25:21] 中的 rs 字段选择此指令的源寄存器。执行 JR 指令时,需要将 PC 分配给 rs

1
谢谢@markgz,这正是我在寻找的。但是我该如何检查指令[5:0]是否为0x08? - user2509740
类似这样的:(Inst[3] AND !Inst[2] AND !Inst[1] AND !Inst[0])? - user2509740
尝试使用 !Inst[5] & !Inst[4] & Inst[3] & !Inst[2] & !Inst[1] & !Inst[0]。您必须检查 Instruction[5:0] 的所有位。 - markgz

0

我认为您可以通过在跳转选择器之前实现JR多路复用器来提高硬件性能,因为JR多路复用器不依赖于跳转选择器的pcnext输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接