¿Qué es el estado de espera de la memoria flash?

8

Estoy usando un microcontrolador PowerPC freescale. 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 formulé mi pregunta, que se ha tomado 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 operación de la PFlash y al tiempo real de acceso de lectura de la PFlash. Las frecuencias de funcionamiento más altas requieren ajustes distintos de cero para   este campo para el correcto funcionamiento del flash.
  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 un módulo controlador de Platform 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 debe reducirse, no el flash, pero el párrafo anterior dice lo contrario (¿o no lo entendí?), dice que en caso de que el Pflash sea operado con altas frecuencias, entonces necesitamos ralentizarlo agregándole estados de espera adicionales.

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

Gracias

    
pregunta MohamedEzz

3 respuestas

6

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 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 pueda cambiar 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 memoria, genera una dirección y, algún tiempo después, mira el valor de salida de la memoria y actúa sobre ella. 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 las señales de salida de la memoria cambian. Por otro lado, si la señal de la memoria no se ha estabilizado hasta su valor final cuando el controlador la mira, el controlador interpretará erróneamente que la memoria retuvo el valor que se estaba emitiendo en el momento en que se vio. Normalmente, el controlador vería el valor de la memoria tan pronto como estuviera listo para hacer algo con él, pero si el valor de la memoria no estaría listo entonces, eso podría no funcionar. En consecuencia, muchos controladores tienen la opción de esperar un poco más después de que estén 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 estaría 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)

    
respondido por el supercat
7

Los estados de espera se agregan al ciclo de acceso a la memoria iniciado por la CPU. Así que de hecho es la CPU la que tiene que esperar por un 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á del bus de datos y continuará su instrucción (enclavando los datos en un registro o en la RAM).

    
respondido por el stevenvh
2

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 desconoce es ráfaga / Acceso al modo 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 un MCU basado en Flash que se ejecute a > 200MhZ)

Sin embargo, la latencia permanece igual. Por ejemplo, para las MCU STM32F4 que estoy usando, #wait states = floor (clockSpeed / 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 a la CPU ocupada, puede diseñar fácilmente una memoria caché de código que almacene y prefea 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 aquí.   no afecta la velocidad de ejecución de la memoria Flash ya que el acelerador ART permite alcanzar   un rendimiento equivalente a 0 ejecución de programa en estado de espera.

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 (usar paralelismo para ocultar la latencia). En el chip, los cables son gratuitos, por lo que una memoria de 128 bits tendría sentido.

    
respondido por el Yale Zhang

Lea otras preguntas en las etiquetas