Welche Bedeutung hat diese Zeile? „Memory-mapped, cached view of external QSPI flash. Der Cache ist mit 32 KB mit 4-Wege-Assoziativität angegeben.“

Speicherabgebildete, zwischengespeicherte Ansicht des externen QSPI-Flash. Der Cache ist mit 32 KB mit 4-Wege-Assoziativität angegeben.

Bedeutet das, dass mein externer QSPI-Flash nur 32 KB groß ist oder auf 32 KB Speicher abgebildet wurde?

Bedeutet die Cache-Ansicht, dass bei wiederholtem Lesen die Daten im Prozessor zwischengespeichert werden und nicht tatsächlich auf den Speicher zugegriffen wird?

Antworten (2)

Die Verwirrung kommt wahrscheinlich von der Formulierung: "speicherabgebildete, zwischengespeicherte Ansicht" Die Tatsache, dass es sich um eine speicherabgebildete Ansicht handelt, hat nichts damit zu tun, dass es zwischengespeichert ist. Die Größe des Speichermappings ist unabhängig von der Größe des Caches.

Also, ich werde es für Sie aufschlüsseln:

Speicherabgebildet

Bedeutet, dass Sie direkt auf den Inhalt des externen Speichers zugreifen können, indem Sie den Adressraum des Hauptspeichers (an einer bestimmten Adresse) lesen/schreiben. Impliziert normalerweise auch, dass Sie, wenn der externe Speicher ausführbaren Code enthält, diesen Code einfach durch Verzweigen ausführen können: Sie müssen den Code vor dem Verzweigen nicht in den internen Speicher kopieren. Dies wird durch die MCU erreicht, die intern jeden Zugriff auf diesen Teil des Speichers in die erforderlichen QSPI-Befehle übersetzt, um den externen Flash im laufenden Betrieb zu lesen. An dieser Stelle bedeutet dies nicht, dass es einen Cache gibt.

Zwischengespeichert

Bedeutet, dass aus diesem Teil des Speichers gelesene Daten in einem kleineren Zwischenspeicherbereich (nicht direkt zugänglich) platziert werden, den die MCU zuerst nachschlagen wird, wenn erneut auf den externen Speicher zugegriffen werden muss. Wenn auf dieselben Daten zweimal zugegriffen wird, muss auf diese Weise nicht erneut auf den externen Speicher zugegriffen werden. Die Daten aus dem Cache werden abgerufen, was viel schneller ist.

Dies ist in der Tat sehr nützlich für speicherabgebildetes QSPI. Die QSPI-Schnittstelle ist viel langsamer als die CPU: Jeder Lese-/Schreibvorgang muss in Befehle übersetzt werden, die seriell auf einigen Signalleitungen gesendet werden, was viel Overhead hinzufügt. Um diesen Overhead zu reduzieren, versuchen Sie normalerweise, mehrere Bytes für jeden QSPI-Zugriff zu lesen und sie in einem Cache zu speichern, damit Sie es bereit haben, wenn der nächste Lesevorgang das benachbarte Byte adressiert (was wahrscheinlich ist).

32kB

Hier ist dies die Größe des Caches, nicht die Größe der Speicherkarte. Die Größe der Memory-Map ist normalerweise groß genug für die gesamte Größe des externen Speichers (siehe detaillierte Spezifikationen).

4-Wege-Assoziativität

So ist der Cache intern organisiert. Der Cache ist viel kleiner als der externe Speicher. Der naive Weg, einen Cache zu implementieren, wäre, alle Bytes, auf die kürzlich zugegriffen wurde, zusammen mit ihren entsprechenden Adressen zu speichern und bei nachfolgenden Zugriffen den gesamten Cache zu überprüfen, ob die Adresse eines vorhandenen Bytes der Adresse entspricht, auf die zugegriffen wurde. Das ist extrem ineffizient. Für jedes Byte müssten Sie die Adresse speichern, was die erforderliche Größe für den Cache mit fünf multipliziert (unter der Annahme von 32-Bit-Adressen: Sie benötigen für jedes Byte den Datenbytewert plus vier Bytes für die entsprechende Adresse) und Bei jedem Zugriff müssen Sie die Adresse mit 32768 möglichen Werten vergleichen, um zu prüfen, ob sie sich bereits im Cache befindet oder nicht.

Also, hier ist, wie es gemacht wird:

  • Erstens ist der Cache in Zeilen von N Bytes organisiert (z. B. 16 oder 32 Bytes - Beachten Sie, dass die Cache-Zeilengröße in Ihrem Fall nicht angegeben ist). Sie speichern die Adressen für die gesamten Cache-Zeilen, nicht für jedes Byte, was viel Platz spart.
  • Dann können nicht alle möglichen Adressen irgendwo im Cache gespeichert werden. Wenn Sie auf den Cache zugreifen, nehmen Sie einen Teil der Adresse, und dies gibt Ihnen den Index eines "Cache-Sets". Jedes Cache-Set kann (in Ihrem Fall) 4 Cache-Zeilen enthalten. Wenn Sie überprüfen, ob sich die Daten im Cache befinden, bedeutet dies, dass Sie nur diese 4 Cache-Zeilenadressen überprüfen müssen, da Sie wissen, dass sie, wenn sie dort sind, zwangsläufig in diesem Satz enthalten sein werden. Dadurch wird die Komplexität der Cache-Struktur stark reduziert, auf Kosten einer geringeren Flexibilität beim Speichern der Daten (was eine möglicherweise niedrigere Cache-Trefferrate bedeutet, abhängig von den Speicherzugriffsmustern).

Das ist die Cache-Assoziativität: Die Anzahl der Cache-Zeilen pro Satz. Dies gibt einen Hinweis auf die Wahrscheinlichkeit, dass Sie Daten im Cache abrufen können, wenn sie zuvor gelesen wurden. Je größer die Assoziativität, desto besser, aber es macht den Cache komplexer und teurer in der Herstellung. Und irgendwann sind die Vorteile es nicht einmal mehr wert. 4 ist nicht schlecht (weshalb sie stolz damit werben).

schön! Dies sollte die akzeptierte Antwort sein.
Gut gemacht, Kumpel! Viel mehr als ich geschrieben hätte.+1
Ich weiß, dass Kommentare dafür nicht verwendet werden sollen, aber danke! Das sind viel mehr Informationen, als ich gefragt habe, und es war zu hilfreich.
Eine sehr gute Antwort. Mit einer Ausnahme: Memory Mapped QSPI kann normalerweise nicht direkt über die Memory Map geschrieben werden.

Der Satz ist ziemlich eindeutig:

Der Cache ist mit 32 KB mit 4-Wege-Assoziativität angegeben.

So,

Bedeutet das, dass mein externer QSPI-Flash nur 32 KB groß ist oder auf 32 KB Speicher abgebildet wurde?

Weder. Der Cache ist 32 kB groß (nicht Kb, das ist Kelvinbit! Achten Sie auf Ihre Großschreibung!).

Bedeutet die Cache-Ansicht, dass bei wiederholtem Lesen die Daten im Prozessor zwischengespeichert werden und nicht tatsächlich auf den Speicher zugegriffen wird?

Nun, siehe Wikipedia über Caches. Ja, ein wiederholtes Lesen innerhalb der gecachten Regionen ruft die Informationen aus dem Cache ab. Das macht ein Cache.

Nein, dieser Cache ist nicht unbedingt Teil des Prozessors, sondern der Flash-Controller-Peripherie.

Gute Antwort. Aber während wir bei der Notation pingelig sind, der Cache ist auch nicht 32 kB (32000 Bytes), sondern 32 KiB (32 * 1024 Bytes).
@wjl KB und KiB haben beide die gleiche Bedeutung. KB ist aber schon viel länger im Einsatz. Das Präfix k bedeutet 1000. Die Präfixe K und Ki bedeuten beide 1024.