Etiket arşivi: arm

Memory Düzeni

Memory Düzen Modeli

Cortex-A9 mimarisi sistemde yer alan memory map edilmiş aygıtlara destek sağlamak için 3 farklı memory özelliği sunmaktadır. Bunlar

  • Normal
  • Device
  • Strongly-Ordered

 

 

Device and Strongly Ordered

Strongly Ordered ve Device tipi hafıza alanlarına erişim aynı memory düzeni modeline sahiptir. Sistem çevre birimleri (peripherals) strongly ordered ve device memory tipinde olmaktadır. Bu hafızalara erişimler aşağıdaki kurallara sahiptir.

  • Erişimlerin sayısı ve boyutu korunmuştur. Erişimler atomiktir, erişim sırasında bir kesmeye uğramazlar yani.
  • Okuma ve yazma 'lar sistemde yan etkilere sebep olabilir. Erişimler asla cache'lenmez.
  • Erişimler hizasız olamaz. (Türkçe yazınca değişik hissediyorum, unaligned olamaz yani)
  • Device Memory'sine erişim sırasının program sırasına göre olduğu garantilidir. Bu garanti sadece aynı çevre birimi yada memory alanı için geçerlidir.
  • Cortex-A9 işlemcisi normal memory erişimlerini strongly ordered ya da device memory erişimi olarak düzenleyebilir.

Device memory ile Strongly Ordered memory arasındaki farklar

  • Strongly ordered memory alanına gönderilen bir yazma komutu, sadece çevre birimine ya da memory bileşenine yazma komutu ulaştığında tamamlanabilir.
  • Device Memory'isine yapılacak olan bir yazma, ilgili yazma komutunun kullanıldığı çevre birimi ya da memory alanına ulaşmadan önce tamamlanabilir.

Normal Memory

Normal memory, hafıza sisteminin büyük bölümünü kapsar. Bütün RAM ve ROM aygıtları normal memory olarak kabul edilir. İşlemci tarafından işlenecek olan bütün komutlar normal memory alanında olmalıdır. Mimarisel olarak kodun device ya da strongly-ordered memory alanlarında olmasına izin verilmez.

  • İşlemci bazı okuma ve yazma erişimlerini tekrarlayabilir.
  • İşlemci hiçbir yan etki olmadan (MMU tarafından izin verilen ayarlar çerçevesinde) prefetch ve spekülatif erişim yapabilir.
  • Hizasız (Unaligned) erişimler yapılabilir.
  • Çoklu erişimler işlemci donanımı tarafından daha az sayıda fakat daha büyük boyuttaki erişimlere çevrilebilir. Örneğin birden fazla byte yazma işlemi tek bir double-word yazma işlemine çevrilebilir.

 

Memory Nitelikleri

Memory tiplerine ek olarak, memory nitelikleri de bulunmaktadır. Bunlara değinecek olursak:

Shareability

Cacheability

 

 

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 sorumldur.

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)