我目前正在研究MIPS单周期处理器数据路径的来龙去脉。
我找不到原因,为什么MemRead和MemtoReg之间存在差异。我目前的理解是,如果我们想从数据存储器中加载某些东西,并且如果我们要在寄存器中使用它,那么我们将MemRead设置为1,并且如果我们不想加载某些东西,我们希望使用寄存器中的ALU(前提是RegWrite设置为1)。那么,为什么对于MemRead和MemtoReg有不同的信号?
这是我正在使用的数据路径:
答案 0 :(得分:1)
嗯,我认为部分原因是内存需要获得自己的控制信号。
要记住的一件事是计算所有多路复用器输入,然后选择正确的输出。因此,对于不涉及从存储器读取的指令,即使MemToReg控制信号告诉多路复用器忽略来自存储器的值,ALU结果仍会传递到存储器。因此,这意味着,如果没有MemRead,内存可能会认为它获取的地址无效,这可能会导致一些问题。例如,(不是真正的地址)“地址”可能超出范围或字对齐,这可能会触发硬件异常。
下面是帕特森和轩尼诗Computer Organization and Design MIPS Edition书中的图表–如果您阅读标题,可能会有助于回答您的问题:
但是 ...为什么MemRead和MemToReg需要分开,而不仅仅是一个值被拆分并发送到两个地方?那我不确定。
一个可能的原因可能是它们正在区分能够获得“无关”值的控制信号。在MemToReg可以获取“无关”值的情况下,MemRead可能仍需要获取0,这样才不会由于前面提到的原因而引起任何错误。