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