¿Cómo funciona un Cortex M0 en comparación con los controladores de 8 bits?

10

Este documento cita 60 DMIPS / mW para un Cortex M0, frente a 31 DMIPS / mW para un M3. (Este último no está de acuerdo con los números en este documento , que citan 1.25 DMIPS / MHz y 0.19 mW / MHz, dando 6.6 DMIPS / mW.)
¿Alguien sabe cómo se compara el rendimiento / potencia M0 con los controladores de 8/16 bits? como AVR, PIC y MSP430? ¿Y cuál es el trato con las figuras M3?

Federico Russo
fuente
3
@frederico esta es una pregunta muy cargada y no hay una respuesta fácil. Desde entonces, mi experiencia es lo otro que determina el rendimiento. Cosas como capacidades de captación previa, velocidades de bus, número de periféricos que cuelgan de un bus, velocidades de acceso de flash, etc., etc. y afuera se convierte en el cuello de la botella. Bueno, si detalla su aplicación, me complacería proporcionarle información sobre cuál es la mejor ruta para elegir el procesador.
Frank
1
@Frank: ¿El punto de referencia Dhrystone no tiene en cuenta cosas como la captación previa y la velocidad del bus implícitamente? En particular, me gustaría aclarar las cifras contradictorias de NXP M3. No puedo darle detalles sobre la aplicación, porque aún no existen detalles :-)
Federico Russo
@Frederico, me considero un ingeniero por debajo del promedio, ciertamente no un arquitecto. No confío en ningún punto de referencia, ya que los datos casi siempre se modifican. Por ejemplo, si tiene un sumidero de datos de alta velocidad que requiere que ingrese y salga datos y, mientras tanto, necesita acceder a la memoria y otros periféricos, este bus de casos se interpone en el camino. Estos procesadores están diseñados para casos de uso promedio. Si está realizando una decodificación suave de ciertos datos que requieren lectura / escritura de varias memorias y la ruta de datos puede desbordarse o pasar hambre. Esto generalmente termina en noches de insomnio para los chicos de software.
Frank
En estos días, el Dhrystone es un juguete divertido pero no te dice mucho. Los puntos de referencia en general no te dicen mucho en absoluto. Tienes que tomar tu aplicación y ejecutarla. El compilador que elija sin cambiar ningún código o hardware puede hacer una diferencia de rendimiento varias veces más o menos, por lo que todo esto es muy difícil. Puedes hacer puntos de referencia que hagan que los números muestren lo que quieras.
old_timer
El ARM ejecutará círculos alrededor del resto para obtener un rendimiento puro (a un tamaño similar y un precio similar, no necesariamente potencia). No creo que incluso un 8051 sea tan lento como un PIC, ¿puedes imaginar la cantidad de relojes perdidos para hacer algo útil? Usando asm, la gente usa C y se vuelve insoportable mirar. El msp430, probablemente lo desee para aplicaciones donde lo apaga, se despierta una vez en una luna azul, hace un par de cosas y luego se duerme, como un control remoto de TV o algo así.
old_timer

Respuestas:

9

Aquí hay un par de consejos que puedo proporcionar. Las especificaciones que proporciona NXP son para todo su chip (núcleo, memoria, periféricos). La especificación que proporciona ARM se basa solo en el núcleo. Como los números se derivan de manera diferente, es realmente difícil hacer la comparación.

Por lo tanto, propongo que demos un paso atrás y veamos dos dispositivos. Una MCU basada en NXP M0 y una MCU basada en MXP M3.

Para el MCU basado en M0, veamos el LPC1111. Cuando esta MCU está ejecutando un bucle inactivo ocupado, consumirá 3 mA de corriente a una velocidad de reloj de 12 MHz. Esto produce 250uA / MHz, que a 3.3V es 825uW / MHz.

Para el MCU basado en M3, veamos el LPC1311. Cuando esta MCU está ejecutando el mismo bucle inactivo ocupado, consumirá 4 mA de corriente a 12 MHz. Rendimiento 333.3uA / MHz, que es 1.1mW / MHz.

Si observamos una MCU MSP430C1101 (16 bits), veremos que usará 240uA a 1MHz cuando el voltaje sea de 3V. Esto produce 720uW / MHz.

A continuación, pasemos al ATMega328 (utilizado en Arduino Uno). Vemos 200uA usados ​​a 1MHz con un voltaje de 2V. Esto produce 400uA / MHz.

También se debe tener en cuenta que el MSP430 y el AVR se especifican de manera diferente. Su consumo de energía se da a 1MHz, mientras que los M0 y M3 se dan a 12MHz. Esto significa que el M0 y el M3 tienen ineficiencias de escalado de hasta 12MHz en sus números.

Estos valores son todos números de consumo de corriente activa. Si observa el consumo actual cuando el dispositivo está en estado de suspensión, verá que se utilizan órdenes de magnitud menos energía. La ventaja que proporciona el M0 de 32 bits es que puede hacer mucho más trabajo en menos tiempo que el MCU de 8 y 16 bits. Esto significa que para una carga de trabajo determinada pasará mucho más tiempo en estado de suspensión. El M0 en manos de un buen ingeniero a menudo obtendrá una eficiencia energética mucho mejor que una MCU de 8 bits en manos de un ingeniero menos calificado a pesar de las diferencias en el consumo de energía activa.

Según mi experiencia, el M0 está tan cerca del consumo de energía activa de 16 y 8 bits que puede compensar muchas de las diferencias en la aplicación. Además, muchas veces el consumo de energía de todo lo que tienes colgando de la MCU eclipsa a la MCU. Entonces, para muchas aplicaciones, abordar la eficiencia de la MCU no es lo más importante.

Espero que eso ayude. Es un largo camino para decir que el consumo de energía es un poco peor, pero se logra mucho más con esos ciclos de reloj que otros chips. Por lo tanto, realmente depende de su aplicación.

tallganglyguy
fuente
1
Vuelva a su primer párrafo: si las cifras ARM son casi el núcleo, entonces deberían ser más altas que las cifras NXP, que incluyen la potencia de los periféricos. Pero son más bajos. Yo tampoco puedo explicarlo.
stevenvh
1
Además, debe comparar los controladores a voltajes iguales. Si ejecuta el LPC1111 a 3V como el MSP430, su consumo de energía está muy cerca. No está mal para el BRAZO NXP; El MSP430 es conocido por su bajo consumo.
stevenvh
1
Un gran problema que he tenido con los dispositivos ARM Cortex en comparación con el MSP430 es que los dispositivos ARM pueden grabar muchos ciclos de procesador volviendo al estado de funcionamiento desde su modo de baja potencia. Los datos de RAM se pierden y deben volver a crearse / inicializarse (aparte de la SRAM respaldada por batería), el PLL y el sistema de reloj deben reiniciarse. El MSP simplemente se reanuda desde la siguiente instrucción con toda la RAM intacta desde que se fue a dormir. Si su proceso involucra transiciones frecuentes entre los modos activo y de suspensión, entonces el ARM perderá.
uɐɪ
3

La comparación de 12MHz a 1MHz está sesgada: las velocidades de reloj más altas requieren menos corriente por MHz. Por ejemplo, los últimos MSP430 pueden llegar a 80-120uA por MHz con 8 / 16MHz en modo activo.

Vale la pena mencionar que el código escrito correctamente mantiene el modo activo de MCU por debajo del 1% (o incluso 0.1%) de tiempo, por lo que los modos de potencia hacen una gran diferencia aquí.

En la vida real, los MSP430 son difíciles de superar (no soy un empleado de TI) debido a estados muy útiles de baja potencia donde otras MCU tardan más en despertarse o no mantienen el contenido de RAM, lo cual es ridículo.

usuario19790
fuente