¿Qué es más rápido, ejecutar un programa desde ROM o RAM?

8

La mayoría de los que tenemos experiencia en electrónica sabemos que la SRAM es más rápida que la DRAM. Pero cuando se trata de comparar RAM con ROM, no estoy seguro.

Mi pregunta está relacionada con el microcontrolador: "Si un código se ejecuta directamente desde RAM / ROM, ¿qué rendimiento será mejor? 1) ejecución desde RAM o 2) ejecución desde ROM o 3) Ambos realizarán igual "

También teniendo en cuenta el hecho de que las ROM están diseñadas para tener velocidades de lectura más altas. mientras que para RAM, hay una compensación de velocidad de lectura por tener capacidades de escritura.

    
pregunta Prince Rambade

3 respuestas

16

La hoja de datos debe indicarle cuánto tarda cada instrucción y qué diferencias hay, si las hay, entre la ejecución desde la RAM o la ROM.

Para el microcontrolador que ofrece la opción de ejecutar desde la RAM, es probablemente más rápido, ya que es el punto principal de usar espacio RAM adicional para ejecutar el código. También puede haber algunos problemas de superposición de búsqueda. En algunos casos, podría ser más rápido ejecutarse desde la ROM porque es una memoria separada y el acceso a la RAM puede realizarse simultáneamente.

Una vez más, la única forma de saber para cualquier micro en particular es LEER LA HOJA DE DATOS .

    
respondido por el Olin Lathrop
9

Depende completamente de la memoria y la arquitectura de la CPU. Como regla general, la SRAM es más rápida que la memoria flash, especialmente en MCU de mayor velocidad (> 100 MHz). Las celdas de bits SRAM producen una salida (más o menos) de nivel lógico, mientras que la memoria flash tiene que pasar por un proceso de detección de corriente más lento.

La velocidad (si la hay) depende de la arquitectura: el tamaño de palabra de las memorias, el número de estados de espera en cada una, la presencia de almacenamiento en caché, el tamaño de las instrucciones de la CPU, etc. ejecutándose a una frecuencia suficientemente baja, podría tener cero estados de espera en flash y RAM, por lo que podrían ejecutarse a la misma velocidad.

El código también importa. Si su código es estrictamente lineal (sin bifurcación), el flash podría obtener las instrucciones lo suficientemente rápido como para mantener la CPU saturada incluso a frecuencias más altas. Como dijo Olin, una CPU de arquitectura de Harvard con programas separados y rutas de lectura de datos podría funcionar de manera diferente cuando el código y los datos se encuentran en diferentes memorias.

Las ROM metálicas (y otras memorias no volátiles, como FRAM) tienen sus propias características y pueden ser o no tan rápidas como la SRAM. La capacidad de escribir no hace necesariamente una diferencia; es más sobre las características de la salida de celda de bit y los circuitos de detección.

La hoja de datos le dará una idea aproximada de la diferencia de velocidad, pero la única manera de saberlo con seguridad es perfilar su código.

    
respondido por el Adam Haun
1

"Ejecutar un programa" requiere una CPU con un reloj síncrono. La memoria lenta se puede acomodar ya sea ejecutando todo el sistema a un reloj lo suficientemente lento, o insertando wait states (ciclos de reloj adicionales de no hacer nada entre las fases de búsqueda y decodificación), activa solo para ciertos rangos de direcciones (consulte el antiguo 8085 para ejemplo). La búsqueda de instrucciones de la CPU no sabe o le importa exactamente cuándo se ajustan los datos a su valor final, siempre y cuando no cambie durante el intervalo de configuración / retención.

Un microcontrolador generalmente tiene toda su memoria en el chip, por lo que, a menos que se indique lo contrario, asumo que el sistema de memoria tiene un estado de espera cero. (pero lea la hoja de datos para confirmar). Los microcontroladores típicos están diseñados para ser soluciones de un solo chip más simples en comparación con una computadora de escritorio, por lo que los estados de espera son poco probables en un microcontrolador. Por lo tanto, es poco probable que un microcontrolador tenga velocidades de memoria en el chip que no coincidan.

La memoria más rápida generalmente cuesta una prima (mayor voltaje, menor capacitancia, más demanda). Un 80xx86 tiene SRAM rápida en caché L2 e SRAM aún más rápida en caché L1, y un montón de DRAM off-chip más lento conectado a un controlador de memoria. Este tipo de sistema es mucho más complicado que un microcontrolador, y está fuera del alcance de la pregunta. (¡Pero de gran interés para un ingeniero informático!)

    
respondido por el MarkU

Lea otras preguntas en las etiquetas