如何在 MIPS 单周期数据路径中实现指令 jrlti(如果小于立即数则跳转寄存器)?
How can I implement the instruction jrlti (jump-register if less than immediate) in the MIPS one cycle datapath?
我在执行指令 jrlti 时遇到了问题。我无权修改ALU,所以它必须保持原样。
指令的定义如下:
[rs] < SignImm ? PC = [rt] : PC = PC + 4
在 mips 单周期数据路径中处理的比较 [rs] < SignImm 在哪里?我是否使用 ALU 来处理它,如果是的话如何处理?我要补充的部分是什么。
我怎样才能做到 PC = [rt] 而不是 PC = PC + 4 请纠正我在尝试执行指令时可能做出的任何错误假设。
很明显,如果你用ALU来做比较,你就不能用它做任何事情,因为你在单周期架构上,你必须另辟蹊径。
在 SrcA (RD1) 和 Imm16 之间进行了比较。所以为了跳转而写入PC的寄存器在RD2中。
目前在 RD2 和 PC 之间没有路径。 RD2 的唯一路径通向存储器或 ALU 的输入。所以你必须在RD2和PC之间添加一条路径。
有几种方法可以做到这一点,但更简单的是在 PCBranch 之后添加一个多路复用器,它将驱动到 PC 为分支计算的地址或该新指令的寄存器 RD2。在这两种情况下,使用相同的信号(ALU 比较的输出)来控制将哪个值写入 PC。
还必须对控制单元进行修改,使用附加信号来控制此多路复用器。
我在执行指令 jrlti 时遇到了问题。我无权修改ALU,所以它必须保持原样。
指令的定义如下:
[rs] < SignImm ? PC = [rt] : PC = PC + 4
在 mips 单周期数据路径中处理的比较 [rs] < SignImm 在哪里?我是否使用 ALU 来处理它,如果是的话如何处理?我要补充的部分是什么。
我怎样才能做到 PC = [rt] 而不是 PC = PC + 4 请纠正我在尝试执行指令时可能做出的任何错误假设。
很明显,如果你用ALU来做比较,你就不能用它做任何事情,因为你在单周期架构上,你必须另辟蹊径。
在 SrcA (RD1) 和 Imm16 之间进行了比较。所以为了跳转而写入PC的寄存器在RD2中。
目前在 RD2 和 PC 之间没有路径。 RD2 的唯一路径通向存储器或 ALU 的输入。所以你必须在RD2和PC之间添加一条路径。
有几种方法可以做到这一点,但更简单的是在 PCBranch 之后添加一个多路复用器,它将驱动到 PC 为分支计算的地址或该新指令的寄存器 RD2。在这两种情况下,使用相同的信号(ALU 比较的输出)来控制将哪个值写入 PC。
还必须对控制单元进行修改,使用附加信号来控制此多路复用器。