为啥静态随机存取存储器 (SRAM) 不需要存储控制器?

Posted

技术标签:

【中文标题】为啥静态随机存取存储器 (SRAM) 不需要存储控制器?【英文标题】:Why static random access memory (SRAM) does not require a memory controller?为什么静态随机存取存储器 (SRAM) 不需要存储控制器? 【发布时间】:2022-01-14 22:29:51 【问题描述】:

我一直在研究引导加载程序,并且大多数来源都有解释说 ROM 代码在大多数芯片上,告诉芯片上电后去哪里,然后 ROM 代码加载一小块将代码写入 SRAM。

我的问题是 DRAM 需要控制器才能运行,但为什么 SRAM 不需要?谁控制 SRAM?或者它是如何被控制的? 另外,在系统完成 SRAM 并且事情耗尽 DRAM 之后会发生什么?

我还不知道这是否有意义,但最好能从u-boot和Linux的角度回答。

【问题讨论】:

这个问题不是更适合electronics.stackexchange.com吗? @Codo 不,这更多是关于软件和一般理论,而不是基于硬件的问题。 不,这真的不是一个软件问题,它完全是关于硬件如何工作的。从问题的措辞和当前的答案中都可以清楚地看到这一点。这显然是题外话——即使它很有趣。 SRAM 是静态的,因此不需要刷新控制。它有一个更简单的接口和时间;设置地址总线,时钟输出使能,读取数据总线。我不明白为什么 uboot 或 Linux 是相关的。一个足够大以运行 Linux 的 SRAM 将非常昂贵且相当缓慢。 SDRAM 密度高、价格便宜且速度快。 【参考方案1】:

两者都需要控制器,但是 DRAM 需要定期刷新以保持其状态(在冷凝器中),这与通过锁存电路存储其状态的 SRAM 不同。 这意味着如果您想在重置后保留内存的内容(例如从 Linux 或 U-Boot),您必须已将 DRAM 控制器配置为在重置步骤期间“自动刷新”内存。 SRAM 则不需要。

【讨论】:

那它是如何被启动时的引导ROM访问而DRAM不能访问的呢? DRAM 需要更复杂的配置,由软件触发。内部 SRAM,可以透明初始化。 这样的SRAM控制器会是什么样子,您介意添加一个链接吗?我在小型微控制器和旧处理器方面有深厚的背景,他们的 SRAM 从来不需要任何控制器。 @thebusybee,静态 RAM“控制器”就像地址解码器一样简单。 en.wikipedia.org/wiki/Address_decoder @0andriy 好吧,我不会将地址解码器称为内存控制器。【参考方案2】:

通常,当您从引导加载程序的角度提及 SRAM 时,它是可由控制器访问的内部 RAM。该 RAM 由控制器使用 AHB/AXI 总线访问(对于基于 ARM 的设备)。可能有一个内存桥将信号从 AHB/AXI 总线转换为内存总线。所以从软件的角度来说,它是透明的,不需要特定的软件配置来访问这个 RAM。

【讨论】:

【参考方案3】:

...然后 ROM 代码将一小块代码加载到 SRAM 中。

这是某些 SoC 的常见程序,但不是必需的。有备用引导方案。

使用 CRIS 处理器(现已停产)的 Etrax SoC 需要将 DRAM 参数存储在非易失性存储器 (NVM) 中。嵌入式 ROM 引导代码访问此 NVM,并初始化 DRAM 控制器。因此,ROM 引导代码能够直接引导 Linux 内核。

一些 ARM SoC 有一个引导存储器选择器 (BMS) 引脚(例如 Atmel AT91SAM9xxx 和 Microchip SAMA5Dx),可以禁用内部 ROM 代码,并让处理器在从外部复位后执行代码具有就地执行 (XIP) 能力的 NVM(例如 NOR 闪存)。这样的引导方案可以定制为初始化外部 DRAM,然后加载 U-Boot 甚至是 Linux 内核。


我的问题是 DRAM 需要控制器才能运行,但为什么 SRAM 不需要? 谁控制 SRAM?或者它是如何被控制的?

DRAM 需要一个控制器,因为这种类型的内存技术需要定期刷新。在访问 DRAM 之前,需要以编程方式初始化 DRAM 控制器。加载到 SRAM 中的引导代码的功能之一是执行 DRAM 控制器的初始化。

相比之下,与 SRAM 的接口要简单得多。通常没有“SRAM 控制器”。与 SRAM 接口的控制逻辑通常会达到需要“控制器”的复杂程度。例如,我使用了一个 SBC,它的 Z80 微处理器直接连接到 SRAM (HM6264) 和 EPROM (MBM2764) 内存 IC 以及一些用于地址解码的逻辑。

现代 SoC 上的“SRAM 控制器”主要是 外部 SRAM 与内部系统总线的缓冲接口。 SoC 的内部 SRAM 不需要任何软件初始化,复位后可立即访问。

此外,在系统完成 SRAM 并且事情耗尽 DRAM 之后会发生什么?

当内部 SRAM 不包含在 Linux 内核管理的内存中时,通常不会使用它。我不知道这是否是由于任何技术原因,例如虚拟内存或缓存问题,或者疏忽,或者对同构内存的简单性的渴望。 对于某些 SoC 而言,内部 SRAM 的数量非常小(例如 Atmel AT91SAM926x 中的 8 KB),以至于在内核中使用它的努力可能会被认为具有较差的成本效益权衡。 请参阅有关 Atmel/Microchip SAMA5D3x 上 SRAM 的 kernel patch 的讨论

设备驱动程序仍然可以将内部 SRAM 用作高速缓冲区的私有内存区域。例如,有一个kernel patch 使用 SRAM 来保存以太网传输数据包以避免传输欠载错误。

【讨论】:

以上是关于为啥静态随机存取存储器 (SRAM) 不需要存储控制器?的主要内容,如果未能解决你的问题,请参考以下文章

SRAM市场与技术

SRAM市场与技术

SRAM种类产家种类简介

SRAM种类产家种类简介

随机存取存储器DRAM

随机存取存储器DRAM