Yazıda Zynq 7000 SoC baz alınmıştır. Diğer SoC’larda core sayısı, cache boyutu vb. özellikler farklılık gösterebilir.
İki Cortex-A9 işlemcisi kendilerine özel olarak 32KB L1 Instruction ve Data Cache’lerine sahiptir.
L1 Instrucion Cache (I-Cache), Cortex-A9 işlemcisine instruction akışını sağlamaktan sorumludur. L1 I-Cache, virtually indexed ve phsically tagged ‘dir.
L1 Data Cache(D-Cache) Cortex-A9 tarafından kullanılan datayı tutmaktan sorumludur.
D-Cache’e ait özellikler:
- Physically indexed ve Physically tagged
- Non-Block’ingdir. Yani Load/Store komutları, cache hit(cache ıskalama)’lardan kaynaklanan harici memoryden veriyi alma durumlarından kaynaklanan işlemler sırasında da devam eder.
- Cortex-A9 işlemcisi 4 adet 64-bit slota sahip store buffer’a sahiptir.
- APU Data cache’i MESI algoritmasınu kullanarak full snoop coherency özelliğine sahiptir.
- Sadece write-back/write-allocate özelliğine sahiptir. Write-through ve write-back/no-write-allocate özelliklerine sahip değildir.
- L1 D-Cache’i L2 cache’ine göre ‘Exclusive Operation’ özelliğine sahiptiir. Yani bir cache line sadece L1 ya da L2 cache’inde doğru(valid) durumundadır, aynı anda iki seviyede de valid durumda olamaz. L1 cache’ine bir line-fill yapıldığında bu line-fill L2 cache’inde karşılık geldiği yerin yanlış(invalid) olarak işaretlenmesine sebep olur. Exclusive Operation varsayılan olarak kapalıdır. Cache’den yararlanmayı arttırır ve güç tüketimini azaltır.
I ve D Cache’lerin ortak özellikleri:
- System Control Coprocessor kullanılarak, bağımsız olarak pasif duruma getirilebilirler.
- Line Length’leri 32 bytetır.
- 4-Way set-associative
- L1 Cache’leri 4KB, 64KB, 1MB ve 16MB virtual memory page desteği sunmaktadır.
- L1 cachelerinin ikisi de ‘lock-down’ özelliğine sahip değildir.
- CPU reset işleminde, L1 cachelerinin içerikleri güvenlik sağlanması sebebiyle temizlenir.
- Instruction ve data cacheleri ve BTAC, kullanılmadan önce invalidate edilmelidir.
L1 Cache’inin ilklendirilmesi
L1 cache’lerini kullanmadan önce I ve D cache’leri ve BTAC invalidate edilmelidir.
L1 cache’ini ilklendirme adımları:
TLB’lerin invalidate edilmesi
- mcr p15, 0, r0, c8, c7, 0 (r0 = 0)
I-Cache invalidate edilmesi
- mcr p15, 0, r0, c7, c5, 0 (r0 = 0)
Branch Predictor Array’ın invalidate edilmesi
- mcr p15, 0, r0, c7, c5, 6
D-Cache invalidate edilmesi
- mcr p15, 0, r11, c7, c14, 2 (bütün set/way ‘ler için yapılmalı)
MMU ilklendirmesi
I ve D-Cache’lerinin aktifleştirilmesi
- mcr p15, 0, r0, c1, c0, 0 (r0 = 0x1004)
Senkronizasyon bariyeri
- dsb (MMU’nun çalışmasını sağlar)
- isb (Prefetch buffer’ını flush’lar)