
在學習ARM的過程中,相信大家都接觸過RAM和動態RAM。但是對于ARM的來說,還有第三種內存形式,那就是TCM緊歐合內存。TCM能夠為ARM提供強力的支持,起到與cache相同的作用。但是TCM卻擁有cache所不具備的優點,那就是對于程序代碼的控制函數的精確擺放。在本文中,小編將為大家介紹TCM的相關知識。
TCM是一個固定大小的RAM,緊密地耦合至處理器內核,提供與cache相當的性能,相比于cache的優點是,程序代碼可以精確地控制什么函數或代碼放在哪兒(RAM里)。當然TCM永遠不會被踢出主存儲器,因此,他會有一個被用戶預設的性能,而不是像cache那樣是統計特性的性能提高。
TCM對于以下幾種情況的代碼是非常有用、也是需要的:可預見的實時處理(中斷處理)、時間可預見(加密算法)、避免cache分析(加密算法)、或者只是要求高性能的代碼(編解碼功能)。隨著cache大小的增加以及總線性能的規模,TCM將會變得越來越不重要,但是他為設計者提供了一個權衡的機會。
那么應該在哪種情況中使用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:MRC p15,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選擇寄存器。
下面是訪問這些相關寄存器的指令:
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區域寄存器的結構:
Base Address (Physical Address)[31-12] SBZ/UNP[11-7] Size[6-2] SC[1] En[0]
其中:
En位是使能位,置1時使能此TCM;
SC位置位表示此TCM被用作快緩存(smartcache),清零表示本地內存;
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;
這里需要大家注意的是,ARM內存當中的TCM區域寄存器配置得出的多個TCM模塊是不能相交的。如果出現相交的情況則有可能發生不受開發者控制的情況出現。
聲明:本內容為作者獨立觀點,不代表電源網。本網站原創內容,如需轉載,請注明出處;本網站轉載的內容(文章、圖片、視頻)等資料版權歸原作者所有。如我們采用了您不宜公開的文章或圖片,未能及時和您確認,避免給雙方造成不必要的經濟損失,請電郵聯系我們,以便迅速采取適當處理措施;歡迎投稿,郵箱∶editor@netbroad.com。
微信關注 | ||
![]() |
技術專題 | 更多>> | |
![]() |
技術專題之EMC |
![]() |
技術專題之PCB |