Che cosa sono gli stati di attesa della memoria flash?


10

Sto usando un microcontrollore PowerPC freescale. Nel modulo di memoria flash nel foglio dati è configurabile il numero di "stati di attesa dell'accesso alla memoria flash".

La parte seguente del foglio dati ha sollevato la mia domanda, è tratta dalla descrizione del registro dei registri del modulo PFlash:

Questo campo deve essere impostato su un valore corrispondente alla frequenza operativa del PFlash e al tempo di accesso in lettura effettivo del PFlash. Frequenze operative più elevate richiedono impostazioni diverse da zero per questo campo per il corretto funzionamento di Flash.
0 MHz, <23 MHz, stati di attesa richiesti = 0 ---
23 MHz, <45 MHz, stati di attesa richiesti = 1 ---
45 MHz, <68 MHz, stati di attesa richiesti = 2 ---
68 MHz, <90 MHz, stati di attesa richiesti = 3 ---

(PFlash è il modulo controller Platform Flash)

Capisco che il processore è più veloce del flash, ecco perché vengono introdotti gli stati di attesa. Quello che non capisco è: se il processore è più veloce del flash, allora il processore è quello che deve essere rallentato non il flash, ma il paragrafo sopra dice il contrario (o non l'ho capito?), dice che nel caso in cui il Pflash funzioni con alte frequenze, allora dobbiamo rallentarlo aggiungendo ulteriori stati di attesa !!

Cosa c'è che non va nella mia comprensione?

Grazie


1
Se ho capito bene, è il controller che può essere impostato su diverse velocità; quindi deve attendere che la memoria Flash effettiva abbia i dati disponibili.
clabacchio

Risposte:


8

Per amplificare la risposta di Stevenvh, ogni tipo di logica, quando viene dato un segnale di input, impiegherà del tempo per produrre un segnale di output; la memoria è spesso molto lenta rispetto ad altre logiche. Spesso, ci sarà una garanzia che il segnale di uscita diventerà valido entro un certo periodo di tempo, ma il gioco è fatto. In particolare, è possibile che il segnale possa cambiare più volte all'interno di quell'intervallo e non ci saranno indicazioni, prima della fine di quell'intervallo, che il segnale abbia raggiunto il suo valore "corretto" finale.

Quando un tipico microcontrollore o microprocessore legge un byte (o una parola, o qualunque unità) di memoria, genera un indirizzo e, qualche tempo dopo, osserva il valore emesso dalla memoria e agisce su di esso. Tra il momento in cui il controller genera l'indirizzo e il tempo in cui osserva il valore dalla memoria, non importa quando o se i segnali di uscita dalla memoria cambiano. D'altra parte, se il segnale dalla memoria non si è stabilizzato al suo valore finale nel momento in cui il controller lo guarda, il controller interpreterà male la memoria poiché ha conservato qualunque valore fosse emesso nel momento in cui appariva. Normalmente il controller guarderebbe il valore dalla memoria non appena fosse pronto a fare qualcosa con esso, ma se il valore della memoria non fosse pronto, allora potrebbe non funzionare. Di conseguenza, molti controller hanno un'opzione per attendere un po 'di più dopo essere pronti a elaborare i dati dalla memoria, per garantire che l'output dalla memoria sia effettivamente valido. Si noti che l'aggiunta di tale ritardo rallenterà le cose (il controller sarebbe stato felice di agire prima sui dati dalla memoria), ma non influirà sulla correttezza del funzionamento (a meno che le cose non siano rallentate così tanto da non poter adempiere ad altri obblighi di temporizzazione).


Bello! Grazie per i dettagli utili che hai spiegato!
MohamedEzz,

1
@MemoryLeaks: piacere mio. Una cosa importante da notare è che la riduzione degli stati di attesa al di sotto dei limiti specificati farà funzionare il sistema più velocemente, ma le letture dalla memoria possono produrre arbitrariamente dati errati; inoltre, "produrre in modo arbitrario dati errati" può significare "fornire dati corretti fino a quando il dispositivo che hai progettato non è nelle mani del tuo cliente, e quindi iniziare a produrre dati errati abbastanza spesso da far arrabbiare il cliente con te".
supercat,

1
Questo sembra molto strettamente parallelo all'overclocking, ma più di una sua opzione configurabile. Forse è un modo interessante per overcloccare un MCU.
Sherrellbc,

1
@supercat, Una domanda che cosa si intende per controller è il processore o il controller di memoria?
Mouin,

1
@Mouin: il controller di memoria se ce n'è uno o il processore se non lo è.
supercat

9

Gli stati di attesa vengono aggiunti al ciclo di accesso alla memoria avviato dalla CPU. Quindi è davvero la CPU che deve attendere il flash più lento. Il controller di memoria segnala "non pronto" alla CPU per un numero di cicli (da 0 a 3), e mentre lo fa la CPU rimane nel suo stato attuale, ovvero dopo aver scritto l'indirizzo Flash, ma non ancora leggendo i dati. Solo quando il controller di memoria segnala "dati pronti" la CPU leggerà dal bus dati e continuerà le sue istruzioni (bloccando i dati in un registro o nella RAM).


1
Quindi, configurando tale impostazione, sto dicendo al controller di memoria quando segnalare esattamente "dati pronti". Non posso semplicemente dire alla memoria di segnalare "dati pronti" quando in realtà è pronta?
MohamedEzz,

1
@MemoryLeaks - Questo è possibile ed è fatto da processori asincroni, che sono rari. È più comune e più prevedibile sincronizzare tutto usando un orologio. Quindi è un ritardo del ciclo di clock (o 2 o 3) o niente.
Stevenvh,

Grazie per la risposta :) Quindi, per riassumere: la descrizione nella mia domanda sopra significa che ritarderà la "CPU" e non il controller Flash
MohamedEzz,

1
@stevenvh fa letteralmente riagganciare il processore, riceve i dati dalla memoria, intendo che interrompe completamente l'esecuzione o esegue altre istruzioni nel caso di una CPU pipeline. Che dire degli interrupt immagino che verrebbero revisionati mentre la CPU sta aspettando che la memoria sia pronta?
Miguel Sanchez,

3

Potrebbe essere necessario che il processore si blocchi sulla memoria, ma non è necessario un design intelligente.

Penso che la tecnologia chiave di cui non sei a conoscenza sia l' accesso alla modalità burst / page . Ciò consente alla larghezza di banda degli accessi alla memoria di essere molto vicini alla velocità del processore (ma probabilmente Flash è ancora il collo di bottiglia poiché non ho mai visto un MCU basato su Flash che funziona a> 200MhZ)

comunque, il latenza rimane la stessa. Ad esempio, per le MCU STM32F4 che sto usando, #wait states = floor (clockSpeed ​​/ 30MhZ). Ciò significa che la latenza è sempre di 33 ns, indipendentemente dalla velocità di clock. C'è un detto: "Il denaro può comprare la larghezza di banda, ma la latenza è per sempre ..."

Anche se la larghezza di banda di Flash non era sufficiente per mantenere occupata la CPU, è possibile progettare facilmente una cache di codice che memorizza e precarica le istruzioni che dovrebbero essere eseguite. ST ha un suggerimento a riguardo per i loro MCU STM32F4 (168 MhZ):

Grazie all'acceleratore ART e alla memoria Flash a 128 bit, il numero di stati di attesa indicati qui non influisce sulla velocità di esecuzione dalla memoria Flash poiché l'acceleratore ART consente di ottenere prestazioni equivalenti all'esecuzione del programma 0 stati di attesa.

In realtà, l'affermazione suggerisce anche che la modalità burst non è necessaria e che è anche sufficiente un'interfaccia di memoria molto ampia. Ma l'idea è la stessa (usando il parallelismo per nascondere la latenza). Su chip, i fili sono liberi, quindi una memoria a 128 bit avrebbe senso.


I cavi sono tutt'altro che "liberi" su un chip, in generale, ma aumentando la larghezza del bus tra un array di memoria e una serie di chiavistelli non si aggiungono fili. Se un chip ha un array di flash a 256 kbit organizzato come una griglia 512x512, il cablaggio e la logica per condensare 512 colonne in un bus a 32 bit saranno necessari se si posiziona un latch largo 512 bit prima dei fili e della logica "condensanti" o un latch largo a 32 bit dopo di loro.
supercat

1
Voglio dire, sono "gratuiti" rispetto ai pin esterni. So che l'energia dei fili domina in questi giorni e che la località è importante, quindi permettetemi di qualificare questa affermazione. Sono liberi di fare, ma non liberi di accenderli!
Yale Zhang,

1
Non sono sicuro di cosa significhi "energia del filo", ma anche dal punto di vista dello spazio, i grandi autobus sono costosi, ma se raddoppiare la larghezza di un autobus ne taglia approssimativamente la lunghezza in metà, il costo complessivo rimarrà più o meno lo stesso.
supercat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.