【问题标题】:Why a MIPS pipeline has a memory read signal, but not a register read signal?为什么 MIPS 流水线有内存读取信号,但没有寄存器读取信号?
【发布时间】:2021-12-04 12:37:40
【问题描述】:

我想知道为什么我们在读取内存时需要一个内存读取信号?我明白为什么我们需要内存写入,原因与我们需要寄存器写入信号的原因相同。

但是我们不需要寄存器读取信号,那为什么我们需要内存读取信号呢?

【问题讨论】:

  • 这个问题是否有编程上下文,或者这与硬件有关?
  • 这是硬件相关的。我在谈论 MIPS 单周期和多周期实现。我应该提到这一点,所以我深表歉意。基本上,我想知道的是为什么我们需要一个控制信号来读取内存,而我们不需要一个来读取寄存器。谢谢!
  • 因为您的 CPU 内核并不是总线上唯一可能想要访问内存的东西。必须有一个仲裁器(或任何其他总线管理设备)来查看这个“想读”信号并安排谁应该被授予读或写的权利。

标签: mips cpu-architecture


【解决方案1】:

如果你想告诉它什么时候写,而不是什么时候读,那么只要写没有被断言,它就必须一直读。

如果让处理器在没有实际读取操作的情况下执行内存读取,它是否应该执行随机读取并污染缓存,并且还可能读取错误地址?

因此,读取信号的存在是为了防止无效或不适当的内存读取操作。

相比之下,即使某些指令不需要,寄存器读取也总是简单地完成 - 不同之处在于这样做不会产生负面影响,因为那些不需要的读取会被忽略(并且没有错误或缓存污染的概念那里)。

(在最坏的情况下,这些读取可能会丢失一些电源,但即使不使用硬件也存在并供电,因此我们需要一些先进的硬件节能技术来利用这一点,尤其是随机的指令流所必需的。)

不过,如果您想要一个寄存器读取信号,您可以放入一个,只是没有必要,因为无论如何下游 MUX 的后续控制信号都会忽略读取。

【讨论】:

  • 为了节省电力,您只需对一些逻辑进行门控,以减少开关晶体管的数量,而不是试图实际切断电源电压或将任何东西置于“睡眠状态”。例如当未断言寄存器读取时,阻止将任何 reg 号信号传播到该(寄存器文件)SRAM 读取端口,以便这些行都保持与以前相同的状态。 (和/或将时钟信号选通到输出触发器之类的东西?)
  • 这需要额外的晶体管来节省功率,并且不值得在早期的 MIPS 设计中使用晶体管。 (When power density wasn't a problem 因为每个晶体管占用了太多空间,而且时钟频率更低。)相反,您只想用尽可能少的门来完成工作,正如您所说,让它们根据垃圾输入切换时间越长越好因为结果被安全地忽略了,它不会断言失速或故障信号。 (缓存未命中或 TLB 未命中)
猜你喜欢
  • 2022-01-20
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多