为什么 ALU 结果将地址写入 R 型指令的内存?

Why ALU result writes address into memory for R-Type instructions?

我正在尝试了解 MIPS 指令的单周期数据路径。目前我可以跟踪R型、I型和J型指令,我知道不同指令上的控制信号,但我脑子里还有不清楚的地方。 在这个例子中,我假设有一个 R 型指令,比方说 add 指令。

我认为add指令与内存无关。当然它不会将结果值写入内存,而是指向数据内存中的 "Address" 输入。这就是我困惑的地方。

它不"write"寻址内存,它给数据内存地址。

一次内存操作需要三件事:

  • 地址
  • 一个值
  • 尺寸

一些内存操作是 "loads" — 这些操作将一个值从内存传输到 CPU,因此加载为该值指定一个目标寄存器;一些内存操作是 "stores" — 这些操作将一个值从 CPU 传输到内存,因此存储为该值指定一个源寄存器。

无论加载还是存储,都必须指定地址才能执行数据存储器操作。在 MIPS 上我们只有一个 addressing mode,它是寄存器 + 符号扩展立即数。在简单的 MIPS 处理器中,ALU 执行此加法,因为它在该使用的那个时钟周期中是 free/available。

控制信号为加载打开 MemRead,为存储打开 MemWrite。否则这两个都关闭,因此数据存储器对于 R 型指令、分支指令和任何不加载或存储的指令都是不活动的。

对于 R 型指令,ALU 结果作为写入数据(绕过数据存储器,最终)返回到寄存器。对于加载指令,数据存储器值变为写入数据。