Flash bellek bekleme durumları nedir?


10

Freescale bir PowerPC mikrodenetleyici kullanıyorum. Veri sayfasındaki flash bellek modülünde, "flash bellek erişiminin bekleme durumları" sayısı yapılandırılabilir.

Aşağıdaki veri sayfasının bir kısmı sorumu yükseltti, PFlash modülü kayıtlarının kayıt açıklamasından alındı:

Bu alan, PFlash'ın çalışma frekansına ve PFlash'ın gerçek okuma erişim süresine karşılık gelen bir değere ayarlanmalıdır. Daha yüksek çalışma frekansları, düzgün Flash işlemi için bu alan için sıfırdan farklı ayarlar gerektirir.
0 MHz, <23 MHz, gerekli bekleme durumları = 0 -
23 MHz, <45 MHz, bekleme durumları gerekli = 1 -
45 MHz, <68 MHz, bekleme durumları gerekli = 2 -
68 MHz, <90 MHz, bekleme durumları gerekli = 3 ---

(PFlash Platform Flash denetleyici modülüdür)

İşlemcinin flaştan daha hızlı olduğunu anlıyorum, bu yüzden bekleme durumları tanıtıldı. Anlamadığım şey şudur: İşlemci flaştan daha hızlıysa, işlemci flaşı yavaşlatması gereken işlemcidir, ancak yukarıdaki paragraf tam tersini söyler (veya bunu anlamadım mı?), Pflash yüksek frekanslarda çalıştırılması durumunda, ek bekleme durumları ekleyerek yavaşlatmamız gerektiğini söylüyor!

Benim anlayışımdaki sorun ne?

Teşekkürler


1
Doğru anladıysam, farklı hızlara ayarlanabilen kontrolör; bu yüzden gerçek Flash belleğin mevcut verilere sahip olmasını beklemek zorundadır.
clabacchio

Yanıtlar:


8

StevenVh'un cevabını yükseltmek için, bir giriş sinyali verildiğinde, herhangi bir mantık türü, bir çıkış sinyali üretmek için biraz zaman alacaktır; bellek genellikle diğer mantığa göre çok yavaştır. Genellikle, çıkış sinyalinin belirli bir süre içinde geçerli olacağına dair bir garanti olacaktır, ancak bu kadar. Özellikle, sinyalin bu aralık içinde birkaç kez değişmesi mümkündür ve bu aralığın bitiminden önce sinyalin nihai "doğru" değerine ulaştığına dair bir gösterge olmayacaktır.

Tipik bir mikrodenetleyici veya mikroişlemci bir bellek baytını (veya sözcüğünü veya herhangi bir birimini) okuduğunda, bir adres oluşturur ve bir süre sonra belleğin çıkış değerine bakar ve buna göre hareket eder. Denetleyicinin adresi ürettiği zaman ile bellekten alınan değere baktığı zaman arasında, bellekten çıkış sinyallerinin ne zaman değişip değişmeyeceği önemli değildir. Öte yandan, denetleyiciden baktığında bellekten gelen sinyal son değerine sabitlenmediyse, denetleyici, göründüğü anda çıkmakta olan değeri tutarmış gibi belleği yanlış anlayacaktır. Normalde denetleyici, onunla bir şeyler yapmaya hazır olur olmaz bellekten gelen değere bakar, ancak belleğin değeri hazır olmazsa, bu işe yaramayabilir. Sonuç olarak, birçok denetleyicinin bellekten veri işlemeye hazır olduktan sonra, bellekten çıktının gerçekten geçerli olduğundan emin olmak için biraz daha beklemek seçeneği vardır. Böyle bir gecikmenin eklenmesi, işleri yavaşlatacaktır (denetleyici, bellekteki veriler üzerinde daha erken hareket etmekten mutluluk duyacaktır), ancak işlemin doğruluğunu etkilemeyecektir (işler, diğer zamanlama yükümlülükleri yerine getirilemeyecek kadar yavaşlanmadıkça).


Güzel! Açıkladığınız faydalı ayrıntılar için teşekkür ederiz!
MohamedEzz

1
@MemoryLeaks: Benim için zevkti. Dikkat edilmesi gereken önemli bir nokta, bekleme durumlarının belirtilen sınırların altına düşürülmesinin sistemin daha hızlı çalışmasına neden olacağı, ancak bellekten okunmanın keyfi olarak yanlış veri verebileceği; ayrıca, "keyfi olarak yanlış veri iletmek", "tasarladığınız cihaz müşterinizin eline gelene kadar doğru verileri vermek ve ardından müşterinin size çok kızmasına neden olacak kadar sık ​​sık yanlış veri vermeye başlamak" anlamına gelebilir.
supercat

1
Bu, çok yakından paralel hız aşırtma gibi görünüyor, ancak daha yapılandırılabilir bir seçenek. Bir MCU'yu overclock etmenin ilginç bir yolu.
sherrellbc

1
@supercat, bir soru denetleyici tarafından ne demek işlemci veya bellek denetleyicisi mi?
Mouin

1
@Mouin: Varsa bellek denetleyicisi veya yoksa işlemci.
supercat

9

Bekleme durumları CPU tarafından başlatılan bellek erişim döngüsüne eklenir. Bu yüzden daha yavaş Flash'ı beklemek zorunda olan CPU. Bellek denetleyicisi, CPU'ya bir dizi döngü (0 ila 3) için "hazır değil" sinyalini verir ve bu sırada CPU geçerli durumunda kalır, yani Flash adresini yazmış, ancak henüz verileri okumaz. Yalnızca bellek denetleyicisi "veri hazır" sinyalini verdiğinde, CPU veri yolundan okuyacak ve talimatlarını sürdürecektir (verileri bir kayıt defterine veya RAM'e kilitlemek).


1
Bu ayarı yapılandırarak, bellek denetleyicisine "veri hazır" durumunu tam olarak ne zaman sinyal vereceğini söylüyorum. Hafızaya gerçekten hazır olduğunda "veri hazır" sinyalini vermesini söyleyemez miyim?
MohamedEzz

1
@MemoryLeaks - Bu mümkün ve nadir bulunan asenkron işlemciler tarafından yapılır. Her şeyi bir saat kullanarak senkronize etmek daha yaygın ve daha öngörülebilir. Yani ya bir saat döngüsü gecikmesi (ya da 2 ya da 3) ya da hiçbir şey.
stevenvh

Cevabınız için teşekkürler :) Yani özetlemek gerekirse: Yukarıdaki
sorumdaki açıklama

1
@stevenvh işlemci tam anlamıyla onu bellekten alır bunu asmak yapar, yani tamamen yürütmeyi durdurur mu yoksa bir boru hattı CPU durumunda diğer talimatları yürütür. İşlemci, belleğin hazır olmasını beklerken servis edileceklerine dair kesintilere ne dersiniz?
Miguel Sanchez

3

İşlemcinin bellekte durması gerekebilir, ancak akıllı bir tasarım gerekmez.

Farkında olmadığınız temel teknolojinin seri / sayfa modu erişimi olduğunu düşünüyorum . Bu , bellek erişimlerinin bant genişliğinin işlemci hızına çok yakın olmasını sağlar (ancak> 200MhZ'de çalışan bir Flash tabanlı MCU görmedim, çünkü muhtemelen Flash hala darboğaz)

Ancak, gecikme aynı kalır. Örneğin, kullandığım STM32F4 MCU'lar için #wait states = floor (clockSpeed ​​/ 30MhZ). Bu, saat hızından bağımsız olarak gecikmenin her zaman 33ns olduğu anlamına gelir. Bir deyiş var, "Para bant genişliği alabilir, ama gecikme sonsuza dek ..."

Flash bant genişliği CPU'yu meşgul etmek için yeterli olmasa bile, çalıştırılması beklenen talimatları saklayan ve önceden getiren bir kod önbelleği kolayca tasarlayabilirsiniz. ST'nin STM32F4 MCU'ları (168 MhZ) için bir ipucu var:

ART hızlandırıcı ve 128 bit Flash bellek sayesinde, burada verilen bekleme durumlarının sayısı, Flash hızlandırıcıdan yürütme hızını etkilemez, çünkü ART hızlandırıcısı 0 bekleme durum programı yürütmesine eşdeğer bir performans elde edilmesine izin verir.

Aslında, ifade aynı zamanda seri çekim modunun gerekli olmadığını ve çok geniş bir bellek arayüzünün de yeterli olduğunu göstermektedir. Ancak fikir aynıdır (gecikmeyi gizlemek için paralellik kullanmak). Çipte, kablolar ücretsizdir, bu nedenle 128 bitlik bir bellek mantıklı olacaktır.


Teller bir çipte "serbest" olmaktan uzaktır, genel olarak konuşur, ancak bir bellek dizisi ve bir dizi mandal arasındaki veri yolu genişliğini arttırmak kablo eklemez. Bir çipin 512x512 ızgarası olarak düzenlenmiş 256kbit flash dizisi varsa, 512 sütun 32 bit veriyoluna yoğunlaştırmak için kablolama ve mantık, "yoğunlaşma" kablolarından ve mantığından önce 512 bit genişliğinde bir mandal yerleştirip yerleştirmemeniz gerekir. veya 32 bit genişliğinde bir mandal.
supercat

1
Demek istediğim, harici pinlere kıyasla "özgür". Bu günlerde tel enerjisinin baskın olduğunu ve bu yerin önemli olduğunu biliyorum, bu yüzden bu ifadeyi nitelendireyim. Yapmakta özgürler, ama açmakta özgür değiller!
Yale Zhang

1
"Tel enerjisi" ile ne kastettiğinizden emin değilim, ama uzay perspektifinden bile, büyük otobüsler pahalıdır, ancak bir otobüsün genişliği iki katına çıkarsa kabaca toplam maliyeti yarı yarıya keser.
supercat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.