32-Bit-MCUs Spezielle Architektur steigert die Effizienz

Autor / Redakteur: Régis Latawiec* / Holger Heller

Derzeitige 16- und 32-Bit-Mikrocontrollerarchitekturen sind in modernen elektronischen Geräten nur begrenzt einsetzbar. Der in den 80-/90er-Jahren entwickelte Befehlsvorrat ist für die heutigen Algorithmen nicht optimal und schränkt meist die Leistungsfähigkeit der MCU ein. Eine spezielle Architektur überwindet diese Einschränkungen.

Anbieter zum Thema

Im Zuge steigender Leistungsanforderungen werden die Taktfrequenzen immer höher, was den Leistungsverbrauch auf Werte hochtreibt, die für Embedded-Systeme nicht mehr tragbar sind. Obwohl 32-Bit-Prozessoren im Prinzip eine Leistungsfähigkeit von 100 MIPS erreichen können, kommt ein aktueller 32-Bit-Mikroprozessor mit integriertem Flash kaum über eine Performance von 50 Dhrystone MIPS (DMIPS) hinaus. Dies ist bedingt durch Beschränkungen in der Art und Weise, wie der Kern mit den Speichern und insbesondere mit den Flash-Speichern verbunden ist, die ja bekanntlich eine langsame Zugriffszeit haben.

Die Architektur des AVR32 ist so konzipiert, dass diese Beschränkungen überwunden werden. Sie bietet eine hohe Leistungsfähigkeit und Codedichte sowie eine niedrige Leistungsaufnahme. Die erste Implementierung dieses Prozessorkerns (AVR32 AP) wurde von Atmel 2006 eingeführt und war für Prozessoren für rechenintensive Anwendungen vorgesehen. Jetzt steht der für Flash-MCUs optimierte AVR32 UC zur Verfügung. Das erste Derivat dieser Familie (AVR32 UC3A) bietet 80 DMIPS bei 66 MHz und verbraucht bei 3,3 V nur 40 mA. Der Leistungsverbrauch ist mit 1,65 mW/DMIPS um einen Faktor von 1,7 bis 4,3 besser als bei anderen vergleichbaren Architekturen mit ähnlichen Funktionsmerkmalen.

Der AVR32-UC-Core (Bild 1) ist branchenweit der erste, der ein Einzyklen-Lese-/Schreib-SRAM und eine direkte Schnittstelle zur Pipeline aufweist, wodurch der Systembus umgangen wird. Dies ermöglicht eine schnellere Ausführung, einen höheren Zyklendeterminismus und geringeren Leistungsverbrauch. Über ein Hochgeschwindigkeitsbus-(HSB-)Slave-Interface können DMA-Controller oder andere HSB-Master Daten direkt in das Tightly Coupled SRAM schreiben oder von dort lesen. Eine Schlichtung erfolgt, wenn CPU und ein Hochgeschwindigkeits-Slave gleichzeitig Zugriff anfordern. Die Prioritätenstruktur lässt sich entsprechend den Anforderungen programmieren.

Dreistufige Pipeline mit kurzen Wegen

Der AVR32 UC umfasst Funktionen zum Leistungsmanagement, eine Speicherschutzeinheit (MPU), sowie eine 32-Bit-Flash-Schnittstelle mit Einzyklenzugriff. Außerdem bietet er einen 6-stufigen prioritätsgesteuerten Interrupt-Controller mit nicht maskierbarem Interrupt (NMI) und schneller Ereignisverarbeitung. Die dreistufige Pipeline (Bild 2) benötigt keine Anweisungs- oder Datencaches, kein Data Forwarding, keine Hazard-Erkennung oder Prädiktion von Verzweigungen. Die Stufe „Anweisung holen“ wurde so konzipiert, dass das Holen von Anweisungen aus dem integrierten Flash optimiert wird. Die Pipeline-Stufe holt vorab eine 32- oder zwei 16-Bit-Anweisungen pro Taktzyklus und lädt diese in einen internen Anweisungspuffer.

Dieser Prefetch-Puffer verhindert ein Anhalten der Pipeline aufgrund möglicher Schlichtungslatenzen auf dem Multi-Layer-Systembus während des Fetch-Zugriffs. Außerdem kann die Ausführung aus einem On-Chip Dual-Bank-Flash bei maximaler CPU-Taktfrequenz aufrechterhalten werden, und zwar mit Einfügung eines einzigen Wartezustands, und ohne dass die Pipeline bei sequenzieller Ausführung angehalten werden muss, wenn sie auf Anweisungen aus dem Flash wartet. Der eingefügte Wartezustand führt lediglich zu einer vernachlässigbar geringen Reduktion im Durchsatz pro Zyklus von 1,3 auf 1,2 DMIPS/MHz (8%)

Die zweite Stufe dekodiert die Anweisungen und erzeugt die notwendigen Signale für die Ausführung der Anweisungen. Die dritte Stufe besteht aus drei Ausführungsuntereinheiten: ALU, Multiplikations- und Lade-/Speicher-Einheit. Die ALU führt Rechen- und Logikoperationen durch, einschließlich Hardwaredivision. Die Multiplikationseinheit führt die verschiedenen Multiplikations- und Multiplikations-/Akkumulations-(MAC-)Vorgänge durch, die in der Instruction Set Architecture (ISA) zur Verfügung stehen, und die Lade-/Speichereinheit übernimmt die Einzyklen-Speicherzugriffe auf das SRAM oder Zugriffe auf den Hochgeschwindigkeitsbus (HSB).

Vereinfachte Programmierung

Im AVR32-UC-Core bestehen keine Daten-Hazards. Die Registerdaten werden daher noch während des Taktzyklus aktualisiert, wenn die Anweisungen ausgeführt werden. Dies vereinfacht die Assembler-Programmierung im Vergleich zu tieferen Pipelines, da kein Code-Scheduling erforderlich ist. Der Core hat die gleiche ISA wie sein Vorgänger (AVR32 AP). Mehr als 220 Anweisungen stehen als kompakte 16-Bit- und erweiterte 32-Bit-Anweisungen zur Verfügung. Die ISA ist so konzipiert, dass Datentransaktionen zwischen dem Kern und den Speichern auf ein Minimum beschränkt werden.

Dadurch wird sowohl der Leistungsverbrauch als auch die Anzahl der Taktzyklen reduziert. Der Code des AVR32 UC ist regelmäßig 5 bis 20% kleiner als ein für den ARM-Thumb-Anweisungsvorrat kompilierter Code. Wenn der Code für eine hohe Ausführungsgeschwindigkeit optimiert ist, fällt der AVR32-UC-Code 30 bis 50% kompakter aus als Code, der für den ARM-Anweisungsvorrat kompiliert wird.

Bei vielen Anwendungen, z.B. bei Netzwerk-Anwendungen, ist es bei der Handhabung von Datenpaketen wichtig, Bitfelder effizient aus einem Register extrahieren oder Bitfelder in ein Register einfügen zu können. Im Unterschied zu den meisten anderen Prozessorkernen umfasst die AVR32-ISA-Anweisungen zum Einfügen benutzerspezifizierter Bitfelder und zur Null- oder Zeichenerweiterungsextraktion. Alle diese Anweisungen können in einem einzigen Zyklus ausgeführt werden. Dies ist wesentlich schneller als in einer traditionellen Architektur, bei der eine Reihe von Schiebe- und Logikoperationen durchgeführt werden müssen, um die gleiche Funktion zu erreichen.

Definiertes Verhalten bei mehreren Ereignissen

MCUs müssen gut bei der Durchführung von Rechenoperationen sein, müssen gleichzeitig aber auch Steuerungsaufgaben auf der Grundlage von Bitoperationen effizient ausführen. Üblicherweise basiert die Änderung eines Bitwerts in einem 32-Bit-Register auf einer Abfolge mehrerer Anweisungen: Register lesen – entsprechenden Bitwert mit Hilfe logischer Operatoren wie ODER und UND ändern – aktualisierten Wert in Zielregister schreiben. Der Anweisungsvorrat des AVR32 UC beinhaltet Anweisungen zur Durchführung von Bitmanipulationen an Speicherplätzen. Diese führen Lese-/Änderungs-/Schreibvorgänge im Speicher durch und setzen oder löschen ein Bit, oder schalten ein bestimmtes Bit im internen Speicherraum oder in einem peripheren Speicher um.

Beim AVR32 UC haben die verschiedenen Ereignisquellen, z.B. ungültiger Opcode und externe Interruptanforderungen unterschiedliche Prioritäten. Dadurch ist ein gut definiertes Verhalten gewährleistet, wenn mehrere Ereignisse gleichzeitig eintreten. Außerdem können Ereignisse mit höherer Priorität die Verarbeitung von anstehenden Ereignissen mit niedrigerer Priorität unterbrechen. Wird ein Interrupt akzeptiert, werden automatisch acht Register im Stack gespeichert. Die Ausführung der Interupt-Handler-Routine wird dann bei der effektiven Adresse fortgesetzt, die aus dem EVBA- und dem Autovektor-Offset berechnet wird.

Bei der Wiederaufnahme der Verarbeitung aus dem Interrupt Handler werden alle zuvor gespeicherten Registerinhalte wieder aus dem Stack entnommen, bevor die nächste Anweisung aus dem Hauptanweisungsfluss ausgeführt wird. Bei Erkennung eines Ereignisses erfolgt die Ausführung der ersten Anweisung aus dem Event Handler innerhalb von 12 Taktzyklen (bei 66 MHz innerhalb von 181 ns). Außerdem ist die CPU in der Lage, mehrere Zyklen umfassende Anweisungen zu unterbrechen, wenn Interrupt-Anforderungen über mehr als fünf Taktzyklen anstehen, wodurch die Interruptlatenz auf maximal 16 Taktzyklen beschränkt wird.

*Régis Latawiec ist AVR32 Product Marketing Manager bei Atmel in Rousset, Frankreich.

Jetzt Newsletter abonnieren

Verpassen Sie nicht unsere besten Inhalte

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

(ID:211268)