本文主要翻譯自 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 物理記憶體管理
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/537973.html
標籤:其他
上一篇:全志V3S 除錯串口更改或關閉
