Analyse-Tool Leistungsaufnahme bei Mikrocontrollern

In den letzten 10 Jahren hat sich die Mikrocontroller-Landschaft grundlegend verändert. Kamen früher in vielen Projekten einfache kleine Bausteine zum Einsatz, haben heutige Mikrocontroller eine erheblich höhere Rechenleistung. Über viele Jahre stand dabei die Verbesserung der Rechenleistung im Mittelpunkt. Auch einige Techniken aus dem PC-Umfeld hielten Einzug, zum Beispiel Branch Prediction, Instruction Pipelines, Cache und Memory Management Unit. In jüngerer Zeit kommt jedoch auch immer mehr die Forderung auf, die Stromaufnahme der Mikrocontroller zu senken.

Firmen wie beispielsweise ARM werben mit der niedrigen Leistungsaufnahme ihrer Prozessorkerne. Dies ist wohl richtig, jedoch besteht ein Mikrocontroller eben nicht nur aus einem Rechenkern, sondern auch aus Peripherie und Speicher. Unter der Annahme, dass Peripheriebausteine grundsätzlich eine individuelle Konfiguration haben, die für die jeweilige Aufgabe unabdingbar ist, kann man nur noch bei der Speicheranbindung und CPU-Performance optimieren.

Eine genauere Betrachtung zeigt, dass in den letzten Jahren die CPU-Frequenzen immer mehr gestiegen sind, während sich die Geschwindigkeit der Flash-Speicher nur unwesentlich geändert hat. Um diesem Problem entgegenzuwirken, haben die Halbleiterhersteller mehr oder weniger »intelligente« Mechanismen entwickelt, um den Zugriff auf den Flash-Speicher nicht zum Flaschenhals werden zu lassen.

Ungeachtet dieser Anstrengungen gilt, dass ein langsamer Speicher zwangsweise zu Verzögerungen führt. Der Prozessor tut nichts, verbraucht aber trotzdem Strom. Dies belegen auch Benchmarks, welche die Halbleiterhersteller regelmäßig veröffentlichen. Als Folge davon sinkt die Effizienz von Mikrocontrollern mit zunehmender Taktfrequenz, da die Stromaufnahme und damit die Verlustleistung mit der Frequenz steigen. Zudem haben moderne Mikrocontroller in Folge der feinen Halbleiterstrukturen eine nicht zu vernachlässigende statische Stromaufnahme.

Bei der Optimierung der Leistungsaufnahme eines Mikrocontroller stellt sich nun die Frage: Stimmen die Angaben im Datenblatt mit den tatsächlichen Werten überein? Wie optimiere ich richtig? Und: Wie kann ich überprüfen, ob meine Optimierung den gewünschten Effekt erzielt?

Für die letzte Frage hat Hitex das »PowerScale« entwickelt, ein Werkzeug, mit dem sich nicht nur die Leistungsaufnahme von Embedded Systemen mit einer hohen Abtastrate ermitteln, sondern auch die einzelnen Werte der Programmausführung zuordnen lassen. Um die optimale Effizienz zu erreichen, ist die Taktfrequenz so zu wählen, dass das Optimum aus Rechenleistung und Energieaufnahme erzielt wird. Es stellt sich jedoch die Frage: Wann haben wir das Optimum?

Moderne Mikrocontroller bieten eine Vielzahl von Konfigurationsoptionen: verschiedene CPU- und Busfrequenzen, Wait-States, PLL-Setup, unterschiedlich schnelle Speicher, Peripherietakte sowie Schlafmodi mit verschiedenen Aufwachzeiten. Ebenso gilt es zu beachten, dass eine höhere Performance durch eine höhere Taktfrequenz nicht immer nützlich ist. Wechselt der Controller, weil er früher seine Aufgabe beendet, in einen Energiesparmodus, dann wird immer noch Energie verbraucht – mitunter wesentlich mehr als gedacht.

Ein Benchmark soll‘s zeigen

Um diese Problemstellung zu analysieren, wurde zunächst ein Benchmark implementiert, der unterschiedliche Aufgabenstellungen bearbeitet. Der Benchmark deckt folgende Themen ab:

  • Kopieren von Speicher,
  • Ausführen einer kurzen Schleife,
  • Berechnen einer MD5-Prüfsumme,
  • Pythagoras (Floating Point),
  • Integer-Interpolation,
  • sprintf und
  • Branch-Test.

Der Benchmark lief bei aktiviertem DMA-Transfer viermal hintereinander ab, wobei für jede Wiederholung andere Speicherbereiche für den DMA-Transfer verwendet wurden. Bei einem solchen Transfer erfolgte die Übertragung bei maximaler Geschwindigkeit immer von Speicher zu Speicher.

Als Mikrocontroller kam der »LPC1768« von NXP zum Einsatz, der auf einem Core vom Typ »Cortex-M3 Rev.2« von ARM basiert. Die Messungen dürften auf Cortex-M3-Implementierungen anderer Hersteller zu ähnlichen Ergebnissen führen. Um sicherzustellen, dass auch kurze Stromspitzen nicht verloren gehen, kam ein PowerScale mit einer Abtastrate von 100 kHz zum Einsatz, der während der Ausführung des Benchmarks den Stromverlauf ermittelte. Durch die integrierte Zuordnung von Messergebnissen des Tools zum Programmverlauf war es außerdem möglich, die einzelnen Schritte des Benchmarks der Stromaufnahme zuzuordnen.