ARM Cortex-M4有缓存吗?

4

我想知道ARM Cortex-M4内部是否有缓存。

我在技术参考手册中没有找到任何线索,但是它是官方的还是隐藏的呢?我知道一些微控制器有缓存,但那是位于总线和RAM之间,而不是在核心内部。

您是否知道任何澄清这一点的文档?


它们可以有缓存,但具体实现因此您不能总是假定存在缓存。一些公司(如ST)在闪存前面拥有自己的一种隐形缓存,并选择不使用靠近Cortex-M4的缓存。当然,也可能会有例外情况。最好从ARM文档开始,但还应参考芯片供应商的文档,因为应该有启用和刷新缓存的方法需要记录。 - old_timer
好的,但我认为Cortex M4是由他自己实现的。我的意思是它用RTL语言描述,并作为ARM客户端交付。因此,如果他们在某个地方集成了缓存,那么每个Cortex M4都会有它。我在AMR文档中读到了一些关于M4和总线之间的写缓冲区的内容,所以我认为如果他们没有在任何地方提到缓存,那么它就不存在。 - Welgriv
你可以在核心外拥有一个系统级别的处理器,这对于任何处理器来说都是正确的,甚至在某些情况下可以在芯片外(如果你有值得的外部芯片)。但是,ARM内核中没有缓存。 - old_timer
3个回答

15

简短回答:

不,ARM Cortex-M4 内核内部没有缓存。

详细回答:

根据维基百科关于 ARM Cortex-M (link)的页面,指令和数据缓存是 Cortex-M 架构的硅选项,而 Cortex-M4 并没有包括这样的缓存。

可靠的来源是《ARM Cortex™-M 编程指南:内存屏障指令》(html / pdf),其中提到:

Cortex-M0、Cortex-M0+、Cortex-M1、Cortex-M3 和 Cortex-M4 处理器都没有内部缓存。

但是,SoC 设计可以集成系统级缓存。

之后它还补充道:

注意:Cortex-M3 和 Cortex-M4 处理器中存在一个小的缓存组件,在指令提取过程中加速 flash 存储器访问。

此外,在同一应用说明中还提到:

某些 Cortex-M3 和 Cortex-M4 设计可能具有特定于实现的程序缓存,以加速程序存储器访问。

因此,总结一下,ARM Cortex-M4核心包含(相关)缓存。
但是,建议检查实际使用的微控制器的数据手册。例如,NXP i.MX 7系列(link)包括具有指令和数据缓存的Cortex-M4,但正如您在问题中已经说明的那样,这在核心之外。

2
据我所知,Cortex-M4核心没有定义缓存,并且在官方Arm Cortex-M4文档中也没有提到缓存。然而,我知道许多基于Cortex-M4的微控制器都有缓存,一些仅用于加速闪存,另一些则用于访问RAM。通常会使用紧密耦合内存(TCM)代替数据缓存,因为它们可以使程序具有更可预测的行为。"最初的回答"

TCM == 单周期SRAM,我猜是这样的? - marko
@marko TCM是一个插件,它的存在、实现和特性取决于设备。 - Johan
我认为TCM并不是“代替数据缓存”使用的。虽然TCM不需要缓存,但是由于成本昂贵,因此相对较小。大多数微控制器也支持其他类型的存储器(如SRAM、SDRAM和Flash),这就是缓存变得相关的地方。 - wovano

1

在Cortex-M4内部没有“隐藏”的缓存。如果有文档支持,那么它就不会是隐藏的。

系统级别的缓存和TCM当然是特定实现的细节,因此MPU可以为不同区域指定缓存策略。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接