ARM TCM 内存是什么?

31
在ARM处理器中,TCM内存是什么,它是专门的内存还是只是配置为TCM的RAM区域?如果它是专用内存,为什么我们可以配置它的位置和大小?

3
这个问题是“为什么我们可以配置它?”还是“为什么我们不能配置它?” - Sil
1个回答

47

TCM,即 Tight Coupling Memory,是一个(或多个)小的、专用的内存区域,顾名思义,非常靠近 CPU。其主要好处是,CPU 每个周期都可以访问 TCM。与普通内存相反,没有缓存参与,使得所有内存访问可预测。

TCM 的主要用途是存储性能关键数据和代码。中断处理程序、实时任务的数据和操作系统控制结构都是常见例子。

如果它是专用内存,为什么我们可以配置它的位置和大小

如果让它可配置,会使所有内存访问的地址解码变得更加复杂,而且在固定地址范围上使用没有任何真正的好处。因此,将 TCM 绑定到固定地址可能更容易和更快速。

顺便说一下,如果您正在处理具有 TCM 的系统,并且尚未使用它,请尝试将您的堆栈放在那里。这通常会为您提供一些免费的性能提升,因为所有堆栈内存访问现在都是单周期的,不再污染数据缓存。


它的大小怎么样?由于它是硬件,我们如何配置它的大小? - bouqbouq
这取决于确切的硬件。有一些ARM架构可以让您分割TCM,以便您可以将其中一部分用作TCM,其余部分用作数据缓存。从芯片设计师的角度来看,当您设计微控制器时,您当然可以决定您的TCM的大小。 - Nils Pipenbrinck
1
我正在使用带有缓存的Cortex R5f处理器。我将堆栈设置在TCM上,并测试了一些基准测试。令我惊讶的是,当我将STACK设置为RAM时,我得到了92个数据缓存未命中,而当我将STACK设置为TCM时,我得到了91个数据缓存未命中。我使用事件0x03来计算缓存未命中的数量http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0460d/CHDGGECB.html。我不理解的是,我在TCM上获得更好的性能,只有1个缓存未命中的差异,同时L1缓存比TCM更快。可能我计算的不是缓存未命中的数量吗? - bouqbouq
1
@MakhloufGharbi,你的CPU可能还有专用的数据通路连接到TCM,这样CPU就可以在同一个周期内访问L1和TCM。这可能会增加一些速度。顺便说一下,如果你只有91个缓存未命中,那么你的基准测试很可能完全在L1缓存中运行。尝试使用更大的数据集。 - Nils Pipenbrinck
3
在STM32中,这种内存被称为核心耦合内存CCM。而且DMA无法访问它。我认为这对开发人员来说是一个重要的提示。 - kyb
显示剩余5条评论

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