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 de funcionamiento del PFlash y el tiempo de acceso de lectura real del PFlash. Las frecuencias de operación más altas requieren configuraciones distintas de cero para este campo para una operación Flash adecuada.
0 MHz, <23 MHz, se requieren estados de espera = 0 ---
23 MHz, <45 MHz, se requieren estados de espera = 1 ---
45 MHz, <68 MHz, se requieren estados de espera = 2 ---
68 MHz, <90 MHz, se requieren estados de espera = 3 ---
(PFlash es un módulo controlador de plataforma Flash)
Entiendo que el procesador es más rápido que el flash, por eso se introducen los 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 necesita 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 agregando estados de espera adicionales!
¿Qué hay de malo en mi comprensión?
Gracias
Respuestas:
Para amplificar la respuesta de stevenvh, cualquier tipo de lógica, cuando se le da una señal de entrada, tomará algún tiempo para producir una señal de salida; La memoria suele ser 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 haya alcanzado su valor "correcto" final.
Cuando un microcontrolador o microprocesador típico lee un byte (o palabra, o cualquier unidad) de la memoria, genera una dirección y, algún tiempo después, observa el valor emitido por la memoria y actúa sobre él. 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 a su valor final en el momento en que el controlador la mira, el controlador interpretará mal la memoria como si hubiera retenido el valor que se estaba emitiendo en el momento en que parecía. 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 entonces, eso podría no funcionar. Por consiguiente, Muchos controladores tienen la opción de esperar un poco más después de estar listos para procesar los 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 encantado 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 temporización).
fuente
Los estados de espera se agregan al ciclo de acceso a la memoria iniciado por la CPU. De hecho, es la CPU la que tiene que esperar el Flash más lento. El controlador de memoria señala "no listo" a la CPU durante varios 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ñala "datos listos", la CPU leerá desde el bus de datos y continuará sus instrucciones (enganchando los datos en un registro o en la RAM).
fuente
Es posible que el procesador deba detenerse en la memoria, pero no sería necesario un diseño inteligente.
Creo que la tecnología clave que no conoce 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 sigue siendo el cuello de botella ya que nunca he visto una MCU basada en Flash que se ejecuta a> 200MhZ)
Sin embargo, la latencia se mantiene igual. Por ejemplo, para las MCU STM32F4 que estoy usando, #wait states = floor (clockSpeed / 30MhZ). Eso significa que la latencia es siempre 33ns, 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 recupere las instrucciones que se espera que se ejecuten. ST tiene una pista sobre esto para sus MCU STM32F4 (168 MhZ):
En realidad, la declaración también sugiere que el modo ráfaga no es necesario y que una interfaz de memoria muy amplia también es suficiente. Pero la idea es la misma (usando el paralelismo para ocultar la latencia). En el chip, los cables son libres, por lo que una memoria de 128 bits tendría sentido.
fuente