Stromverbrauch senken Energiesparen beim SoC-Design

Das Senken der Stromaufnahme ist ein wichtiges Anliegen der Anwender von System-on-Chip-Bausteinen geworden. Obwohl SoCs aufgrund hochintegrierter Prozesse ein gutes Preis-Leistungsverhältnis bieten, ist der Stromverbrauch dieser Entwicklung nicht im gleichen Maße gefolgt. Das wesentliche Problem ist, dass viele SoC-Designs nicht alle Verbesserungen bezüglich Energieeffizienz nutzen, die kleinere Prozessgeometrien ermöglichen.

Der derzeitige SoC-Design-ansatz fokussiert vor allem auf Produktivität. SoCs werden nur selten von Grund auf neu entwickelt, sondern aus bereits bestehendem IP (Intellectual Property) zusammengestellt. Diese Art der Design-Wiederverwendung ermöglicht den Einsatz bewährter und getesteter Schaltkreise, was fast so einfach ist, wie das Platzieren von Bauteilen auf einer virtuellen Leiterplatte.

Obwohl sich ein SoC-Entwickler sicher sein kann, dass der wiederverwendete Block eine Reihe strenger Tests durchlaufen hat, wird jeder Block unter einer Reihe von technischen Annahmen entwickelt, die sich mit einer neuen Prozesstechnik möglicherweise nicht so leicht umsetzen lassen. So kann ein Blockdesign, das vor zehn Jahren erstmalig implementiert wurde, Clock-Gating verwenden, um die aktive Leistungsaufnahme zu verringern - was zu der Zeit ein Hauptanliegen war. Dies trägt aber wenig zur Energieeinsparung bei, wenn der Block inaktiv ist.

Obwohl Entwickler von Low-Power-SoCs Halbleiterfertigungsprozesse bevorzugen, die keine großen Substrat-Leckströme aufweisen, verschwendet jeder IP-Core, der über einen längeren Zeitraum in Betrieb ist, eine vergleichsweise große Menge an Energie. Der beste Weg, diese Leckenergie zu verringern, ist das Abschalten des Cores, wann immer es möglich ist. Diese Optimierung ist in vielen stromsparenden SoCs und Mikrocontrollern bereits integriert, was zu einem Nachrüsten von Power-Gating-Schaltungen bei den IP-Cores führt, die in Low-Power-SoCs integriert werden.

Das einfache Abschalten von IP-Cores, wenn sie nicht benötigt werden, führt aber nicht unbedingt zur energieeffizientesten Architektur. Wichtig ist die Art und Weise, wie die Funktionsblöcke kombiniert und gesteuert werden. Low-Power-SoC-Architekturen erfordern immer Ideen jenseits üblicher Vorgehensweisen: Ein SoC-Design sollte nicht einfach als eine Sammlung von Hardwarekomponenten mit dazugehöriger Software angesehen werden.

Ein energiesparendes Design verlangt die Kombination aus Software, Hardware und Applikationsverständnis, wobei Abwägungen zwischen flexibler, softwarebasierter Verarbeitung und der Hardware getroffen werden müssen. Selbst kleine Änderungen der Hardware-Implementierung können große Unterschiede beim Gesamtstromverbrauch hervorrufen. Eine Wiederverwendung von Designblöcken geschieht am besten auf der Architekturebene.

Aus der Architektur heraus werden optimierte Implementierungen generiert, die auf den Anforderungen der Zielapplikation und der verfügbaren Prozesse basieren. Dieses Umdenken bei der Design-Wiederverwendung ermöglicht den Funktionsübergang zwischen Hardware- und Softwaredomänen, was zu einer besseren Energieeffizienz führt.

Datenverarbeitung optimieren

Betrachten wir zum Beispiel die Implementierung einer Sensoranwendung mit einem Mikrocontroller der »EFM32-Gecko«-Reihe von Energy Micro. Seit der Einführung des Apple iPhone haben die Hersteller von Unterhaltungs- und Kommunikationselektronik die Vorteile eines kapazitiven Berührungsbildschirms erkannt und bauen diesen zunehmend in ihre Produkte ein, um intuitiver bedienbare Benutzerschnittstellen bereitzustellen.

Diese Sensoren erfordern jedoch eine Menge Datenverarbeitungsleistung, die in Form von Software auf einem universellen Prozessor abläuft. Hier kann die Leistungsoptimierung sehr schwierig sein, wenn das Problem nicht von Anfang an auf der Systemebene adressiert wird. In einer Implementierung mit kapazitiven Sensoren enthält der Sensorschaltkreis einen freilaufenden RC-Oszillator. Dieser generiert eine sich ändernde Erregerspannung bei einer mehr oder weniger konstanten Frequenz.

Nähert sich der Finger eines Anwenders dem Sensor, ändert sich die Gesamtfrequenz des Schaltkreises, da sich die Kapazität innerhalb des Sensorelements erhöht. Normalerweise erkennt Software diese Frequenz-änderung mithilfe eines Zählers. Fällt der Zählerwert nach einer festgelegten Zeitspanne deutlich vom Nennwert, registriert der Algorithmus dies als Berührung.

Das Problem bei dieser Umsetzung ist, dass die CPU während des Lesevorgangs des Sensors aktiv sein muss. In der Regel zählt ein Timer bis auf Null runter, und während dieser Zeit wird gezählt, wie viele positive Ausschläge der Oszillator des Touchsensors generiert hat. Bei einer Anwendung mit Benutzerschnittstelle weiß das Sensor-Subsystem nicht, wann die nächste Berührung durch den Benutzer erfolgt.

Der Host-Mikrocontroller kann daher regelmäßig in den Sleep-Modus übergehen - in der Erwartung, dass die CPU, die mit mehreren Megahertz läuft, eine vergleichsweise große Zahl an Taktzyklen zwischen den Berührungen vervollständigt. Längere Sleep-Phasen beeinträchtigen allerdings die Reaktionszeit. Einige Berührungen würden dann nicht korrekt registriert, bis das System vollständig hochgefahren ist und wieder genaue Messungen durchführen kann.

Eine energieeffizientere Methode ist es, diese Operationen in Hardware auszuführen und die CPU nur dann zu aktivieren, wenn eine Berührung erkannt wird. Ein Prozessor verbraucht mehr Energie bei der Vergabe von Befehlen und Daten an die Ausführungseinheiten als bei Berechnungen selbst. Forscher des ELM-Low-Power-Prozessor-Projekts an der Stanford University kamen zu dem Schluss, dass allein die Befehlsvergabe 42% des gesamten Prozessor-Stromverbrauchs ausmacht.

Im Falle eines kapazitiven Sensor-Subsystems ist es möglich, einen Schaltkreis zu bilden, der den Oszillator regelmäßig anregt, einen Timer setzt und dann die Pulse zählt, bevor der Timer abläuft. Am Ende des Prozesses - wenn sich der Zählerwert unter dem gesetzten Minimum befindet - kann ein Interrupt erstellt werden, der den Prozessor aktiviert. Dabei muss der Prozessor nicht regelmäßig geweckt werden, vorausgesetzt es sind keine anderen Managementfunktionen durchzuführen.

Der Prozessor und seine Software werden nur dann aktiv, wenn Arbeit ansteht. Dies verringert den Stromverbrauch auf ein Mindestmaß, das für die jeweilige Benutzeraktivität erforderlich ist. Eine hoch universelle Hardware-einheit kann noch mehr Sensor-anwendungen energieeffizient bedienen. Ein kostengünstiger induktiver Sensor steht zum Beispiel vor demselben Problem in Sachen Stromverbrauch wie ein kapazitiver Berührungsbildschirm. Induktive Sensoren kommen in Näherungsschaltern zum Einsatz und bieten eine einfache Ein-/Aus-Ausgabe, womit festgestellt wird, ob ein leitfähiges Objekt vorhanden ist oder nicht.

Induktive Erkennung

Induktive Näherungssensoren erkennen magnetische Verluste, da auf einer leitfähigen Oberfläche ein induzierter Strom entsteht, oder ein externes Magnetfeld vorliegt. Wird ein Wechselstrom an eine Spule angelegt, entsteht ein magnetisches Wechselfeld. Nähert sich ein leitfähiges Objekt dem Sensor, erzeugt dieser aufgrund des wechselnden Magnetfelds Wirbelströme auf dem abgetasteten Objekt.

Jedes Mal, wenn Energie zwischen den beiden Schaltkreiselementen übertragen wird, treten Verluste auf, welche die Schwingungen abschwächen. Diese Dämpfung geht schneller vonstatten, wenn sich ein metallisches Objekt in der Nähe der Spule befindet. Durch das Erkennen dieser Dämpfung kann ein Sensoralgorithmus festlegen, ob sich ein Objekt in der Nähe des Sensors befindet. Dies geschieht durch das Erfassen der Spannungsänderung in regelmäßigen Abständen und dem Vergleich mit einer Referenzspannung.

Fällt die Eingangsspannung unterhalb dieses Referenzwertes, kann der Algorithmus ein Annäherungsereignis auslösen. Im Falle kapazitiver Sensorik erfordert eine Software-Implementierung, dass der Prozessor aktiviert wird, um das Anregungssignal zu erzeugen und die ADC-Eingänge zu verarbeiten. Bei einer Durchflussmessung (Wasser oder Gas) kann nur schwer festgestellt werden, wie oft der Prozessor aktiviert werden muss, um sicher zu sein, dass alle Umdrehungen des Laufrades registriert werden. Die Batterieversorgung darf nicht für längere Zeit entfallen, da sonst die CPU aktiviert wird und feststellen muss, dass keine nützlichen Eingangsdaten zur Verarbeitung anstehen.

Die Sensorüberwachung zeigt Härte

Die Implementierung der Sensorüberwachung in Hardware kann den Energieverbrauch des Systems erheblich senken. Die Hardwarebauteile, die für die induktive Sensorik erforderlich sind, unterscheiden sich jedoch leicht von denen für die kapazitive Sensorik. Viele Funktionen sind gleich, beispielsweise ein D/A-Wandler, der das Anregungssignal bereitstellt, sowie Timer und Zähler, mit denen die Messperioden festgelegt werden. Der induktive Sensor erfordert aber einen zusätzlichen A/D-Wandler und die Verdrahtung der einzelnen Bauteile auf eine andere Art und Weise.

Die Gemeinsamkeit zwischen den beiden Arten von Sensorschnittstellen lässt sich durch sorgfältige Planung eines Hardware-Subsystems nutzen. Dabei muss erkannt werden, dass die wesentlichen Änderungen darin bestehen, wie die einzelnen Hardwarekomponenten (A/D- und D/A-Wandler, Zähler, Timer) miteinander verbunden sind und wie die Software-Sensorikalgorithmen zusammengesetzt sind.

Die Algorithmen sind in erster Linie zustandsbasiert und bewegen sich zwischen Zuständen, die auf bestimmten wahren Eigenschaften basieren: etwa der Zählerwert, der nach dem Timer-Ablauf unter einem vorher bestimmten Wert liegt, oder der ADC-Eingang, der unter einer bestimmten Schwelle liegt, bevor der Timer abläuft.
Diese Bedingungen lassen sich über eine Zustandsmaschine überwachen und steuern.

Ein Problem bei vielen programmierbaren Zustandsmaschinen ist, dass sie nur dann reagieren und feste Ausgangswerte erzeugen, wenn sie sich von einem in den anderen Zustand bewegen. Beim sogenannten LESENSE (Low Energy Sensor Interface) werden die Zustände und Bedingungen über Deskriptoren programmiert, die sich miteinander verketten lassen, um je nach Bedarf relativ komplexe Befehle zu bilden.

So ist es möglich, sehr komplexe Logik zu erstellen, bevor überhaupt eine Aktivierung der CPU erforderlich ist (Bild 1). So kann ein Verbrauchszähler mit einer softwareintensiven Implementierung mit einer Einschaltdauer arbeiten, in der die CPU nur 2% der Zeit aktiviert ist.

Läuft die CPU mit 10 MHz und ist sie mit 200 µA/MHz und einem »Deep-Sleep«-Stromverbrauch von 2 µA ausgewiesen, kann der Zähler mithilfe zweier AA-Zellen bis zu sieben Jahre in Betrieb sein. Die beschriebene LESENSE-Einheit kann diesen Zyklus auf 1% verringern und die Batterielebensdauer auf fast 13 Jahre erhöhen.

Die Kombination aus Hardware und Software, die insgesamt in ein prozessorbasiertes System integriert werden kann, und die Aufgabenverteilung zwischen beiden garantieren, dass die volle Flexibilität der Software nur dann abgerufen wird, wenn sie erforderlich ist. Das allgemeine Verhalten der Anwendung auf Systemebene bleibt das gleiche, sodass eine Wiederverwendung des gesamten Frameworks möglich ist.

Unterschiede in der Implementierungsarchitektur ermöglichen aber eine optimierte Lösung mit geringerer Stromaufnahme (Bild 2). Die Wiederverwendung der Architektur, gekoppelt mit der Implementierungsoptimierung, wird durch Softwaretools ermöglicht. Die aktive Rückkopplung des Energieverbrauchs ist ein wesentliches Merkmal des »Simplicity Studio« und wird über den Profiler »energyAware« ermöglicht.

Dieses Tool führt die Embedded-Entwicklungsumgebung über herkömmliche Einsatzmöglichkeiten wie Code-Erstellung und Debugging hinaus. In stromsparenden Anwendungen lassen sich möglicherweise alle Designfehler entfernen, und trotzdem erfüllt das System nicht das wesentliche Kriterium: die Energieverbrauchsbilanz.

Der Profiler analysiert den Code in einem System nicht nur nach seiner Funktion, sondern auch nach seinem Energieverbrauch.

Entwicklern steht somit ein Tool zur Verfügung, mit dem sie feststellen können, welche Funktionen den größten Stromverbrauch verursachen.

Damit lässt sich entscheiden, ob einige Funktionen in Hardware ausgelagert werden, zur Implementierung in Peripherie wie etwa LESENSE, oder ob sie umstrukturiert werden sollen, damit die CPU längere Zeit inaktiv bleiben kann.

Die Erfahrung zeigt, dass es möglich ist, erhebliche Einsparungen beim Energieverbrauch zu erzielen, wenn man die Art und Weise überdenkt, wie die IP-Blöcke innerhalb von SoCs angeordnet, konzipiert und realisiert werden.

Weitere Stromeinsparungen lassen sich durch ein besseres Verständnis der Anwendung und der daraus folgenden optimierten Organisation der Blöcke auf Systemebene erzielen (Bild 3).

Über den Autor:

Rasmus Christian Larsen leitet das Techniksupport-Team bei Energy Mikro.