天天看點

對ARM緊緻記憶體TCM的了解 轉

ARM 的ram包括靜态ram,動态ram,TCM。 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:

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      

注意 TCM區域寄存器配置出來的各個 TCM塊不能相交,否則後果不可預測(會損壞硬體?)。              

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow

ARM 的ram包括靜态ram,動态ram,TCM。 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:

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      

注意 TCM區域寄存器配置出來的各個 TCM塊不能相交,否則後果不可預測(會損壞硬體?)。