Wie funktioniert ein Cortex M0 im Vergleich zu 8-Bit-Controllern?

10

In diesem Dokument werden 60 DMIPS / mW für einen Cortex M0 gegenüber 31 DMIPS / mW für einen M3 angegeben. (Letzteres stimmt nicht mit den Zahlen in diesem Dokument überein , in denen 1,25 DMIPS / MHz und 0,19 mW / MHz angegeben sind, was 6,6 DMIPS / mW ergibt.)
Weiß jemand, wie die Leistung / Leistung des M0 im Vergleich zu 8/16-Bit-Controllern ist? wie AVR, PIC und MSP430? Und was ist mit den M3-Figuren los?

Federico Russo
quelle
3
@frederico Dies ist eine sehr geladene Frage und es gibt keine einfache Antwort. Meine Erfahrung ist, dass das andere Material die Leistung bestimmt. Dinge wie Prefetch-Funktionen, Busgeschwindigkeiten, Anzahl der an einem Bus hängenden Peripheriegeräte, Flash-Zugriffsgeschwindigkeiten usw. usw. Wenn Sie ein System gut profilieren, sehen Sie fast immer, dass die Daten eingehen und raus wird der Flaschenhals. Wenn Sie Ihre Bewerbung detailliert beschreiben, gebe ich Ihnen gerne Einblicke in den besten Weg, um den Prozessor auszuwählen.
Frank
1
@Frank: Berücksichtigt der Dhrystone-Benchmark nicht implizit Dinge wie Prefetch und Busgeschwindigkeit? Ich möchte besonders, dass die widersprüchlichen NXP M3-Zahlen geklärt werden. Ich kann dir keine Details über die App geben, da Details noch nicht existieren :-)
Federico Russo
@Frederico, ich betrachte mich als unterdurchschnittlichen Ingenieur, schon gar nicht als Architekt. Ich vertraue keinem Benchmark da draußen, da die Daten fast immer massiert werden. Wenn Sie beispielsweise über eine Hochgeschwindigkeits-Datensenke verfügen, bei der Sie Daten ein- und ausschieben müssen und in der Zwischenzeit auf Speicher und andere Peripheriegeräte zugreifen müssen, steht dieser Fallbus im Weg. Diese Prozessoren sind für durchschnittliche Anwendungsfälle ausgelegt. Wenn Sie bestimmte Daten sanft dekodieren, was mehrere Lese- / Schreibvorgänge im Speicher erfordert und der Datenpfad möglicherweise überläuft oder verhungert. Dies endet normalerweise in schlaflosen Nächten für Software-Leute.
Frank
Heutzutage ist der Dhrystone ein lustiges Spielzeug, sagt Ihnen aber nicht viel. Benchmarks sagen im Allgemeinen überhaupt nicht viel aus. Sie müssen Ihre Anwendung nehmen und ausführen. Der Compiler, den Sie auswählen, um keinen Code oder keine Hardware zu ändern, kann einen mehrfachen Leistungsunterschied plus oder minus bewirken, daher ist dies alles sehr schwierig. Sie können Benchmarks erstellen, bei denen die Zahlen zeigen, was Sie wollen.
old_timer
Der ARM wird den Rest umkreisen, um reine Leistung zu erzielen (bei einer ähnlichen Größe und einem ähnlichen Preis, nicht unbedingt bei der Leistung). Ich glaube nicht, dass ein 8051 so langsam ist wie ein PIC. Können Sie sich die Anzahl der verlorenen Uhren vorstellen, um etwas Nützliches zu tun? Wenn Sie asm verwenden, verwenden die Leute C und es wird unerträglich, es zu sehen. Das msp430, Sie möchten es wahrscheinlich für Apps, bei denen Sie es ausschalten, es wacht einmal in einem blauen Mond auf, macht ein paar Dinge und geht dann in den Schlaf, wie eine TV-Fernbedienung oder so etwas.
old_timer

Antworten:

9

Hier sind einige Hinweise, die ich geben kann. Die von NXP bereitgestellten Spezifikationen gelten für den gesamten Chip (Kern, Speicher, Peripheriegeräte). Die von ARM bereitgestellte Spezifikation basiert nur auf dem Kern. Da die Zahlen unterschiedlich abgeleitet sind, ist der Vergleich sehr schwierig.

Also schlage ich vor, wir treten zurück und schauen uns zwei Geräte an. Eine NXP M0-basierte MCU und eine MXP M3-basierte MCU.

Schauen wir uns für die M0-basierte MCU den LPC1111 an. Wenn diese MCU eine besetzte Leerlaufschleife ausführt, verbraucht sie 3 mA Strom bei einer Taktrate von 12 MHz. Dies ergibt 250 uA / MHz, was bei 3,3 V 825 uW / MHz entspricht.

Schauen wir uns für die M3-basierte MCU den LPC1311 an. Wenn diese MCU dieselbe besetzte Leerlaufschleife ausführt, verbraucht sie 4 mA Strom bei 12 MHz. Ergibt 333,3 uA / MHz, was 1,1 mW / MHz entspricht.

Wenn wir uns eine MSP430C1101-MCU (16-Bit) ansehen, werden wir sehen, dass 240 uA bei 1 MHz verwendet werden, wenn die Spannung 3 V beträgt. Dies ergibt 720 uW / MHz.

Als nächstes wenden wir uns dem ATMega328 zu (der in Arduino Uno verwendet wird). Wir sehen 200uA bei 1MHz mit einer Spannung von 2V. Dies ergibt 400 uA / MHz.

Es ist auch zu beachten, dass MSP430 und AVR unterschiedlich spezifiziert sind. Ihr Stromverbrauch wird bei 1 MHz angegeben, während M0 und M3 bei 12 MHz angegeben werden. Dies bedeutet, dass M0 und M3 Ineffizienzen bei der Skalierung von bis zu 12 MHz aufweisen, die in ihre Zahlen eingearbeitet sind.

Diese Werte sind alle aktiven Stromverbrauchszahlen. Wenn Sie sich den Stromverbrauch im Ruhezustand des Geräts ansehen, sehen Sie, dass um Größenordnungen weniger Strom verbraucht wird. Der Vorteil des 32-Bit-M0 besteht darin, dass er in kürzerer Zeit viel mehr Arbeit erledigen kann als die 8- und 16-Bit-MCU. Dies bedeutet, dass für eine bestimmte Arbeitsbelastung viel mehr Zeit im Schlafzustand verbracht wird. Der M0 in den Händen eines guten Ingenieurs erzielt trotz der Unterschiede im aktiven Stromverbrauch oftmals eine weitaus bessere Energieeffizienz als eine 8-Bit-MCU in den Händen eines weniger erfahrenen Ingenieurs.

Nach meiner Erfahrung liegt der M0 so nahe am aktiven 16- und 8-Bit-Stromverbrauch, dass Sie viele Unterschiede in der Anwendung ausgleichen können. Außerdem stellt der Stromverbrauch von allem, was an der MCU hängt, die MCU in den Schatten. Für viele Anwendungen ist es daher nicht das Wichtigste, die Effizienz der MCU zu verbessern.

Ich hoffe das hilft. Es ist ein langer Weg zu sagen, dass der Stromverbrauch etwas schlechter ist, aber mit diesen Taktzyklen wird viel mehr erreicht als mit anderen Chips. Es hängt also wirklich von Ihrer Anwendung ab.

Tallganglyguy
quelle
1
Zu Ihrem ersten Absatz: Wenn sich die ARM-Zahlen nur auf den Kern beziehen, sollten sie höher sein als die NXP-Zahlen, die die Leistung der Peripheriegeräte enthalten. Aber sie sind niedriger. Ich kann es auch nicht erklären.
Stevenvh
1
Außerdem sollten Sie die Regler bei gleichen Spannungen vergleichen. Wenn Sie den LPC1111 wie den MSP430 mit 3 V betreiben, ist der Stromverbrauch sehr gering. Nicht schlecht für den NXP ARM; Der MSP430 ist bekannt für seine geringe Leistung.
Stevenvh
1
Ein großes Problem, das ich mit ARM-Cortex-Geräten im Vergleich zum MSP430 hatte, ist, dass die ARM-Geräte viele Prozessorzyklen brennen können, wenn sie aus ihrem Energiesparmodus wieder in den Betriebszustand zurückkehren. Die RAM-Daten gehen verloren und müssen neu erstellt / initialisiert werden (abgesehen vom batteriegepufferten SRAM). Das PLL- und Clock-System muss neu gestartet werden. Der MSP fährt erst mit dem nächsten Befehl fort, wobei der gesamte RAM ab dem Zeitpunkt des Einschlafens intakt ist. Wenn Ihr Prozess häufige Übergänge zwischen Aktiv- und Schlafmodus beinhaltet, verliert der ARM.
uɐɪ
3

Der Vergleich von 12 MHz mit 1 MHz ist voreingenommen - höhere Taktraten erfordern weniger Strom pro MHz. Zum Beispiel können die neuesten MSP430 bis zu 80-120 uA pro MHz mit 8 / 16MHz im aktiven Modus erreichen.

Es ist erwähnenswert, dass richtig geschriebener Code den aktiven Modus der MCU unter 1% (oder sogar 0,1%) der Zeit hält, so dass die Leistungsmodi hier einen großen Unterschied machen.

Im wirklichen Leben sind MSP430s schwer zu schlagen (ich bin kein TI-Mitarbeiter), da sehr nützliche Zustände mit geringem Stromverbrauch länger dauern, bis andere MCUs aufwachen oder RAM-Inhalte nicht behalten, was lächerlich ist.

user19790
quelle