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


10

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


1
Si entendí correctamente, es el controlador que se puede configurar a diferentes velocidades; entonces tiene que esperar que la memoria Flash real tenga los datos disponibles.
clabacchio

Respuestas:


8

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).


¡Agradable! ¡Gracias por los útiles detalles que explicaste!
MohamedEzz

1
@MemoryLeaks: Un placer. Una cosa importante a tener en cuenta es que la reducción de 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 producir datos incorrectos arbitrariamente; Además, "proporcionar datos incorrectos de manera arbitraria" puede significar "proporcionar datos correctos hasta que el dispositivo que ha diseñado esté en manos de su cliente, y luego comenzar a proporcionar datos incorrectos con la frecuencia suficiente como para enojarlo".
supercat

1
Esto parece un overclocking muy paralelo, pero es una opción más configurable del mismo. Una forma interesante de overclockear un MCU quizás.
sherrellbc

1
@supercat, una pregunta que se entiende por controlador es el procesador o el controlador de memoria?
Mouin

1
@Mouin: el controlador de memoria si hay uno, o el procesador si no lo hay.
supercat

9

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).


1
Entonces, al configurar esa configuración, le digo al controlador de memoria cuándo señalar exactamente "datos listos". ¿No puedo decirle a la memoria que señale "datos listos" cuando en realidad está listo?
MohamedEzz

1
@MemoryLeaks: eso es posible y lo hacen procesadores asincrónicos, lo cual es raro. 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.
stevenvh

Gracias por su respuesta :) Entonces, para resumir: la descripción en mi pregunta anterior significa que retrasará la "CPU" y no el controlador Flash
MohamedEzz

1
@stevenvh hace que el procesador literalmente cuelgue esto, recibe los datos de la memoria, es decir, detiene completamente la ejecución o ejecutaría otras instrucciones en caso de una CPU conectada. ¿Qué pasa con las interrupciones, supongo que serían atendidas mientras la CPU está esperando que la memoria esté lista?
Miguel Sánchez

3

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):

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

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.


Los cables están lejos de ser "libres" en un chip, en general, 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 256kbit organizada como una cuadrícula de 512x512, el cableado y la lógica para condensar 512 columnas en un bus de 32 bits serán necesarios si se coloca 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.
supercat

1
Quiero decir que son "gratis" en comparación con los pines externos. Sé que la energía del cable domina en estos días y que la localidad es importante, así que permítanme calificar esa afirmación. ¡Son libres de hacer, pero no de encender!
Yale Zhang

1
No estoy seguro de lo que quiere decir con "energía del 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.
supercat
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.