我目前正在研究MIPS单周期处理器数据通路的进进出出。
我找不到一个原因,为什么MemRead和MemtoReg之间有区别。我目前的理解是,如果我们想从数据内存加载某个东西,如果我们想要在一个寄存器中加载它,并且如果我们不想加载某个东西,那么我们将MemRead设置为1,并且如果我们不想在寄存器中使用ALU的结果(条件是RegWrite设置为1)。那么,为什么MemRead和MemtoReg有不同的信号呢?
下面是我使用的datapath:

发布于 2019-10-31 19:57:10
嗯,我认为这部分是因为内存需要有自己的控制信号。
要记住的一件重要的事情是,所有的复用器输入都是计算出来的,然后选择正确的输出。因此,对于不涉及从内存读取的指令,ALU结果仍然传递给内存,即使MemToReg控制信号告诉复用器忽略来自内存的值。因此,这意味着,如果没有MemRead,内存可能会认为它得到的地址是无效的,这可能会导致一些问题。例如,(不是真正的地址)“地址”可能超出范围,也可能不对字对齐,这可能会触发硬件异常。
下面是帕特森和轩尼诗的“https://rads.stackoverflow.com/amzn/click/com/0124077269”一书中的一张图表--如果你读到标题,它可能有助于回答你的问题:

但是..。为什么MemRead和MemToReg需要分开,而不仅仅是一个被分割并发送到两个地方的值?我不太确定。
一个可能的原因可能是他们区分了可以得到“不关心”值的控制信号。在MemToReg可以得到“不关心”值的情况下,MemRead可能仍然需要获得0,这样就不会因为前面所述的原因而导致任何错误。
https://stackoverflow.com/questions/54726371
复制相似问题