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