¿Qué son los estados de espera de la memoria flash?

Estoy usando un microcontrolador PowerPC de escala libre. En el módulo de memoria flash en la hoja de datos, el número de "estados de espera del acceso a la memoria flash" es configurable.

La siguiente es la parte de la hoja de datos que planteó mi pregunta, está tomada de la descripción del registro de los registros del módulo PFlash:

Este campo debe establecerse en un valor correspondiente a la frecuencia operativa del PFlash y el tiempo de acceso de lectura real del PFlash. Las frecuencias operativas más altas requieren configuraciones distintas de cero para este campo para una operación Flash adecuada.
0 MHz, < 23 MHz, estados de espera requeridos = 0 ---
23 MHz, < 45 MHz, estados de espera requeridos = 1 ---
45 MHz, < 68 MHz, estados de espera requeridos = 2 ---
68 MHz, < 90 MHz, estados de espera requeridos = 3 ---

(PFlash es el módulo del controlador Platform Flash)

Entiendo que el procesador es más rápido que el flash, por eso se introducen estados de espera. Lo que no entiendo es: si el procesador es más rápido que el flash, entonces el procesador es el que debe ralentizarse, no el flash, pero el párrafo anterior dice lo contrario (¿o no entendí esto?), dice que en caso de que el Pflash funcione con altas frecuencias, ¡entonces debemos reducir la velocidad al agregarle estados de espera adicionales!

¿Qué hay de malo en mi comprensión?

Gracias

Si entendí bien, es el controlador que se puede configurar a diferentes velocidades; por lo que tiene que esperar a que la memoria Flash real tenga los datos disponibles.

Respuestas (3)

Para amplificar la respuesta de stevenvh, cualquier tipo de lógica, cuando se le da una señal de entrada, tardará algún tiempo en producir una señal de salida; la memoria es a menudo muy lenta en comparación con otra lógica. A menudo, habrá una garantía de que la señal de salida será válida dentro de un cierto período de tiempo, pero eso es todo. En particular, es posible que la señal cambie varias veces dentro de ese intervalo, y no habrá ninguna indicación, antes del final de ese intervalo, de que la señal ha alcanzado su valor final "correcto".

Cuando un microcontrolador o microprocesador típico lee un byte (o palabra, o la unidad que sea) de la memoria, genera una dirección y, algún tiempo después, observa el valor de salida de la memoria y actúa en consecuencia. Entre el momento en que el controlador genera la dirección y el momento en que mira el valor de la memoria, no le importa cuándo o si cambian las señales de salida de la memoria. Por otro lado, si la señal de la memoria no se ha estabilizado en su valor final en el momento en que el controlador la mira, el controlador leerá mal la memoria como si hubiera retenido el valor que se estaba emitiendo en el momento en que la miró. Normalmente, el controlador miraría el valor de la memoria tan pronto como estuviera listo para hacer algo con él, pero si el valor de la memoria no estuviera listo en ese momento, es posible que no funcione. Como consecuencia, muchos controladores tienen la opción de esperar un poco más después de estar listos para procesar datos de la memoria, para garantizar que la salida de la memoria sea realmente válida. Tenga en cuenta que agregar dicho retraso ralentizará las cosas (el controlador habría estado feliz de actuar sobre los datos de la memoria antes), pero no afectará la corrección de la operación (a menos que las cosas se ralenticen tanto que no se puedan cumplir otras obligaciones de tiempo).

¡Bonito! ¡Gracias por los detalles útiles que explicaste!
@MemoryLeaks: Un placer. Una cosa importante a tener en cuenta es que reducir los estados de espera por debajo de los límites especificados hará que el sistema se ejecute más rápido, pero las lecturas de la memoria pueden generar datos incorrectos arbitrariamente; además, "brindar datos incorrectos arbitrariamente" puede significar "brindar datos correctos hasta que el dispositivo que ha diseñado esté en manos de su cliente, y luego comenzar a brindar datos incorrectos con la frecuencia suficiente para que el cliente se enoje mucho con usted".
Esto parece muy similar al overclocking, pero más una opción configurable del mismo. Una forma interesante de overclockear una MCU quizás.
@supercat, una pregunta, ¿qué significa controlador, es el procesador o el controlador de memoria?
@Mouin: el controlador de memoria, si lo hay, o el procesador, si no lo hay.

Los estados de espera se agregan al ciclo de acceso a la memoria iniciado por la CPU. Entonces, de hecho, es la CPU la que tiene que esperar al Flash más lento. El controlador de memoria indica "no listo" a la CPU durante un número de ciclos (0 a 3), y mientras lo hace, la CPU permanece en su estado actual, es decir, ha escrito la dirección Flash, pero aún no lee los datos. Solo cuando el controlador de memoria señale "datos listos", la CPU leerá del bus de datos y continuará su instrucción (enganchando los datos en un registro o en la RAM).

Entonces, al configurar esa configuración, le digo al controlador de memoria cuándo señalar exactamente "datos listos". ¿No puedo simplemente decirle a la memoria que señale "datos listos" cuando realmente están listos?
@MemoryLeaks: eso es posible y lo hacen los procesadores asíncronos, que son raros. Es más común y más predecible sincronizar todo usando un reloj. Entonces, es un retraso del ciclo del reloj (o 2 o 3) o nada.
Gracias por su respuesta :) Entonces, para resumir: la descripción en mi pregunta anterior significa que retrasará la "CPU" y no el controlador Flash
@stevenvh hace que el procesador literalmente cuelgue esto, recibe los datos de la memoria, quiero decir, ¿detiene completamente la ejecución o ejecutaría otras instrucciones en el caso de una CPU canalizada? ¿Qué pasa con las interrupciones, supongo que se atenderán mientras la CPU espera que la memoria esté lista?

Es posible que el procesador deba detenerse en la memoria, pero un diseño inteligente no sería necesario.

Creo que la tecnología clave de la que no está al tanto es el acceso en modo ráfaga/página . Eso permite que el ancho de banda de los accesos a la memoria esté muy cerca de la velocidad del procesador (pero probablemente Flash siga siendo el cuello de botella ya que nunca he visto una MCU basada en Flash que se ejecute a> 200MhZ)

Sin embargo, la latencia sigue siendo la misma. Por ejemplo, para las MCU STM32F4 que estoy usando, #estados de espera = piso (velocidad del reloj / 30MhZ). Eso significa que la latencia siempre es de 33 ns, independientemente de la velocidad del reloj. Hay un dicho: "El dinero puede comprar ancho de banda, pero la latencia es para siempre..."

Incluso si el ancho de banda de Flash no fuera suficiente para mantener ocupada la CPU, puede diseñar fácilmente un caché de código que almacene y obtenga previamente las instrucciones que se espera que se ejecuten. ST tiene una pista sobre esto para sus MCU STM32F4 (168 MhZ):

Gracias al acelerador ART y la memoria Flash de 128 bits, el número de estados de espera dados aquí no afecta la velocidad de ejecución de la memoria Flash, ya que el acelerador ART permite lograr un rendimiento equivalente a la ejecución del programa en estado de espera 0.

En realidad, la declaración también sugiere que el modo de ráfaga no es necesario y que una interfaz de memoria muy amplia también es suficiente. Pero la idea es la misma (utilizar el paralelismo para ocultar la latencia). En el chip, los cables son libres, por lo que una memoria de 128 bits tendría sentido.

Los cables están lejos de ser "libres" en un chip, en términos generales, pero aumentar el ancho del bus entre una matriz de memoria y un conjunto de pestillos no agrega cables. Si un chip tiene una matriz flash de 256 kbit organizada como una cuadrícula de 512x512, será necesario el cableado y la lógica para condensar 512 columnas en un bus de 32 bits, ya sea que se coloque un pestillo de 512 bits de ancho antes de los cables y la lógica de "condensación". o un pestillo ancho de 32 bits después de ellos.
Quiero decir que son "gratis" en comparación con los pines externos. Sé que la energía por cable domina estos días y que la localidad es importante, así que permítanme calificar esa afirmación. ¡Son libres de hacer, pero no libres de encender!
No estoy seguro de lo que quiere decir con "energía de cable", pero incluso desde una perspectiva espacial, los autobuses grandes son caros, pero si duplicar el ancho de un autobús reduce su longitud aproximadamente a la mitad, el costo total seguirá siendo el mismo.