ARM的ram包括靜態(tài)ram,動態(tài)ram, TCM---緊耦合內(nèi)存(TCM: Tightly Coup ledMemories)。
TCM是一個固定大小的RAM,緊密地耦合至處理器內(nèi)核,提供與cache相當(dāng)?shù)男阅?,相比于cache的優(yōu)點是,程序代碼可以精確地控制什么函數(shù)或代碼放在哪兒(RAM里)。當(dāng)然TCM永遠(yuǎn)不會被踢出主存儲器,因此,他會有一個被用戶預(yù)設(shè)的性能,而不是象cache那樣是統(tǒng)計特性的性能提高。
TCM對于以下幾種情況的代碼是非常有用、也是需要的:可預(yù)見的實時處理(中斷處理)、時間可預(yù)見(加密算法)、避免cache分析(加密算法)、或者只是要求高性能的代碼(編解碼功能)。隨著cache大小的增加以及總線性能的規(guī)模,TCM將會變得越來越不重要,但是他提供了一個讓你權(quán)衡的機(jī)會
那么,哪一個更好呢?他取決于你的應(yīng)用。Cache是一個通用目的的加速器,他會加速你的所有代碼,而不依賴于存儲方式。TCM只會加速你有意放入TCM的代碼,其余的其他代碼只能通過cache加速。Cache是一個通用目的解決方案,TCM在某些特殊情況下是非常有用的。假如你不認(rèn)為需要 TCM的話,那么你可能就不需要了,轉(zhuǎn)而加大你的cache,從而加速運(yùn)行于內(nèi)核上的所有軟件代碼.
緊致內(nèi)存是指片上快速存儲區(qū),與片上緩存具有同等的性能,但因為程序可完全控制緊致內(nèi)存,因而比統(tǒng)計復(fù)用的緩存有更好的可預(yù)測性。這是ARM5TE引入的特性,目的是通過這一快速的存儲區(qū),一方面提高某些關(guān)鍵代碼(如中斷處理函數(shù))的性能,另方面使存儲訪問延遲保持一致,這是實時性應(yīng)用所要求的。ARM6對TCM操作做了進(jìn)一步的規(guī)范。
TCM的應(yīng)用領(lǐng)域:可預(yù)測的實時處理(中斷處理)、避免緩存分析(加密算法)、或單純的性能提高(處理器側(cè)編解碼)等。
如同緩存的哈佛結(jié)構(gòu),指令TCM和數(shù)據(jù)TCM是分開的。TCM有兩種使用方式:作為快緩存使用,和作為本地內(nèi)存使用。
本地內(nèi)存
這時,TCM被用作更快速的內(nèi)存,如同一般的RAM。因為指令段有時也是數(shù)據(jù)訪問的對象,指令TCM實際上是指令數(shù)據(jù)一體化TCM。對TCM寫操作后和后續(xù)對此寫操作的依賴指令之間必須跟一個阻塞操作。
快緩存(smartcache)
TCM可以配置成當(dāng)作外部RAM的緩存使用,對應(yīng)的外部RAM也要設(shè)置可緩存標(biāo)志。如果被緩存的外部RAM可以由多處理器共享,那么TCM是否與共享數(shù)據(jù)保持一致并沒有規(guī)定,而由具體實現(xiàn)廠家決定。
TCM與緩存的內(nèi)容不會自動保持一致,這意味著TCM映射到的內(nèi)存區(qū)域必須是不緩存的區(qū)域。如果一個地址同時落在緩存和TCM內(nèi),那么訪問這一地址的結(jié)果是不能預(yù)測的。另一個限制是各個TCM必須要配置成不相交的。
TCM的配置
通過CP15的0、1、9號寄存器進(jìn)行:
0號寄存器
讀CP15的0號寄存器,opcode2為2:
MRC p15, 0, Rd, C0, C0, 2
返回TCM狀態(tài)寄存器的內(nèi)容,其中,16-18位代表數(shù)據(jù)TCM個數(shù),0-3代表指令TCM個數(shù)。
1號寄存器
ARM6之前,1號寄存器的16位和18位用于使能數(shù)據(jù)TCM和指令TCM(ARM946,ARM966),ARM6因為可以使用9號寄存器控制每一塊TCM的使能狀態(tài),所以1號寄存器的這兩個位就過時了,應(yīng)該置1。
9號寄存器
每個TCM都有一個TCM區(qū)域寄存器,設(shè)置這個寄存器就可以設(shè)置TCM的基址和大小。在設(shè)置TCM區(qū)域寄存器前,需要設(shè)置TCM選擇寄存器。
下面是訪問這些相關(guān)寄存器的指令:
ARM Instruction TCM Region Register
MRC/MCR P15, 0, Rd, C9, C1, 0 Data TCM Region Register
MRC/MCR P15, 0, Rd, C9, C1, 1 Instruction/Unified TCM Region Register
MRC/MCR P15, 0, Rd, C9, C2, 0 TCM Selection Register
TCM區(qū)域寄存器的結(jié)構(gòu):
Base Address (Physical Address)[31-12] SBZ/UNP[11-7] Size[6-2] SC[1] En[0]
其中:
En位是使能位,置1時使能此TCM;
SC位置位表示此TCM被用作快緩存(smartcache),清零表示本地內(nèi)存;
Size字段是只讀的,含義如下:
Size Memory Size Memory
filed size field size
0b00000 0K 0b01101 4M
0b00011 4K 0b01110 8M
0b00100 8K 0b01111 16M
0b00101 16K 0b10000 32M
0b00110 32K 0b10001 64M
0b00111 64K 0b10010 128M
0b01000 128K 0b10011 256M
0b01001 256K 0b10100 512M
0b01010 512K 0b10101 1G
0b01011 1M 0b10110 2G
0b01100 2M 0b10111 4G
注意TCM區(qū)域寄存器配置出來的各個TCM塊不能相交,否則后果不可預(yù)測