本文主要翻譯自 Arm Cortex-M7 Processor Technical Reference Manual r1p2 其中章節 Memory System / L1 caches / Store Buffer 。 Store Buffer Cache中的數據,在寫入memory或 AXIM ...
本文主要翻譯自 Arm Cortex-M7 Processor Technical Reference Manual r1p2 其中章節 Memory System / L1 caches / Store Buffer 。
Store Buffer
Cache中的數據,在寫入memory或 AXIM 匯流排之前,先存放在store buffer中。store buffer有四個存儲單元,每個存儲單元由一個64bit數據存儲及一個32bit地址存儲組成。來自data-side的寫請求都會存放在store buffer中,但有兩個例外:寫往TCM 或 AHBP介面的數據。
註:名詞解釋 淺談嵌入式MCU CPU內核之ARM Cortex-M7內核高性能(Dual Issue ISA--雙髮指令)實現要點解析
- AXIM :高性能內部匯流排互聯矩陣。ARM Cortex-M7內核配備了ARM第4代的AMBA匯流排矩陣--AXIM,給MCU/SOC提供64-bit的存儲器和外設匯流排互聯能力,通過AXIM訪問存儲器(SRAM和Flash)和外設時可以配置內核的MPU使能I-Cache和D-Cache,從而加速訪問,進一步提高系統效率。
- AHBP :高性能外設介面。ARM Cortex-M7內核還為高性能低延遲的外設連接預留了一個32-bit的AHBP介面:通過該介面擴展的外設,讀寫訪問時無需經過系統匯流排互聯矩陣,從而保證了高性和低延遲。
Store buffer merging
- 來自同一個cache line的寫請求,被合併到同一個store buffer單元。store buffer寫請求合併只適合於帶有普通memory屬性的寫請求。
- 如果是強記憶體序(怎麼知道是強記憶體序??),或者是device memory屬性的記憶體頁,則不會發生store buffer寫請求合併。
- 遇到強記憶體序寫或者device memory屬性記憶體,會首先將store buffer中的數據全部寫回,即清空了store buffer中的數據。
Store buffer 寫請求轉發
在指定條件下,store buffer會將寫請求轉給 Cache控制器,AXIM匯流排等(即跳過store buffer,交由cache控制器,AXIM匯流排)。
- 比如針對 Non-Cacheable標記的數據,write-through 類型的cache,等操作,交由AXIM匯流排。
比較難理解,不翻譯
Store buffer draining
有些情況下,需要先等store buffer中的數據全部寫回。有些情況下,需要等該單元的數據寫回。
需要等全部的情形:
- cache維護操作;
- 共用記憶體(Shared Memory)的獨占操作;
- DMB, DSB指令;
- 上面提到的強記憶體序地址,或device memory標記的數據。
定義memory maps的屬性許可權等
#define ioremap(addr, size) __ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRE))
#define ioremap_nocache(addr, size) __ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRE))
#define ioremap_wc(addr, size) __ioremap((addr), (size), __pgprot(PROT_NORMAL_NC))
#define ioremap_wt(addr, size) __ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRE))
ARM memory models
- 介紹了 devices memory等等。Armv8-A memory model cnblog附件
- [譯]硬體記憶體模型
- 一步一圖帶你深入理解 Linux 物理記憶體管理