Confundido acerca de la función XIP (eXecute In Place) de QSPI FLASH

Hay muchos chips NOR QSPI FLASH que admiten XIP (eXecute In Place). En este modo, la cpu integrada (o MCU) puede ejecutar directamente los códigos almacenados en la memoria flash. Pero como sabemos, el flash qspi solo puede generar datos de 4 bits por ciclo (si está en modo DDR, datos de 8 bits por ciclo), mientras que muchas MCU, como la serie ARM Cortex-M, necesitan una instrucción de 32 bits por ciclo. ciclo. Entonces, la MCU debe esperar al menos 8 ciclos para obtener una instrucción válida, lo que parece muy lento. Además, la frecuencia máxima de un chip flash nor qspi suele ser inferior a 130 MHz y la frecuencia de una MCU podría alcanzar los 200 MHz o más, lo que significa un mayor retraso para que la CPU reciba una instrucción válida de un flash externo.

Aunque podemos programar algunos códigos del cargador de arranque que copian los códigos y datos de la aplicación del usuario en la RAM de instrucciones/datos después del encendido, creo que esta operación llevaría mucho tiempo. Además, si las memorias RAM en MCU no son lo suficientemente grandes como para almacenar los códigos y los datos en la memoria flash, también dificultará las cosas. Sé que podríamos agregar I/D Cache en la MCU, pero esto también significa más complejidad. Por ejemplo, STM32F479XX no tiene caché, pero tiene una interfaz QSPI que admite XIP.

No sé si mi comprensión es incorrecta, pero realmente no pude encontrar muchos detalles sobre XIP. Los manuales de referencia de Techinal de STM32Fxxx solo dicen que tienen una interfaz QSPI y admiten XIP, pero no muestran ningún detalle. Por lo tanto, supongo que también debemos implementar un controlador QSPI muy complicado en la MCU para admitir XIP.

¿Alguien puede darme algunas respuestas a esta pregunta? ¿Hay algún libro o sitio web que indique cómo diseñar una interfaz QSPI compatible con XIP?

Respuestas (1)

Está en el camino correcto, XIP es generalmente lento, por lo que en realidad solo se usa para cargadores de arranque de primera etapa y dispositivos con restricciones severas de RAM.

La gran ventaja de arrancar desde flash es que una interfaz flash de solo lectura tiene muy pocos parámetros de configuración, por lo que el controlador puede comenzar con una interfaz flash conservadora simple, y los parámetros de RAM se almacenan en la configuración flash, en forma de instrucciones que configurar los registros del controlador RAM.

Esto brinda la máxima flexibilidad a los diseñadores de placas, ya que el hardware MCU no hace suposiciones más allá del chip flash.

La cantidad de código que realmente ejecuta desde flash vs copy a RAM primero es una compensación, afectada por la frecuencia con la que se ejecuta el código, cuánto cabe en los cachés y qué tan predecible debe ser el tiempo de ejecución.

En las CPU que tienen cachés, por lo general, las líneas de caché completas se cargarían a la vez desde flash, lo que también soluciona muy bien el problema del ancho del bus.

Encuentro que en STM32FXX, incluso la lectura de datos de la memoria flash integrada necesitará varios estados de espera (LATENCY) si el HCLK es lo suficientemente alto. Si quiero ejecutar algunas aplicaciones realmente grandes que también necesitan rendimiento en tiempo real, como una aplicación de 4 MB que podría almacenarse en el NOR QSPI FLASH externo pero obviamente no podría almacenarse en las RAM de la MCU, ¿significa que yo debe elegir una MCU con I/D$?
@HYF, el caché cambiará la velocidad por la previsibilidad, por lo que no es una aplicación en tiempo real. Empaquetaría los bits en tiempo real como controladores de interrupción en la RAM, y el resto de la aplicación aún se ejecuta desde flash y solo prepara el árbol de decisiones para la parte en tiempo real.
El caché se asegura de que el rendimiento promedio sea alto, pero el rendimiento en tiempo real sufre. El rendimiento de acceso aleatorio de XIP es de alrededor de 1us. Este tiempo de acceso aleatorio es en realidad comparable a algunos controladores DDR SDRAM. Por lo tanto, las ventajas son espacio de código ilimitado, buen rendimiento promedio y el proveedor de MCU puede usar un proceso de silicio de menor costo ya que no necesita flash en el chip. La desventaja es la reducción del rendimiento en tiempo real.