Tightly Coupled Memory (TCM)
TCM内存旨在提供内核处理器可以使用的更低延迟内存。TCM内存可用于保存关键代码执行,例如中断处理例程或实时任务,可以规避Cache缓存中的执行序列不确定性的问题。此外,还可以使用TCM保存普通变量、主要还是那些不适合在cache缓存中保存的关键数据类型,比如中断堆栈等。TCM物理位置非常靠近处理器核心。对TCM的访问通常被配置为在一个时钟周期内进入或返回数据。通过在TCM中存储时间关键执行代码(如异常处理程序),处理器可以立即访问子程序,而不必等待从外部存储中获取子程序代码。
TCM将被用作系统物理内存映射的一部分,在设计中要求其物理地址是独占的,即不与外部存储的地址范围有交集。特定的内存位置必须要么包含在TCM,要么包含Cache缓存中。这里要特别指出,TCM和cache之间不支持一致性检查机制,这意味着在分配TCM的地址范围时,确保Cache缓存中不包含相同的地址
例如,在Cortex-M7处理器中,内存系统包括对TCM的支持。如果使用TCM,则TCM端口将低延迟内存连接到处理器,并提供ITCM (Instruction TCM)和DTCM (Data TCM)接口。ITCM为64位内存接口,DTCM为两个32位内存接口(D0TCM和D1TCM)。每个TCM都有一个固定的基址,每个TCM的大小应该在复位初始化例程中配置(TCM设置也可以由ASIC设计人员定义,不需要对TCM配置寄存器进行编程)。一般情况下,TCM端口连接的是RAM或类RAM内存(如SRAM、FRAM),即Arm架构的Normal-type内存。为了获得最佳性能,DTCM通常用于存储关键变量和经常更新的变量,而ITCM通常用于访问关键函数、异常向量表和中断服务例程。但是,对于应该使用哪个TCM来放置代码和数据,没有功能限制。请注意,Cortex-M7/M55/M85处理器中的内存系统是这样设计的:针对TCM的地址将只到达ITCM/DTCM接口,而其余的地址范围(不属于物理TCM地址)将默认通过AXI接口。编译器生成的代码通常会从ITCM执行数据加载,以访问程序映像中的文字池数据和其他常数值。
参考链接:https://developer.arm.com/documentation/107565/0101/Memory-system/Tightly-Coupled-Memory--TCM-#:~:text=TCM%20is%20designed%20to%20provide%20low-latency%20memory%20that,indeterminacy%20of%20a%20cache%20would%20be%20highly%20undesirable.