ARM Cortex-A9 L1 Cache

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)

Leave a Reply

Your email address will not be published. Required fields are marked *