Auf einen Blick

Benchmarks helfen seit jeher bei der Auswahl eines Prozessors. Während klassische Benchmarks vor allem die Performance einer CPU oder eines Systems ermitteln, geht es beim ULPBench um den Energieverbrauch von Ultra-Low-Power-Systemen. Hier müssen die Probanden eine vorgegebene Aufgabe erfüllen und dabei möglichst sparsam arbeiten. So können Entwickler herausfinden, welche MCU sich für Applikationen eignen, die mit einer kleinen Batterie lange laufen müssen.

Was kennzeichnet einen Ultra-Low-Power-Mikrocontroller (ULP)? Ist die Verlustleistung lediglich eine von vielen Facetten des Systemdesigns, oder ist sie der wichtigste Aspekt? Wie lassen sich Anwendungen trotz reduziertem Energiebudget mit noch mehr Funktionen ausstatten? Dies sind nur ein paar der Fragen, mit denen sich Embedded-Entwickler konfrontiert sehen, wenn ihre Applikationen einen extrem geringen Energieverbrauch verlangen. Energiebewusstsein umfasst sämtliche Aspekte des Mikrocontroller-Ökosystems, beginnend mit der MCU-Architektur, über das gesamte Spektrum der Peripherie-Verbindungen bis hin zu den Standby-Fähigkeiten des Systems. Also fragt sich, welche schnellen, effektiven und objektiven Tools den Entwicklern zur Verfügung stehen, um Bausteine, Architekturen und Lösungen auf der Basis ihres spezifischen Applikationsprofils zu vergleichen.

Um diese Frage zu beantworten, hat das EEMBC (Embedded Microprocessor Benchmark Consortium) eine neue Arbeitsgruppe ins Leben gerufen: Sie soll einen neuen Benchmark-Tests definieren und umsetzen, der sich gezielt an Ultra-Low-Power-Applikationen richtet. Als erstes galt es, den Begriff „Ultra-Low-Power“ zu definieren. Grundsätzlich hat diese Bezeichnung je nach Art der Anwendung weitreichende Auswirkungen. Für das Konsortium war es jedoch wichtig, sich auf MCUs für Applikationen zu konzentrieren, die sich für lange Zeit aus Batterien oder ähnlichen Quellen speisen. Der Ultra-Low-Power-Benchmark ULPBench deckt daher ein breites Spektrum von Anwendungen mit einer Reihe gängiger Profile ab, die zum Benchmark-Paket gehören. Mit „Core Profile“ ist jetzt die erste Phase dieses Benchmark-Pakets verfügbar. Entwickler können damit MCUs mit einer typischen Basis-Peripherieausstattung benchmarken. Diese Basiskonfiguration besteht aus Echtzeituhr (Real-Time Clock, RTC), RAM und nichtflüchtigem Speicher im Verbund mit der CPU.

Tabelle 1: Die Bitbreite von C-Datentypen wie „int“ variiert je nach CPU-Architektur. C99 führt daher neue Datentypen wie „uint16_t“ ein.

Tabelle 1: Die Bitbreite von C-Datentypen wie „int“ variiert je nach CPU-Architektur. C99 führt daher neue Datentypen wie „uint16_t“ ein.Texas Instruments

Profiling von Ultra-Low-Power-Applikationen

Die erste Hürde, die es bei der Definition von ULP-Benchmarks zu überwinden gilt, sind die großen Unterschiede bei den Mikrocontroller-Implementierungen. Meist ist die CPU nicht die entscheidende Komponente, denn sie wird in aller Regel von C-Compilern abstrahiert, die hoch optimierten Code generieren. Das Portieren von Benchmark-Code zwischen unterschiedlichen Architekturen ist recht einfach, wenn sich die Anwender an einige Grundregeln halten, zum Beispiel ausschließlich ANSI-C nutzen und für Variablen die Datentyp-Definitionen des C99-Standards nutzen. Dieser Standard legt die Bitbreite mit einem festen Wert fest und definiert sie nicht an Hand der Architektur (Tabelle 1).

In vielen Anwendungen ist die CPU allerdings nicht der einzige nennenswerte Energieverbraucher, denn auch Peripherie und Systemarchitektur können einen entscheidenden Anteil am Gesamt-Energieverbrauch haben. Dies erschwert das Erstellen eines prozessorunabhängigen Benchmarks, denn die Peripheriemodule können erheblich variieren, und zwar nicht nur zwischen verschiedenen MCU-Anbietern, sondern auch zwischen den verschiedenen Plattformen ein- und desselben Herstellers.

Ein Benchmark-Code muss deshalb sehr flexibel sein und eine einfache Anpassung an oder Integration in beliebige Mikrocontroller-Systeme zulassen. Ferner muss der Code einen abstrahierten Satz an Funktionen für ULP-Applikationen bereitstellen, ohne dabei eine bestimmte, nur von Nischen-MCUs gebotene Funktionalität zu bevorzugen.

Bild 1: Je öfter eine Anwendung den CPU-Kern aus dem Standby-Modus aufweckt, desto mehr Energie ist für das Umschalten zwischen beiden Modi nötig, selbst wenn die Summe der On-Zeiten identisch ist.

Bild 1: Je öfter eine Anwendung den CPU-Kern aus dem Standby-Modus aufweckt, desto mehr Energie ist für das Umschalten zwischen beiden Modi nötig, selbst wenn die Summe der On-Zeiten identisch ist.Texas Instruments

Den Schlafrhythmus beachten

Nach der CPU und den Peripheriefunktionen sind die Zeitabstände, in denen ein Mikrocontroller aus den Standby-Betriebsarten erwacht, ein weiterer wichtiger Faktor für den Stromverbrauch. Man kann davon ausgehen, dass bei MCUs, bei denen die Reduzierung des Energieprofils im Vordergrund steht, der Anteil der On-Phasen möglichst gering gehalten wird, während das System den Großteil der Zeit im Standby-Modus verbringt. Dies muss allerdings mit den Echtzeit-Anforderungen des Systems (beispielsweise für eine jede Sekunde zu aktualisierende Kalenderfunktion) in Einklang gebracht werden. Als weiteres Beispiel sind industrielle Sensoren zu berücksichtigen, die ADC-Abtastungen mit einer Rate von 1 kSample/s mit anschließender Datenauswertung und Verarbeitung erfordern. Andere Anwendungen werden dagegen möglicherweise nur alle zehn Sekunden oder mehr aktiviert und sind pro Tag insgesamt vielleicht nur eine Minute eingeschaltet (Bild 1).

Da es ineffizient wäre, alle Einschaltdauern und Sonderfälle abzudecken, liegt dem ULPBench-Benchmark ein Aktivierungsintervall von einer Sekunde zugrunde. Dies soll dafür sorgen, dass die MCU eine vernünftig lange Zeit im Power-Down-Betrieb verbringt, dass der Benchmark aber auch die Energie berücksichtigt, die für das Umschalten in den Stromspar-Modus und zurück anfällt. Das Energiebudget für die Aufweckphase ist in den Mikrocontroller-Datenblättern nicht immer explizit angegeben und stellt somit einen sinnvollen Teil der Benchmark-Auswertung dar.

Der Anfang ist gemacht

Die EEMBC-Arbeitsgruppe realisiert das ULP-Benchmark-Paket wegen der stark variierenden Komplexität der Applikationen in mehreren Entwicklungsphasen. Die erste Phase namens „Core Profile“ deckt die CPU, den Speicherzugriff, die Echtzeituhr und die Stromsparfunktionen ab. Das Core Profile eignet sich bereits für eine große Zahl von Anwendungen und stellt ein wertvolles Hilfsmittel zum Vergleichen verschiedener MCUs dar. Die Grundregel dieses Profils besagt, dass eine ULP-Applikation mehr als vier Jahre mit einer CR2032-Batterie (225 mAh) auskommen muss. Das typische Applikationsprofil weist mindestens eine aktive Phase pro Sekunde auf und führt während dieser aktiven Phase die vorgegebenen Aufgaben aus. Die Hardwareanforderungen an die MCU lauten:

  • CPU, RAM, nichtflüchtiger Speicher
  • RTC Timer/Zähler für den sekündlichen Aufweck-Interrupt
  • 32-kHz-Oszillator für die Echtzeituhr
  • Reset-Schaltung für einen ordnungsgemäßen Start
  • Erlaubte Versorgungsspannung von 3 V

Der Core-Profile-Benchmark besitzt zwei Betriebsarten. Im aktiven Modus führt die CPU einen vorgegebenen Umfang an Aufgaben aus. Im Stromsparmodus dagegen bleibt die CPU im Standby und die RTC weckt die CPU einmal pro Sekunde auf, um die vorgegebene Aufgabe abzuarbeiten. Dieses sekündlich ausgeführte Arbeitspensum besteht aus den folgenden Funktionen:

  • Array Access: Datenverarbeitungen beispielsweise mit Look-Up-Tabellen kommen in typischen Applikationen häufig vor.
  • Permutationsfunktion und eine einfache 8-Bit-Sortieraufgabe nach dem Bubble-Sort-Prinzip: Die MCU muss alle empfangenen Daten analysieren, sortieren und verarbeiten. Der Sortieralgorithmus bedient sich verschiedener Arten des Daten-Handlings.
  • Einfacher Filter mit 8- und 16-Bit-Berechnungen: Mathematische Funktionen sind zum Auswerten von Daten fast immer nötig. Sie sind jedoch auch für die Zeigerverarbeitung erforderlich. In diesem Codeblock werden unterschiedliche mathematische Funktionen im 8-Bit- und 16-Bit-Modus ausgeführt. Ein einfacher linearer Approximationsfilter arbeitet außerdem mit 32-Bit-Daten. Gleitkomma-Operationen und komplexe mathematische Funktionen sind dagegen nicht implementiert und werden stattdessen in einer späteren Phase von einem separaten Profil abgedeckt.
  • Einfacher Zustandsautomat: Die meisten Anwendungen nutzen einen oder mehrere Zustandsautomaten, um den Verarbeitungsablauf der Software zu steuern.
  • Thread Event Switch (TES): Das den Benchmark-Profilen zugrundeliegende Software-Framework TES ist ein einfacher Thread- und Taskschalter. Dieses System ermöglicht es dem Benchmark, mit der Zeit zu wachsen und auf derselben Softwarebasis immer mehr Profile zu integrieren. Dieser Teil der Software ist dafür zuständig, das Arbeitspensum einmal pro Sekunde abarbeiten zu lassen, nachdem er von der RTC getriggert wurde.
Bild 2: Screenshot der ULPBench-GUI und des Energy-Monitor-Tools während eines Tests. Die mit Core-Profil für ein Messfenster gemessene Energiemenge ist in der Grafik erkennbar.

Bild 2: Screenshot der ULPBench-GUI und des Energy-Monitor-Tools während eines Tests. Die mit Core-Profil für ein Messfenster gemessene Energiemenge ist in der Grafik erkennbar.Texas Instruments

Um die Benchmark-Resultate zu messen, stellt Texas Instruments ein spezielles Energy-Monitor-Tool bereit (Bild 2).

Den passenden Mikrocontroller per Benchmark auswählen

Der ULPBench-Benchmark wird eine Reihe von Profilen aufweisen, die sich an verschiedenen realen Anwendungen orientieren. Auf der Basis dieser Profile können Anwender die Anforderungen ihrer Applikation identifizieren und skalieren und daraufhin analysieren, wie viel Energie die anvisierte Anwendung mit einem bestimmten Mikrocontroller benötigen wird.

Bild 3: ULPBench mit Core-Profile-Werte für verschiedene Flash- und FRAM-basierte MSP430-Mikrocontroller. Der ULPMark-Wert berechnet sich aus 1000 / Energieverbrauch pro Sekunde, daher sind größere Werte besser.

Bild 3: ULPBench mit Core-Profile-Werte für verschiedene Flash- und FRAM-basierte MSP430-Mikrocontroller. Der ULPMark-Wert berechnet sich aus 1000 / Energieverbrauch pro Sekunde, daher sind größere Werte besser.Texas Instruments

Schon beim Vergleich der Ultra-Low-Power-Mikrocontrollerfamilie MSP430 ist beim Ausführen des Core-Profiles eine beträchtliche Streuung der Benchmark-Resultate zu beobachten (Bild 3). Ursache hierfür sind nicht nur mehrere Faktoren, die den Energieverbrauch bei der Verarbeitung der jeweiligen Aufgabe beeinflussen, sondern auch die Fähigkeit zum Energiesparen während der Power-Save-Phase sowie beim Wechsel zwischen den Betriebsarten. Außerdem wirken sich die Speichergröße und die daraus resultierende Belastung von Adress- und Datenbus aus, sowie die Prozesstechnologie und die Versorgungsspannung (ungeregelte Spannung oder LDO).

Wie in Bild 3 erkennbar ist, erzielt der Mikrocontroller MSP430FR5969 von Texas Instruments (Bild 4), der auf der TI-FRAM-Prozesstechnologie mit ihren extrem geringen Leckströmen beruht, in Verbindung mit einem intelligenten Power-Management-System einen sehr überzeugenden ULPBench-Core-Profile-Wert. Dieses Resultat zeigt, dass der Prozessor in einem weiten Spektrum von Anwendungen mit einem sehr knappen Energiebudget auskommt.

Bild 4: Blockschaltbild des FRAM-basierten Ultra-Low-Power-Mikrocontrollers MSP430FR5969 von TI. Dieses Modell übertrifft die Benchmark-Werte anderer MSP430-Varianten.

Bild 4: Blockschaltbild des FRAM-basierten Ultra-Low-Power-Mikrocontrollers MSP430FR5969 von TI. Dieses Modell übertrifft die Benchmark-Werte anderer MSP430-Varianten.Texas Instruments

Vorteile des Ultra-Low-Power-Benchmarks

ULPBench ist der erste umfassende Benchmark, der Entwicklern auf der Basis des Energieverbrauchs während der Echtzeit-Verarbeitung einer vorgegebenen Aufgabe eine objektive Methode für den Vergleich verschiedener Ultra-Low-Power-MCUs bietet. Jeder Mikrocontroller-Anbieter kann den Benchmark, portiert auf seine MCU-Architektur, bereitstellen und zusätzlich angeben, mit welchen Methoden sich der Programmcode optimieren lässt um die bestmöglichen Resultate zu erzielen. Darüber hinaus können Anbieter die beim Benchmarking verwendeten Einstellungen für Hardware (Peripherie) und Software (Compiler) angeben. Die Entwickler sparen hierdurch Zeit und Aufwand beim Verstehen der jeweiligen prozessorspezifischen Energiesparmethoden und können stattdessen einfach den zur Verfügung gestellten ULPBench-Code als Referenz für den bestmöglichen Energieverbrauch nutzen. Dies hilft dem Anwender, die Mikrocontroller-Evaluierung schneller, besser portierbar, effizienter und außerdem unvoreingenommen durchzuführen.

Zusätzlich können bei Bedarf mit wenig Aufwand zusätzliche Aufgaben hinzugefügt, die Tests anschließend wiederholt und die Auswirkungen auf den Energieverbrauch untersucht werden. Das Energy-Monitor-Tool und die grafische Oberfläche können auf allen Evaluierungs-Hardwareplattformen zum Ermitteln des EEMBC-ULPBench-Werts dienen.

Künftige ULPBench-Profile

Das Core Profile ist die erste Phase einer Reihe von Benchmark-Profilen für Ultra-Low-Power-Anwendungen. Die zweite, als „Peripheral Profile“ bezeichnete Phase, wird bestimmte Peripheriezugriffe und Funktionalitäten ergänzen. Dieses Profil umfasst A/D-Wandlungen, die PWM-Erzeugung, die SPI-Kommunikation und die RTC-Funktionalität. Im Anschluss daran sind weitere Profile in der Diskussion, die für anspruchsvollere Datenverarbeitungen beispielsweise für Filter und die Auswertung analoger Signale benötigt werden, sowie für Komponenten des Internet of Things (IoT).

Das EEMBC will den Entwicklern mit ULPBench bei der möglichst schnellen und effizienten Evaluierung und Auswahl desjenigen Mikrocontrollers helfen, der sich für die jeweilige ULP-Anwendung am besten eignet. Der ULPMark-Wert kann zusammen mit dem von ULPBench bereitgestellten Profil helfen, das ständig wachsende Angebot an ULP-Mikrocontrollern deutlich einzugrenzen.

Energie, Leistung und Strom

Umgangssprachlich verbrauchen Geräte Strom und man spricht von Stromspar-Anwendungen. Dennoch verwendet der ULPBench den Begriff „Energie“ statt „Strom“. Zum Messen und Vergleichen der Leistungsaufnahme von Applikationen können mehrere Parameter verwendet werden, die jeweils einen eigenen Betrachtungsstandpunkt zeigen:

  • Strom: Ströme lassen sich mit einem Amperemeter leicht messen, jedoch muss das Instrument einen enormen Dynamikbereich von mehreren Zehnerpotenzen abdecken (zum Beispiel vom dreistelligen Nanoampere- bis in den zweistelligen Milliampere-Bereich). Dies muss zudem mit hinreichender Genauigkeit geschehen, um gültige Vergleiche ziehen zu können. Es erfordert auch, dass die gemessenen und angezeigten Ströme stets Durchschnittswerte sind, die über mindestens eine Sekunde gemittelt sind und auch etwaige Spitzen beim Wechsel zwischen verschiedenen Power-Modi einschließen. Es wird also ein teures High-End-Amperemeter benötigt.
  • Leistung: Die Leistung ist eine Funktion des Stroms und der Spannung. Im Batteriebetrieb sinkt die Versorgungsspannung mit der Zeit umso stärker je mehr Strom aus der Batterie entnommen wurde. Im Normalfall ist aber die Stromaufnahme der MCU von der Versorgungsspannung abhängig.
  • Energie: Diese Größe summiert die aufgenommene Leistung über die Zeit. Dementsprechend eignet sich die Energie ideal zur Evaluierung der Betriebszeit einer ULP-Anwendung oder eines per Energy Harvesting versorgten Systems. Aus diesem Grund verwendet ULPBench die Energie als Vergleichskriterium.