MIPS存储字节和存储半字实现
我目前正在实现一个单周期MIPS处理器,并正在实施SB和SH指令。 我已经使用这个线程的想法成功实现了LB / LBU和LH / LHU指令:在单周期数据路径中加载半字和加载字节
我很难概念化如何执行SB / SH指令。 我目前的想法是有一个4:1 MUX,其中每个输入是当前字的掩码,字节将被写入。 例如,假设我将字节0x2E写入地址0x10010002,例如当前包含值:[0x10010000] 0xABCD1234。 所以写入内存后将会是:[0x10010000] 0xAB2E1234。 (字节对齐寻址)
所以我要做的就是用地址0x10010000使用4个AND来掩码0xFFFFFF00,0xFFFF00FF,0xFF00FFFF,0x00FFFFFF。 MUX的选择位将来自地址的最低两位。
同时,这种情况正在发生,我们采取该字节,将其零扩展,然后在其上执行一些不同的移位,以将其置于掩模的正确位置。 这些不同的移位值将再次进入具有相同相应选择位的MUX。 例如,如果地址的底部两位是0,则不需要移位,如果是01,那么我们左移一个字节。 如果10,我们左移2字节。 如果是11,则剩下3个字节(或循环右移1个字节)
然后我们将这两个MUX的值和OR值一起得到最终的值来存储。 所以对于上面的例子:
底部的两位是10,所以MUX选择0xFF00FFFF与0xABCD1234进行AND运算,以得到输出值0xAB001234。 该字节左移4变成0x002E0000,然后与0xAB001234进行或运算成为0xAB2E1234,然后被存储。
当然,这也延伸到SH指令的思路。 我希望我的例子有道理。 我可能会以这种方式实现它,除非有更简单的方法来做到这一点,我没有看到。 我一直盯着硬件设计这么久,我可能会错过一些更简单的实现。
谢谢。
链接地址: http://www.djcxy.com/p/19209.html