扩展MIPS数据路径实现SLL和SRL

扩展MIPS数据路径实现SLL和SRL,mips,sll,srl,Mips,Sll,Srl,以下是数据路径: 因此,这似乎是一个非常常见的问题,但我似乎找不到任何关于如何扩展数据路径以实现SLL和SRL的答案 这是我的想法,但我不完全确定: 它需要另一个mux来读取寄存器文件旁边的数据1。该多路复用器将读取数据1(rs)和读取数据2(rt)作为输入。如果我们不进行移位操作,它将选择读取数据1,如果我们进行移位操作,它将选择rt(因为sll和srl使用rt,而不是rs)。然后将其输入ALU 接下来,我们需要将指令[10:6](移位量)从指令[15:0]分支出来,然后将指令[10:6]送

以下是数据路径:

因此,这似乎是一个非常常见的问题,但我似乎找不到任何关于如何扩展数据路径以实现SLL和SRL的答案

这是我的想法,但我不完全确定:

它需要另一个mux来读取寄存器文件旁边的数据1。该多路复用器将读取数据1(rs)和读取数据2(rt)作为输入。如果我们不进行移位操作,它将选择读取数据1,如果我们进行移位操作,它将选择rt(因为sll和srl使用rt,而不是rs)。然后将其输入ALU


接下来,我们需要将指令[10:6](移位量)从指令[15:0]分支出来,然后将指令[10:6]送入ALU的另一个端口。这种想法正确吗?

您需要修改SLL指令的数据路径,在ALU中添加一个带有“SHMT”字段的输入行,以确定移位量。ALU将通过ALUop字段识别SLL操作。

这是单周期数据路径上的sll,但我不确定ALU现在是否获得5位而不是4位控制输入。 如果你做sll,那么第一个ALU输入将是SHMT,第二个是要移位的寄存器,ALU知道它是否因为指令字段而必须移位,因为它是R型指令。然后,移位后的数据将保存在rd寄存器中。
你正朝着正确的方向前进。正如在一个答案中所陈述的,在ALU中有一个附加端口,它将考虑SAMT量(比特[10:6])。ALU中可能有一些内部硬件,如MUX,负责选择SHMT字段或从寄存器文件输出读取数据2。

如果这样做,那么ALU的第二个输入会发生什么情况?mux之后的那个。我想这是一条路。如果您需要5位ALU控制,这取决于您已经支持多少ALU操作。我还将直接向ALU提供“shamt”,因为值0也是vald。ALU可以根据操作决定是否使用它。