首页 > 解决方案 > MIPS 单周期 - 为什么 MemRead 和 MemToReg 是分开的?

问题描述

我目前正在研究 MIPS 单周期处理器数据路径的来龙去脉。

我找不到原因,为什么 MemRead 和 MemtoReg 之间存在差异。我目前的理解是,如果我们想从数据内存中加载一些东西,如果我们加载一些我们想在寄存器中使用它的东西,并且如果我们不想加载一些我们想使用结果的东西,我们将 MemRead 设置为 1寄存器中的 ALU(前提是 RegWrite 设置为 1)。那么为什么 MemRead 和 MemtoReg 有不同的信号呢?

这是我正在使用的数据路径:

https://i.imgur.com/ntSvcd3.png

标签: mips

解决方案


好吧,我认为部分原因是内存需要获得自己的控制信号。

要记住的重要一件事是计算所有多路复用器输入,然后选择正确的输出。因此,对于不涉及从内存读取的指令,即使 MemToReg 控制信号告诉多路复用器忽略来自内存的值,ALU 结果仍会传递到内存。这意味着,如果没有 MemRead,内存可能会认为它正在获取一个无效的地址,这可能会导致一些问题。例如,(不是真正的地址)“地址”可能越界或字不对齐,这可能会触发硬件异常。

这是 Patterson 和 Hennessy 所著的Computer Organization and Design MIPS Edition一书中的图表——如果您阅读其中的标题,它可能有助于回答您的问题:

图 4.8 来自 Patterson 和 Hennessy 的 Computer Organization and Design (MIPS) 第 5 版

但是......为什么 MemRead 和 MemToReg 需要分开,而不仅仅是一个被拆分并发送到两个地方的值?那个,我不确定。

一个可能的原因可能是他们正在区分可以获得“无关”值的控制信号。在 MemToReg 可以获取“无关”值的情况下,MemRead 可能仍需要获取 0,这样它就不会由于上述原因导致任何错误。


推荐阅读