對ARM緊致內存TCM的理解

ARM的ram包括靜態ram, 動態ram, TCM---緊耦合內存(TCM: Tightly Coup ledMemories) 。
TCM是一個固定大小的RAM, 緊密地耦合至處理器內核, 提供與cache相當的性能, 相比于cache的優點是, 程序代碼可以精確地控制什么函數或代碼放在哪兒(RAM里) 。 當然TCM永遠不會被踢出主存儲器, 因此, 他會有一個被用戶預設的性能, 而不是象cache那樣是統計特性的性能提高 。
TCM對于以下幾種情況的代碼是非常有用、也是需要的:可預見的實時處理(中斷處理)、時間可預見(加密算法)、避免cache分析(加密算法)、或者只是要求高性能的代碼(編解碼功能) 。 隨著cache大小的增加以及總線性能的規模, TCM將會變得越來越不重要, 但是他提供了一個讓你權衡的機會
【對ARM緊致內存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