3

这是数据路径:

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

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

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

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

4

3 回答 3

3

这是单周期数据路径上的 sll,但我不确定 ALU 现在是否获得 5 位而不是 4 位控制输入。如果您进行 sll,那么第一个 ALU 输入将是假的,第二个是要移位的寄存器,ALU 知道是否由于指令字段而必须进行移位,因为它是 R-Type 指令。然后移位的数据将保存在 rd 寄存器中。 SLL SC 数据路径

于 2017-02-23T19:05:13.150 回答
2

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

于 2015-12-05T01:03:49.830 回答
0

你正朝着正确的方向前进。如答案之一所述,可以向 ALU 添加一个额外的端口,该端口将考虑 shamt 数量(位 [10:6])。可能有一些内部硬件,例如 ALU 中的 MUX,它负责从寄存器文件的输出中选择 shamt 字段或读取数据 2。

于 2019-03-27T03:21:32.883 回答