微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 对ARM紧致内存TCM的理解

对ARM紧致内存TCM的理解

时间:11-20 来源:互联网 点击:
ARM的ram包括静态ram,动态ram,TCM---紧耦合内存(TCM: Tightly Coupled Memories)。

TCM是一个固定大小的RAM,紧密地耦合至处理器内核,提供与cache相当的性能,相比于cache的优点是,程序代码可以精确地控制什么函数或代码放在哪儿(RAM里)。当然TCM永远不会被踢出主存储器,因此,他会有一个被用户预设的性能,而不是象cache那样是统计特性的性能提高。
TCM对于以下几种情况的代码是非常有用、也是需要的:可预见的实时处理(中断处理)、时间可预见(加密算法)、避免cache分析(加密算法)、或者只是要求高性能的代码(编解码功能)。随着cache大小的增加以及总线性能的规模,TCM将会变得越来越不重要,但是他提供了一个让你权衡的机会
那么,哪一个更好呢?他取决于你的应用。Cache是一个通用目的的加速器,他会加速你的所有代码,而不依赖于存储方式。TCM只会加速你有意放入TCM的代码,其余的其他代码只能通过cache加速。Cache是一个通用目的解决方案,TCM在某些特殊情况下是非常有用的。假如你不认为需要TCM的话,那么你可能就不需要了,转而加大你的cache,从而加速运行于内核上的所有软件代码.

紧致内存是指片上快速存储区,与片上缓存具有同等的性能,但因为程序可完全控制紧致内存,因而比统计复用的缓存有更好的可预测性。这是ARM5TE引入的特性,目的是通过这一快速的存储区,一方面提高某些关键代码(如中断处理函数)的性能,另方面使存储访问延迟保持一致,这是实时性应用所要求的。ARM6对TCM操作做了进一步的规范。

TCM的应用领域:可预测的实时处理(中断处理)、避免缓存分析(加密算法)、或单纯的性能提高(处理器侧编解码)等。
如同缓存的哈佛结构,指令TCM和数据TCM是分开的。TCM有两种使用方式:作为快缓存使用,和作为本地内存使用。
本地内存
这时,TCM被用作更快速的内存,如同一般的RAM。因为指令段有时也是数据访问的对象,指令TCM实际上是指令数据一体化TCM。对TCM写操作后和后续对此写操作的依赖指令之间必须跟一个阻塞操作。
快缓存(smartcache)
TCM可以配置成当作外部RAM的缓存使用,对应的外部RAM也要设置可缓存标志。如果被缓存的外部RAM可以由多处理器共享,那么TCM是否与共享数据保持一致并没有规定,而由具体实现厂家决定。

TCM与缓存的内容不会自动保持一致,这意味着TCM映射到的内存区域必须是不缓存的区域。如果一个地址同时落在缓存和TCM内,那么访问这一地址的结果是不能预测的。另一个限制是各个TCM必须要配置成不相交的。

TCM的配置
通过CP15的0、1、9号寄存器进行:
0号寄存器
读CP15的0号寄存器,opcode2为2:
MRCp15,0,Rd,C0,C0,2
返回TCM状态寄存器的内容,其中,16-18位代表数据TCM个数,0-3代表指令TCM个数。

1号寄存器
ARM6之前,1号寄存器的16位和18位用于使能数据TCM和指令TCM(ARM946,ARM966),ARM6因为可以使用9号寄存器控制每一块TCM的使能状态,所以1号寄存器的这两个位就过时了,应该置1。

9号寄存器
每个TCM都有一个TCM区域寄存器,设置这个寄存器就可以设置TCM的基址和大小。在设置TCM区域寄存器前,需要设置TCM选择寄存器。
下面是访问这些相关寄存器的指令:

ARMInstructionTCMRegionRegister
MRC/MCRP15,0,Rd,C9,C1,0DataTCMRegionRegister
MRC/MCRP15,0,Rd,C9,C1,1Instruction/UnifiedTCMRegionRegister
MRC/MCRP15,0,Rd,C9,C2,0TCMSelectionRegister

TCM区域寄存器的结构:
BaseAddress(PhysicalAddress)[31-12]SBZ/UNP[11-7]Size[6-2]SC[1]En[0]

其中:
En位是使能位,置1时使能此TCM;
SC位置位表示此TCM被用作快缓存(smartcache),清零表示本地内存;
Size字段是只读的,含义如下:

SizeMemorySizeMemory
filedsizefieldsize
0b000000K0b011014M
0b000114K0b011108M
0b001008K0b0111116M
0b0010116K0b1000032M
0b0011032K0b1000164M
0b0011164K0b10010128M
0b01000128K0b10011256M
0b01001256K0b10100512M
0b01010512K0b101011G
0b010111M0b101102G
0b011002M0b101114G

注意TCM区域寄存器配置出来的各个TCM块不能相交,否则后果不可预测

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top