Was ist der Wartezustand des Flash-Speichers?

10

Ich verwende einen Freescale-PowerPC-Mikrocontroller. Im Flash-Speichermodul im Datenblatt kann die Anzahl der "Wartezustände des Flash-Speicherzugriffs" konfiguriert werden.

Der folgende Teil des Datenblattes hat meine Frage aufgeworfen. Er stammt aus der Registerbeschreibung der PFlash-Modulregister:

Dieses Feld muss auf einen Wert eingestellt werden, der der Betriebsfrequenz des PFlash und der tatsächlichen Lesezugriffszeit des PFlash entspricht. Höhere Betriebsfrequenzen erfordern Einstellungen ungleich Null für dieses Feld für einen ordnungsgemäßen Flash-Betrieb.
0 MHz, <23 MHz, erforderliche Wartezustände = 0 -
23 MHz, <45 MHz, erforderliche Wartezustände = 1 -
45 MHz, <68 MHz, erforderliche Wartezustände = 2 -
68 MHz, <90 MHz, Wartezustände erforderlich = 3 ---

(PFlash ist ein Platform Flash-Controller-Modul)

Ich verstehe, dass der Prozessor schneller als der Flash ist, deshalb werden Wartezustände eingeführt. Was ich nicht verstehe, ist: Wenn der Prozessor schneller als Flash ist, dann ist der Prozessor derjenige, der verlangsamt werden muss, nicht der Flash, aber der obige Absatz sagt das Gegenteil (oder habe ich das nicht verstanden?), Es sagt, wenn der Pflash mit hohen Frequenzen betrieben wird, müssen wir ihn verlangsamen, indem wir zusätzliche Wartezustände hinzufügen !!

Was ist los mit meinem Verständnis?

Vielen Dank

MohamedEzz
quelle
1
Wenn ich richtig verstanden habe, ist der Controller, der auf verschiedene Geschwindigkeiten eingestellt werden kann; Es muss also warten, bis im eigentlichen Flash-Speicher die Daten verfügbar sind.
Clabacchio

Antworten:

8

Um die Antwort von Stevenvh zu verstärken, benötigt jede Art von Logik, wenn ein Eingangssignal gegeben wird, einige Zeit, um ein Ausgangssignal zu erzeugen. Der Speicher ist im Vergleich zu anderen Logikfunktionen oft sehr langsam. Oft gibt es eine Garantie dafür, dass das Ausgangssignal innerhalb einer bestimmten Zeit gültig wird, aber das war's. Insbesondere ist es möglich, dass sich das Signal innerhalb dieses Intervalls mehrmals ändert, und es gibt vor dem Ende dieses Intervalls keinen Hinweis darauf, dass das Signal seinen endgültigen "korrekten" Wert erreicht hat.

Wenn ein typischer Mikrocontroller oder Mikroprozessor ein Byte (oder ein Wort oder eine beliebige Einheit) des Speichers liest, generiert er eine Adresse und betrachtet einige Zeit später den vom Speicher ausgegebenen Wert und wirkt darauf ein. Zwischen der Zeit, zu der der Controller die Adresse generiert, und der Zeit, zu der er den Wert aus dem Speicher betrachtet, ist es egal, wann oder ob sich die Ausgangssignale aus dem Speicher ändern. Wenn sich das Signal aus dem Speicher zum Zeitpunkt des Betrachtens durch den Controller nicht auf seinen endgültigen Wert stabilisiert hat, interpretiert der Controller den Speicher als falsch, da er den Wert gehalten hat, der zum Zeitpunkt der Anzeige ausgegeben wurde. Normalerweise prüft der Controller den Wert aus dem Speicher, sobald er bereit ist, etwas damit zu tun. Wenn der Wert des Speichers dann nicht bereit wäre, funktioniert dies möglicherweise nicht. Folglich, Viele Controller haben die Möglichkeit, etwas länger zu warten, nachdem sie bereit sind, Daten aus dem Speicher zu verarbeiten, um sicherzustellen, dass die Ausgabe aus dem Speicher tatsächlich gültig ist. Beachten Sie, dass das Hinzufügen einer solchen Verzögerung die Daten verlangsamt (der Controller hätte gerne früher auf die Daten aus dem Speicher reagiert), die Richtigkeit des Betriebs jedoch nicht beeinträchtigt (es sei denn, die Daten werden so stark verlangsamt, dass andere zeitliche Verpflichtungen nicht erfüllt werden können).

Superkatze
quelle
Nett! Vielen Dank für die hilfreichen Details, die Sie erklärt haben!
MohamedEzz
1
@ MemoryLeaks: Es war mir ein Vergnügen. Es ist wichtig zu beachten, dass das Reduzieren der Wartezustände unter die angegebenen Grenzwerte dazu führt, dass das System schneller ausgeführt wird. Lesevorgänge aus dem Speicher können jedoch willkürlich zu falschen Daten führen. Darüber hinaus kann "willkürlich falsche Daten liefern" bedeuten "korrekte Daten liefern, bis das von Ihnen entworfene Gerät in den Händen Ihres Kunden ist, und dann häufig genug falsche Daten liefern, um den Kunden sehr sauer auf Sie zu machen".
Supercat
1
Dies scheint sehr eng parallel zu übertakten, ist jedoch eher eine konfigurierbare Option davon. Interessante Möglichkeit, eine MCU vielleicht zu übertakten.
Sherlellbc
1
@supercat, Eine Frage, was unter Controller zu verstehen ist, ist der Prozessor oder der Speichercontroller?
Mouin
1
@Mouin: Der Speichercontroller, falls vorhanden, oder der Prozessor, falls nicht vorhanden.
Supercat
9

Wartezustände werden zu dem von der CPU initiierten Speicherzugriffszyklus hinzugefügt. Es ist also in der Tat die CPU, die auf den langsameren Flash warten muss. Der Speichercontroller signalisiert der CPU für einige Zyklen (0 bis 3) "nicht bereit", und währenddessen bleibt die CPU in ihrem aktuellen Zustand, dh sie hat die Flash-Adresse geschrieben, aber die Daten noch nicht gelesen. Erst wenn der Speichercontroller "Daten bereit" signalisiert, liest die CPU vom Datenbus und setzt ihren Befehl fort (Einrasten der Daten in ein Register oder in den RAM).

stevenvh
quelle
1
Wenn ich diese Einstellung konfiguriere, sage ich dem Speichercontroller, wann er genau "Daten bereit" signalisieren soll. Kann ich dem Speicher nicht einfach sagen, dass er "Daten bereit" signalisieren soll, wenn er tatsächlich bereit ist?
MohamedEzz
1
@MemoryLeaks - Das ist möglich und wird von asynchronen Prozessoren ausgeführt, die selten sind. Es ist üblicher und vorhersehbarer, alles mit einer Uhr zu synchronisieren. Es ist also entweder eine Taktverzögerung (oder 2 oder 3) oder nichts.
Stevenvh
Vielen Dank für Ihre Antwort :)
Um
1
@stevenvh Hängt der Prozessor buchstäblich auf, dass er die Daten aus dem Speicher empfängt. Ich meine, stoppt er die Ausführung vollständig oder würde er im Falle einer Pipeline-CPU andere Anweisungen ausführen. Was ist mit Interrupts? Ich denke, sie werden gewartet, während die CPU darauf wartet, dass der Speicher bereit ist.
Miguel Sanchez
3

Der Prozessor muss möglicherweise im Speicher stehen bleiben, ein cleveres Design jedoch nicht.

Ich denke, die Schlüsseltechnologie, die Sie nicht kennen, ist der Burst- / Seitenmodus-Zugriff . Dadurch kann die Bandbreite der Speicherzugriffe sehr nahe an der Prozessorgeschwindigkeit liegen (aber wahrscheinlich ist Flash immer noch der Engpass, da ich noch nie eine Flash-basierte MCU mit> 200 MHz gesehen habe).

Die Latenz bleibt jedoch gleich. Für die von mir verwendeten STM32F4-MCUs lautet #wait beispielsweise = floor (clockSpeed ​​/ 30MhZ). Das bedeutet, dass die Latenz unabhängig von der Taktrate immer 33 ns beträgt. Es gibt ein Sprichwort: "Geld kann Bandbreite kaufen, aber Latenz ist für immer ..."

Selbst wenn die Flash-Bandbreite nicht ausreicht, um die CPU zu beschäftigen, können Sie problemlos einen Code-Cache entwerfen, in dem Anweisungen gespeichert und vorab abgerufen werden, deren Ausführung erwartet wird. ST hat einen Hinweis dazu für seine STM32F4-MCUs (168 MHz):

Dank des ART-Beschleunigers und des 128-Bit-Flash-Speichers wirkt sich die hier angegebene Anzahl von Wartezuständen nicht auf die Ausführungsgeschwindigkeit des Flash-Speichers aus, da mit dem ART-Beschleuniger eine Leistung erzielt werden kann, die der Ausführung eines 0-Wartezustands-Programms entspricht.

Tatsächlich deutet die Aussage auch darauf hin, dass der Burst-Modus nicht erforderlich ist und dass auch eine sehr breite Speicherschnittstelle ausreicht. Die Idee ist jedoch dieselbe (Parallelität verwenden, um die Latenz zu verbergen). Auf dem Chip sind die Kabel frei, sodass ein 128-Bit-Speicher sinnvoll wäre.

Yale Zhang
quelle
Drähte sind auf einem Chip im Allgemeinen alles andere als "frei", aber durch Erhöhen der Busbreite zwischen einem Speicherarray und einem Satz von Latches werden keine Drähte hinzugefügt. Wenn ein Chip ein 256-kbit-Flash-Array hat, das als 512x512-Gitter organisiert ist, ist die Verkabelung und Logik zum Kondensieren von 512 Spalten zu einem 32-Bit-Bus erforderlich, unabhängig davon, ob ein 512-Bit-breiter Latch vor den "kondensierenden" Drähten und der Logik platziert wird oder ein 32 Bit breiter Latch nach ihnen.
Supercat
1
Ich meine, sie sind "frei" im Vergleich zu externen Pins. Ich weiß, dass heutzutage die Draht-Energie dominiert und dass die Lokalität wichtig ist. Lassen Sie mich diese Aussage näher erläutern. Sie sind frei zu machen, aber nicht frei einzuschalten!
Yale Zhang
1
Ich bin mir nicht sicher, was Sie unter "Draht-Energie" verstehen, aber selbst aus Platzgründen sind große Busse teuer, aber wenn die doppelte Breite eines Busses seine Länge ungefähr halbiert, bleiben die Gesamtkosten ungefähr gleich.
Supercat