MIPS存储字节和存储半字实现

时间:2013-05-29 06:56:55

标签: assembly mips cpu-architecture digital-logic

我目前正在实施单周期MIPS处理器,正在努力实现SB和SH指令。我已经使用此主题的想法成功实现了LB / LBU和LH / LHU指令:Load half word and load byte in a single cycle datapath

我无法概念化如何实施SB / SH指令。我目前的想法是拥有一个4:1的MUX,其中每个输入都是当前字的掩码,其字节将被写入。例如,假设我要将字节0x2E写入地址0x10010002,例如当前包含值:[0x10010000] 0xABCD1234。因此在写入内存后将是:[0x10010000] 0xAB2E1234。 (字节对齐寻址)

所以我要做的是使用4个AND屏蔽地址0x10010000的字,其值为0xFFFFFF00,0xFFFF00FF,0xFF00FFFF,0x00FFFFFF。 MUX的选择位将来自地址的最后两位。

同时发生这种情况,我们取字节,对其进行零扩展,然后对其执行一些不同的移位,将其置于掩码的正确位置。这些不同的移位值将再次进入具有相同相应选择位的MUX。因此,例如,如果地址的底部两位为0,则不需要移位,如果为01,则我们将移位一个字节。如果是10,我们左移2个字节。如果11,则左3个字节(或循环右移1个字节)

然后我们将MUX和OR的值一起取出来得到要存储的最终值。所以对于上面的例子:

底部两位为10,因此MUX选择0xFF00FFFF与0xABCD1234进行对比,以提供输出值0xAB001234。该字节左移4变为0x002E0000,然后与0xAB001234进行“或”运算成为0xAB2E1234,然后存储。

当然,这延伸到具有相同想法的SH指令。我希望我的榜样有道理。我可能会以这种方式实现它,除非有一种更简单的方法来做到这一点,我没有看到。我一直盯着硬件设计,所以我可能会错过一些更简单的实现。

感谢。

0 个答案:

没有答案