Silicon Labs 8-Bit-Core CIP-51 kann mit 32-Bit- Mikrocontrollern mithalten

8-Bit-Mikrocontroller erscheinen als veraltet. Doch zusammen mit aktuellen Prozesstechniken und moderner Mixed-Signal-Peripherie kann ihre Performance bei den meisten Steuerungsaufgaben mit anderen CPU-Architekturen mehr als nur mithalten, wie das Beispiel des CIP-51-Cores von Silicon Labs zeigt.

Der ehrwürdige »8051« ist auch heute noch sehr lebendig. Die Architektur wurde modernisiert, um heutigen Prozesstechnologien und Rechenanforderungen zu genügen. Moderne MCU-Architekturen auf 8051-Basis sind immer noch codekompatibel zu Intels Originalbaustein. Um aber die Leistungsfähigkeit zu erhöhen, wurde in der Vergangenheit die Zyklengenauigkeit geopfert. Heute findet sich eine Vielzahl baulicher Varianten auf dem Markt, einschließlich der MCU-Version von Silicon Labs. Diese hat sich in einen CISC-Baustein (Pipelined Complex Instruction Set Computing) mit Fetch/Decode/Execute-Pipe-Stufen gewandelt. Dieser Core wird als »CIP-51« bezeichnet und bildet die Grundlage aller 8-Bit-Mixed-Signal-MCUs des Unternehmens.

Die 8051-Architektur eignet sich gut als CPU für heutige platzsparende, funktionsreiche MCUs. Durch die Architektur lassen sich On-Chip-Peripherie und flexible I/Os einfach hinzufügen, sodass sich das Angebot von 8-Bit-Bausteinen leicht erweitern lässt. Einige Funktionen, welche die Rückwärtskompatibilität beeinträchtigen, wurden zur 8051-Architektur hinzugefügt. Dies ist aber nur dann der Fall, wenn die-se Funktionen aktiviert werden.

Bild 1 zeigt, dass die Basisarchitektur nahezu identisch zum Original-8051 ist, was Kompatibilität auf Befehlsebene garantiert. Im Vergleich zu den heute wesentlich fortschrittlicheren CPU-Architekturen kann der Controller seine Rechenfunktion sehr gut ausführen. So erlauben zum Beispiel die meisten registerbasierten RISC-Kerne nur ALU-Operationen (Arithmetic Logic Unit) mit Werten, die im Register gespeichert sind. Um zwei Werte »Und« zu verknüpfen, müssen diese zuerst in das Register verschoben werden, bevor sie verarbeitet werden können. Mit der 8051-Architektur kann diese Operation mit den Werten erfolgen, die direkt in den Peripherieregistern gespeichert sind. Damit kann der Controller schnelle Steuerungsfunktionen ausführen.

Wenn eine Anwendung einen I/O-Port umkehren muss – und zwar auf Basis der Polarität eines anderen I/O-Pins oder mehrerer Pins – kann diese Aufgabe mit einer einfachen Test- oder Logikoperation des steuernden I/O-Pins beziehungsweise -Bus und einem »Write« auf die entsprechende Port-Steuerlogik durchgeführt werden. Mit der 8051-Architektur lassen sich diese Funktionen in zwei Zyklen abarbeiten, was eine schnelle Reaktionszeit ermöglicht. Von dieser Schnelligkeit können moderne 16- und sogar 32-Bit-Architekturen mit ihrer Vielzahl an Bushierarchien und nicht-deterministischer Event-Generierungslogik nur träumen.

Missverständnisse und Einschränkungen

Ein weiteres häufiges Missverständnis bei einem 8-Bit-Controller wie dem 8051 ist, dass seine Codedichte im Vergleich zu modernen 16- und 32-Bit-Architekturen gering sei. Natürlich gibt es Funktionen, die sich nicht in 8-Bit-Architekturen implementieren lassen, zum Beispiel eine Multiplikation zweier 16-Bit-Worte.

Doch auch für diese Art von Operation lässt sich die Codedichte vergrößern, indem man in der MCU ein 16x16-Multiplizierer in Hardware implementiert. Generell leiden Steuerungsanwendungen, die mit Daten in Bytegröße arbeiten, nicht unter diesen Folgen. Da 8-Bit-Maschinen auch wenig Overhead-Code aufweisen, ist die gesamte Codedichte für Steuerungsfunktionen höher, als wenn die gleichen Funktionen auf 16-Bit- und 32-Bit-Maschinen implementiert sind.

Ebenfalls falsch verstanden wird, dass die Interrupt-Verarbeitung der 8051-Architektur langsam sei und das Speichern sowie Wiederherstellen des Zustands zu lange dauert. Der 8051 verarbeitet mehrere 
Threads über seine Registerdatei mit 32 Registerbänken. Tritt ein Interrupt auf und der Zustand der Registerdatei muss gesichert werden, kann die CPU den Kontext schnell umschalten, indem sie einfach auf eine andere Registerbank wechselt. Dieser Ansatz schließt natürlich nicht aus, dass der Akkumulator und ein paar andere relevante Register mit zu speichern sind.

Die Original-8051-Architektur unterstützt nur zwei Interrupt-Prioritäten. Dies funktioniert in Bausteinen mit wenig Peripherie sehr gut. Da aber immer mehr Peripherie integriert wird, ist eine feinere Granularität beim Interrupt-Handling erforderlich. Die neueren 8051-basierten MCUs von Silicon Labs unterstützen bis zu vier Interrupt-Prioritäten. Eine feinere Interrupt-Granularität erlaubt besser vorhersagbare Echtzeitfunktionen in einer peripheriereichen Umgebung.

Eine weitere Einschränkung des 8051-Cores (und anderer 8-Bit-Architekturen) ist, dass der gesamte verfügbare Coderaum auf 64 KByte begrenzt ist. Einige 8-Bit-Bausteine mit umfangreicher Peripherie nutzen Code-Stacks, die wesentlich größer sind als der verfügbare 64-KByte-Adressraum. Um diesem Bedarf gerecht zu werden, hat Silicon Labs eine innovative Code-Banking-Technik in seine 8051-basierten MCUs implementiert, die eine Erweiterung dieses Raums ermöglicht. Mit dieser Technik und einem C-Compiler, der die Funktion überträgt, bietet sich dem Programmierer ein nahtloser Adressraum, der keine Schwierigkeiten bereitet.

Die 8051-Architektur unterstützt von Grund auf nur 256 Special Function Registers (SFRs). Dies schränkt ressourcenlastige Systeme sehr ein. Um diese Einschränkung zu umgehen, führte Silicon Labs eine Paging-Funktion für die SFR-Map ein. Damit lassen sich wesentlich größere Registerräume nutzen. Einige der größeren 8-Bit-MCUs des Unternehmens verwenden bis zu fünf Pages. Die meisten Bausteine verfügen über mindestens zwei Pages, wobei eine Page für die Debug-Steuerlogik reserviert ist, auf die der Entwickler keinen Zugriff hat.

Spezielle Speicherschnittstelle

In einer modernen Fetch/Decode/Execute-Maschine kommt es auch auf eine schnelle Speicherschnittstelle an. Dies ermöglicht Befehlsaufrufe bei jedem Zyklus. Mit Flash-Speicher wird dieser Ansatz sehr anspruchsvoll, da die Flash-Zugriffszeiten mit der CPU-Geschwindigkeit nicht mithalten können. Deshalb fügen die meisten Anbieter von 8-Bit-MCUs Befehls-Prefetch-Puffer und/oder Cache-Speicher hinzu. Prefetch-Puffer ermöglichen eine definierte Abwicklung der linearen Codeausführung. Bei Verzweigungen (Branching) korreliert der Zyklusnachteil mit der Tiefe des Prefetch-Puffers, der in den meisten Fällen nur 2 Byte tief ist, bei den 100 MHz schnellen 8051-basierten MCUs von Silicon Labs sind die Puffer gar 4 Byte tief. Zwar beseitigt ein Cache Schleifennachteile, solange die Schleife in den Cache passt. Verpasst die Schleife aber den Cache, kann dies einiges an Indeterminismus in den Befehlsablauf tragen. Darunter kann das Echtzeitverhalten leiden. Anstatt einen Cache zu implementieren, hat Silicon Labs Branch-Target- und Prefetch-Puffer auf einigen seiner schnellen 8-Bit-MCUs implementiert.

Die Sicherheit des Flash- oder nichtflüchtigen Speichers (NVM) ist ein weiteres Problem bei 8-Bit-MCUs. Dazu hat Silicon Labs mehrere Flash-Bereiche in seine 8-Bit-MCUs integriert, die verschiedene Schutzgrade bieten. MCU-Anbieter können ihre Produkte damit an Kunden versenden, die ihr eigenes Software-IP in die MCUs programmieren wollen, aber die Softwaretreiber und APIs des Anbieters verwenden möchten.

Moderne, 8051-basierte MCUs

Bild 2 zeigt den »C8051F850« von Silicon Labs, ein Beispiel für eine moderne MCU auf Basis des CIP-51-Cores. Die 8-Bit-MCU wird in 16-, 20- und 24-Pin-Standardgehäusen mit kleiner Anschlussfläche ausgeliefert. Die umfangreiche Mixed-Signal-Peripherie (z.B. ein SAR-ADC mit 10 Bit bei 800 KSample/s oder 12 Bit bei 200 KSample/s) ist deshalb möglich, weil der schnelle Rechenkern den Datendurchsatz dieser Peripherie unterstützen kann. Um trotz der umfangreichen Peripherie die Anzahl der Anschlüsse beschränkt zu halten, hat der Chiphersteller einen Priority-Crossbar-Encoder implementiert, der jeder Peripherie Zugriff auf jeden Anschluss ermöglicht. Diese Crossbar-Architektur erhöht die Flexibilität und ermöglicht einfachere Leiterplatten-Implementierungen.

Die Basis jedes SoC-Bausteins (System-on-Chip) ist dessen CPU. Ist diese unzureichend, leidet darunter die gesamte Leistungsfähigkeit des SoCs. Ein überzeugendes SoC-Design mit einer Vielzahl an hochleistungsfähiger Peripherie erfordert eine CPU, die sämtliche von deren Peripherie erzeugten Daten verarbeiten kann. Diese Art der Leistungsfähigkeit findet sich normalerweise nicht im 8-Bit-Markt, aber mit der CIP-51-Architektur soll dies möglich sein.

Da der CIP-51-Core weiterhin konform zu 8051-Befehlen ist, ist auch das Ökosystem für Entwicklungswerkzeuge, Software und Treiber sehr umfangreich und vielfältig. Damit verringern sich die Entwicklungskosten, während die Qualität des Embedded-Designs weiter hoch bleibt.

Über den Autor:

Tom David ist Principal Design Engineer für Mikrocontroller bei Silicon Labs.