我正在研究嵌入式系统中内存层次结构的主题。在一些嵌入式SOC器件上,在芯片上提供专用SRAM。我的问题是:
为什么SOC嵌入式SRAM通常不与主存储器系统缓存一致?
因此,通常将SRAM映射到非缓存的地址空间。
我知道SRAM的内容取决于应用程序,通常特定的链接器部分将特定的数据结构映射到SRAM,以减少对这些数据的访问时间。 例如,可以将中断向量表放入SRAM中,从而减少访问时间并强制确定性中断处理。缓存SRAM会使SRAM访问不确定,因为可能会发生缓存未命中。
无论如何,我不明白这是否与SRAM不是缓存一致的原因有关。
感谢。
答案 0 :(得分:4)
在记忆中,我们通常非常快。根据您对缓存和片上RAM的要求有多小/嵌入,速度是相同的,因此通过添加额外的周期并通过在其前面放置sram来扩大访问来减慢on die sram是愚蠢的。这些系统通常也有片上闪存,并且确实需要缓存或某种缓冲来加速执行,在这种情况下,您会在闪存前看到缓存。要在sram前面使用缓存进行数据访问,你需要某种内存管理,更多的东西可以占用死亡空间,更多东西可以减慢速度。一个简单的解决方案是,例如在芯片设计中声明所有地址集的msbit未缓存,并将外围设备放在那里,如果启用了缓存并将ram和flash放在那里,msbit的所有内容都没有设置为cachable。
如果你有芯片和片外存储器,片外存储器空间可能需要一个高速缓存,并且可能像高位地址位或位解决方案只有高速缓存的片外存储器(因为它可能更慢)。
为了启动,矢量表通常需要在闪存中。有些系统允许你在启动后切换哪些内存响应该地址空间,分支到闪存的另一个地址空间,翻转控制位,然后在ivt上有ram,然后你在ram中复制或创建新的向量表。在启动时保持ivt的闪存不一定是不确定的,我倾向于它是非常确定的,像片上RAM一样确定。每次访问可能会慢几个时钟。您的中断和任何其他执行性能通常由您的语言和编译器决定,而不是系统。
也许您应该指定您感到困惑的确切系统或系统。