从 ROM 或 RAM 执行程序哪个更快?

电器工程 微控制器 内存 只读存储器
2022-01-16 21:49:16

我们大多数具有电子背景的人都知道 SRAM 比 DRAM 快。但是在比较 RAM 和 ROM 时,我不确定。

我的问题与微控制器有关:“如果代码直接从 RAM/ROM 执行,谁的性能会更好??1)从 RAM 执行或 2)从 ROM 执行或 3)两者的性能相同”

还要考虑到 ROM 被设计为具有更高的读取速度这一事实。而对于 RAM,需要权衡读取速度与写入功能。

3个回答

数据表应该告诉您每条指令需要多长时间,以及从 RAM 或 ROM 执行之间存在哪些差异(如果有)。

对于提供从 RAM 执行选项的微控制器,这可能更快,这可能是使用额外 RAM 空间来执行代码的要点。也可能存在一些获取重叠问题。在某些情况下,从 ROM 执行可能会更快,因为它是一个单独的内存,并且 RAM 访问可以同时进行。

同样,了解任何特定微的唯一方法是阅读数据表

这完全取决于内存和 CPU 架构。根据经验,SRAM 比闪存快,尤其是在高速 MCU (>100 MHz) 上。SRAM 位单元产生(或多或少)逻辑电平输出,而闪存必须经过较慢的电流感应过程。

再快多少(如果有的话)取决于架构——内存的字长、每个等待状态的数量、缓存的存在、CPU 指令的大小等。如果你在一个足够低的频率,您可以在闪存和 RAM 上具有零等待状态,因此它们可能以相同的速度运行。

代码也很重要。如果您的代码是严格线性的(没有分支),那么闪存可以足够快地预取指令,即使在更高频率下也能保持 CPU 饱和。正如 Olin 所说,当代码和数据位于不同的存储器中时,具有独立程序和数据读取路径的哈佛架构 CPU 可能会执行不同的操作。

金属 ROM(和其他非易失性存储器,如 FRAM)有自己的特点,可能会也可能不会像 SRAM 一样快。写作能力并不一定会有所作为。它更多的是关于位单元输出和传感电路的特性。

数据表将使您大致了解速度差异,但唯一确定的方法是分析您的代码。

“运行程序”需要具有同步时钟的 CPU。慢速内存可以通过以足够慢的时钟运行整个系统,或者通过插入wait states(在获取和解码阶段之间额外的无操作时钟周期)来适应,仅在某些地址范围内有效(例如,参见古老的 8085)。 CPU 指令获取并不知道或不关心数据何时稳定到其最终值,只要它在建立/保持间隔期间不改变即可。

微控制器通常将所有内存都放在芯片上,所以除非另有说明,否则我会假设内存系统都是零等待状态。(但请阅读数据表以确认)。与台式机相比,典型的微控制器是更简单的单芯片解决方案,因此微控制器中不太可能出现等待状态。因此,微控制器不太可能与片上存储器速度不匹配。

更快的内存通常成本更高(更高的电压、更低的电容、更多的需求)。80xx86 在 L2 高速缓存中具有快速 SRAM,在 L1 高速缓存中具有更快的 SRAM,并且许多较慢的片外 DRAM 连接到内存控制器。这种系统比微控制器复杂得多,超出了问题的范围。(但计算机工程师非常感兴趣!)