下面是数据路径:

所以这似乎是一个很常见的问题,但我似乎找不到任何关于如何扩展数据路径来实现SLL和SRL的答案。
这是我想要做的,但我不完全确定:
它将需要另一个多路复用器来读取寄存器堆旁边的数据1。该多路复用器将读取数据1 (rs)和读取数据2 (rt)作为输入。如果我们不进行移位操作,它将选择Read data 1,如果我们正在进行移位操作,它将选择rt (因为sl1和sr1使用rt,而不是rs)。然后这将被馈送到ALU。
接下来,我们需要将指令10:6从指令15:0分支出来,然后将指令10:6馈送到算术逻辑单元的另一个端口。这是正确的想法吗?
发布于 2017-02-24 03:05:13
这是单周期数据路径上的sll,但我不确定ALU现在是否获得5位而不是4位控制输入。如果你做了sll,那么第一个ALU输入将是shamt,第二个是要移位的寄存器,ALU知道它是否因为指令字段而必须移位,因为它是一条R型指令。然后将移位后的数据保存在rd寄存器中。SLL SC datapath
发布于 2015-12-05 09:03:50
您需要修改SLL指令的数据路径,向带有"shamt“字段的ALU添加一条输入行,以确定去移位量。算术逻辑单元将通过ALUop字段来识别SLL操作。Modiffied datapath
发布于 2019-03-27 11:21:33
你的方向是正确的。如其中一个答案所述,可以向ALU添加一个额外的端口,该端口将考虑shamt量(位10:6)。可以有一些内部硬件,例如ALU中的MUX,其负责从寄存器文件的输出选择shamt字段或读取数据2。
https://stackoverflow.com/questions/33334521
复制相似问题