HF-Produkte für die Unterhaltungselektronik

RF Magic und Compotron haben ein Abkommen unterzeichnet, das den Distributor zum Vertrieb der HF-Halbleiterprodukte von RF Magic in Deutschland, Österreich und der Schweiz sowie in Polen berechtigt

Atmels 8-bit-AVR-Controller wurde als proprietäre Architektur so erfolgreich vom Markt aufgenommen, dass man sich entschloss, nun eine 32-bit-Variante nachzuschieben. Der AVR32 zielt auf portable Anwendungen wie beispielsweise tragbare Video-Player, MP3-Player und Mobiltelefone.

Zu den Produkten zählen Silizium-Tuner für satellitengestützte (DVB-S) TV-Anwendungen und für digitale TV-Systeme mit terrestrischem Empfang (DVB-T). Angeboten werden außerdem Channel Stacking Switches (CSS) und Multi-Band-Transceiver-Chipsätze für den WiMAX-Standard.

In dem Maße jedoch, in dem sich in Video-„iPods“ und PDAs eine VGA-ähnliche Auflösung mit 30 Bildern pro Sekunde durchsetzt, steigen auch die Anforderungen an die Rechenleistung exponentiell. Üblicherweise wird dieses Problem dadurch gelöst, dass der Prozessortakt erhöht wird. Dadurch erhöht sich aber auch die Leistungsaufnahme – oftmals so sehr, dass diese für batteriebetriebene kompakte Geräte nicht mehr tragbar ist. Zum Beispiel benötigt man für eine MPEG4-Decodierung mit Quarter-VGA (QVGA) bei 30 Bildern pro Sekunde auf einem ARM9-Kern (Freescale i.MX21) eine Taktfrequenz von 266 MHz mit ei-ner Leistungsaufnahme von mehr als 320 mW [1]. Um dieses Problem zu lösen, hat die AVR-Produktgruppe bei Atmel eine neue MCU/DSP-Architektur entwickelt, die in der Lage ist, mehrere DSP-Berechnungen in einem Taktzyklus auszuführen, und damit bei niedriger Taktfrequenz und Leistungsaufnahme einen hohen Datendurchsatz erzielt.

Bei den meisten RISC-Architekturen wird eine große Anzahl von Prozessortaktzyklen für nicht produktive Vorgänge verschwendet, die aber eine hohe Leistungsaufnahme nach sich ziehen, wie z.B. das Laden, Speichern und Verschieben von Daten, für Verzweigungen, für den Versuch, Daten zu laden, die im Cache nicht vorhanden sind (Cache-Misses), oder für blockierte Instruktionen, die darauf warten, dass Vorgänge, die mehrere Taktzyklen in Anspruch nehmen, in der Pipeline ausgeführt werden. Keiner dieser Vorgänge leistet einen Beitrag zur Ausführung der Anwendung. Im Gegenteil: Sie verringern sogar den Datendurchsatz pro Taktzyklus. Der AVR32-Kern erreicht einen höheren Durchsatz, indem er nicht produktive Prozessortakte möglichst vermeidet, und zwar auf folgende Weise:

  • Reduzierung der Anzahl von Lade/Speicher-Zyklen,
  • maximale Ausnutzung der Rechenressourcen,
  • Durchführung von Verzweigungen ohne Verzögerungen (zero Penalty Branches) und
  • Senkung der Anzahl der Fälle; in denen Daten im Cache nicht gefunden werden.

Außerdem ist die Architektur des AVR32-Kerns (Bild 1) auf eine minimale Leistungsaufnahme im aktiven Betrieb und minimale Leckströme getrimmt.

Stromsparmodi und reduzierte Taktfrequenz

Der AP7000 verfügt über sechs verschiedene Stromsparmodi: Normalbetrieb, Idle- und Frozen-Modus, Standby, Stop- und Static-Modus. Diese Stromsparmodi können vom Software-Entwickler durch Definition entsprechender Zustände in der Applikation genutzt werden.

Multimedia-Algorithmen müssen eine vorgegebene Anzahl von Bildern pro Sekunde bei einer spezifizierten Anzahl von Bildpunkten liefern (z.B. 640 ? 480 bei 30 Bildern/s). Die Prozessoren müssen jede Operation an jedem Pixel eines Bildes durchführen. Es nützt jedoch nichts, mehr Verarbeitungsleistung pro Zeiteinheit als erforderlich zu erbringen. Folglich kann ein Prozessor mit höherem Durchsatz pro Taktzyklus tatsächlich langsamer laufen als andere Prozessoren und die geforderte Funktion trotzdem erfüllen. Dies gilt nicht nur für Multimedia-Algorithmen, sondern gleichermaßen auch für GPS-, Basisband-, Bildstabilisierungs- und andere bildverarbeitende Algorithmen.

Da der AVR32-Kern zwei- bis dreimal so viele Operationen pro Taktzyklus verarbeiten kann wie manch andere 32-bit-Controller, ist er in der Lage, Anwendungen mit einer wesentlich niedrigeren Taktfrequenz auszuführen. Mit nur 100 MHz kann der AVR32-Kern alle Verarbeitungsvorgänge für eine MPEG4-Decodierung mit QVGA-Auflösung durchführen. Andere auf dem Markt erhältliche Prozessoren benötigen für die gleiche Funktion Taktfrequenzen von 150 bis 266 MHz. Dies bedeutet, dass der Prozessor zwischen 1/3 und 2/3 weniger Leistung aufnimmt. Die Verarbeitung ist für mindestens 2/3 der gesamten Leistungsaufnahme eines tragbaren Multimedia-Players verantwortlich. Durch die Möglichkeit, mit einer niedrigeren Taktfrequenz zu arbeiten, in Verbindung mit anderen stromsparenden Funktionen des AP7000, lässt sich die Leistungsaufnahme so weit reduzieren, dass sich die Akkulaufzeit verdoppelt. Es ist sogar denkbar, dass das gesamte System über ein 500-mW-USB-Kabel mit Strom versorgt werden kann (Tabelle 2).

Einheitliche Prozessor-Entwicklungsumgebung

Die Software für den AP7000 wird in einer einzigen, MCU-artigen Entwicklungsumgebung entwickelt und getestet. SIMD- und DSP-fähige Compiler sind von Atmel (GNU GCC) und IAR-Systems (Embedded Workbench) erhältlich. Der IAR-Compiler compiliert automatisch die entsprechenden SIMD-DSP-Anweisungen auf der Basis von Mustern im C/C++-Code. Beide Compiler unterstützen „In-Line-Assembly“-Anweisungen für eine Algorithmus-Optimierung bei engen Schleifen bzw. inneren Schleifen und bieten eine direkte integrierte Unterstützung für SIMD-DSP-Anweisungen in der C/C++-Entwicklungsumgebung. Der AP7000 unterstützt einen Linux-2.6-Kernel für Open-Source-Codes und frei verfügbare Anwendungen.

Der In-Circuit-Emulator AVR JTAG ICE MKII von Atmel gestattet ein Debugging zur Laufzeit und JTAG-Tracing. Ein AP7000-Entwicklungs-Kit (STK1000), bestehend aus einem Einplatinenrechner mit AP7000-Prozessor, LCD-Anzeige, zwei Ethernet-Schnittstellen, USB und Host-Ports, PS2-Ports, UARTs und Anschlüssen für alle On-Chip-Peripheriegeräte auf dem AP7000 steht zur schnellen Entwicklung von Applikationen ebenfalls zur Verfügung (Bild 7).

Dr. Øyvind Strøm studierte Elektrotechnik an der Universität Delft in den Niederlanden und schloss 1995 mit dem Grad eines M.Sc. ab. Anschließend promovierte er an der Norwegian University of Technology and Science über „Mikroprozessoren für die Ausführung von byteweise compiliertem Java-Code“.
ostroem@atmel.com

Hauptschwerpunkt bei der Entwicklung des AVR32-Kerns war es, den Durchsatz soweit zu erhöhen, dass rechenintensive Anwendungen mit relativ niedrigen Taktfrequenzen laufen können, um dadurch den Leistungsverbrauch zu senken. Da die Akkukapazitäten mit den gestiegenen Verarbeitungsanforderungen nicht Schritt halten können, ist dieser Schritt unerlässlich.

Eine weitere Möglichkeit, Strom zu sparen, ist es, so viele Systembausteine wie möglich monolithisch zu integrieren. Atmel hat 2/3 der für ein Multimediasystem benötigten Elemente auf dem AP7000-Prozessor (Bild 4) integriert und damit ein echtes System-on-Chip geschaffen, das prak-tisch alle Peripheriegeräte und Schnittstellen für die Zielapplikationen umfasst.

Der AP7000 umfasst den MCU/CPU-Kern AVR32 von Atmel mit einem Vektormultiplikations-Coprozessor, 32 Kbyte On-Chip-SRAM, 16 Kbyte Befehls- und 16 Kbyte Daten-Cache, MMU (Memory Management Unit) sowie einen mehrkanaligen DMA-Controller. Als Peripheriemodule stehen ein „Bit-Stream-Audio-DAC“, ein TFT/STN-LCD&HDD-Controller, eine „High-Speed“-USB-2.0-Schnittstelle für 480 Mbit/s mit On-Chip-Transceivern (PHY) und zwei 10/100-Mbit/s-Ethernet-MACs zur Verfügung. Außerdem hat der Chip serielle RS-232-, USART-, I2S-, AC97-, TWI/I2C-, SPI-, PS/2-Schnittstellen und verschiedene synchrone serielle Schnittstellen (SSC), die die meis-ten seriellen Kommunikationsprotokolle unterstützen.

Vektormultiplikations-Coprozessor

Bei Multimedia-Anwendungen müssen üblicherweise arithmetische Operationen an 3?8-bit-Matrizen durchgeführt werden, z.B. zur Bildfilterung (FIR-Filterung), Farbraumumsetzung (RGB – YUV), Bildskalierung und Viertel-Pixel-Bewegungsabschätzung bei MPEG4/H.264. Damit der CPU-Durchsatz so hoch wie möglich bleibt, ist beim AP7000 die Vektormultiplikationseinheit (VMU) über die AVR32-AP-Coprozessor-Schnittstelle angekoppelt. Sie arbeitet damit parallel zur CPU und führt verschiedene Vektormultiplikationen ohne Beteiligung der CPU aus.

MPEG4-Videodaten werden typischerweise in YUV komprimiert, während für die meisten Video-DACs und LCD-Controller RGB benötigt wird. Der Vektormultiplikations-Coprozessor führt diese Umwandlung doppelt so schnell durch wie die AVR32-CPU. Bei Bildskalierungsanwendungen steigert der Vektormultiplikations-Coprozessor des AP7000 die Leistungsfähigkeit bei der MPEG-Decodierung um ca. 50 %.

Direkter Speicherzugriff per DMA-Controller

Multimedia-Anwendungen sind datenintensiv. Große Datenströme fließen zwischen den Peripheriegeräten und den Speichern. Die Verarbeitung dieser Datentransfers kann die CPU erheblich belasten. Ohne DMA-Controller würden die beiden 100-Mbit/s-Ethernet-MACs und der 480-Mbit/s-USB-Slave-Controller die CPU vollständig auslasten. Der AP7000 bietet verschiedene Mechanismen für den „Direct Memory Access“ (DMA), die die Belastung der CPU durch Datentransfer zwischen den Peripheriegeräten und dem Speicher bzw. zwischen zwei Speicherorten auf dem Chip verringern. Es können gleichzeitig zwei Speicher-zu-Speicher-Transfers zwischen On-Chip-RAM oder an die externe Busschnittstelle (EBI) angeschlossenen Off- Chip-Speichern durchgeführt werden, da diese alle durch den DMA-Controller adressierbar sind.

Ein 18-kanaliger „Peripheral DMA-Controller“ (PDC) sorgt für eine enge Kopplung der Peripheriemodule und der Speicher. Der PDC richtet virtuelle Kanäle zwischen Datenregistern im Peripheriemodul und den On-Chip- oder Off-Chip-Speichern ein, wodurch die CPU vollständig von diesen Aufgaben entlastet wird.

Vier unabhängige Taktdomains sparen Strom

Wie die meisten hochentwickelten 32-bit-Controller verfügt der AP7000 über einen Multi-Layer-Hochgeschwin-digkeitsbus, der den Datendurchsatz dadurch verbessert, dass mehrere Operationen gleichzeitig durchgeführt werden können. Unterschiedliche Peripheriemodule benötigen unterschiedliche Busfrequenzen. Beispielsweise darf bei TWI, SPI und UART der Bus wesentlich langsamer sein als bei einem 10/100-Ethernet-MAC oder bei einem High-Speed-USB 2.0 (480 Mbit/s). In einer konventionellen Busstruktur diktiert das schnellste Peripheriegerät die Taktfrequenz für den gesamten Bus und treibt damit den Leistungsverbrauch nach oben (Bild 5). Beim AP7000 wird dieses Problem dadurch gelöst, dass zwei Peripherie-Busbrücken vorgesehen sind; langsamere Peripheriemodule werden über die Brücke A angeschlossen, Hochgeschwindigkeitsperipheriemodule über die Brücke B. Mit Hilfe von dynamischen Frequenzskalierungsalgorithmen kann der AP7000 die individuelle Taktfrequenz dieser beiden Brücken sowie die Frequenz der internen Uhr der CPU und die Frequenz der Busmatrix dynamisch konfigurieren und auf den niedrigsten möglichen Wert anpassen.

Die Taktgeber der vier Domains (Brücke A und B, CPU und Busmatrix) können gleichzeitig mit unterschiedlichen Frequenzen laufen. Damit kann jede Taktdomain zur Minimierung der Leistungsaufnahme auf den Bussystemen auf die niedrigstmögliche Frequenz eingestellt werden. Wenn z.B. die Hauptapplikation während eines Datentransfers über IrDA oder Bluetooth inaktiv ist, können die Taktfrequenzen der CPU, der Hochgeschwindigkeitsbrücke und der Busmatrix verringert werden, während die Brücke für die niedrige Geschwindigkeit mit einer (niedrigen) konstanten Taktfrequenz den Datentransfer abwickelt.

Jede einzelne oder alle Taktdomains können in einem einzigen Taktzyklus zurückgesetzt werden, indem ein 32-bit-Wert in ein Konfigurationsregister geschrieben wird. Die Änderung erfolgt unverzüglich in allen Taktdomains (Bild 6). Die internen stromsparenden Oszillatoren und PLLs laufen weiter und erfordern daher bei den Frequenzumschaltungen keinerlei Zeit für eine Kalibrierung. Der Prozessor berechnet automatisch die niedrigste Taktfrequenz für jede Domain, die die benötigte Funktion noch unterstützt.

„Data Forwarding“

Der AVR32 senkt die Anzahl der Takte, die für das Schreiben in und Lesen von Registerdateien benötigt werden, indem er Daten zwischen den einzelnen Pipelinestufen weiterreicht. Wenn die Ausführung von Anweisungen bereits vor der Write-back-Stufe abgeschlossen ist, werden diese direkt an den Beginn der Pipelines weitergereicht, damit sie unmittelbar von anderen darauf wartenden Anweisungen verwendet werden können. Dies senkt sowohl die Anzahl der benötigten Taktzyklen als auch die Leistungsaufnahme durch Reduzierung der Anzahl der Registerdateizugriffe. Alle Ergebnisse des AVR32 werden weitergereicht, sobald der entsprechende Vorgang abgeschlossen ist.

„SIMD“-Befehle

Durch SIMD-Anweisungen (Single Instruction/Multiple Data) in der Architektur des AVR32 kann der Durchsatz bei bestimmten DSP-Algorithmen, bei denen sich ständig wiederholende Operationen an einem Datenstrom durchgeführt werden müssen (z.B. bei der Bewegungsabschätzung zur Decodierung von MPEG-Daten), vervierfacht werden. Die Berechnung einer 8-bit-Summe absoluter Differenzen (SAD) erfolgt z.B. durch Laden von vier 8-bit-Pixeln aus dem Speicher in einem einzigen Ladevorgang, Ausführen einer gepackten Subtraktion vorzeichenloser Bytes mit Sättigung, Addition des höchsten und niedrigsten Paars gepackter Bytes und Entpacken der Bytes in gepackte Halbwörter. Diese werden dann addiert und ergeben den SAD-Wert.

Verzweigungsvorhersage

Durch die Vorhersage von Verzweigungen und Faltung kann der Schleifen-Overhead auf Null Taktzyklen reduziert werden. Tiefe Pipelines ermöglichen zwar höhere Taktfrequenzen, benötigen aber andererseits zusätzliche Taktzyklen, wenn Sprünge im Programmfluss vorkommen. Besonders schwer fallen diese bei Verzweigungen im Zusammenhang mit kleinen inneren Schleifen ins Gewicht. Um dieses Problem zu lösen, umfasst die Pipeline beim AVR32 eine Logik zur Vorhersage von Verzweigungen, die in der Lage ist, alle Anweisungen zu erkennen, bei denen sich der Verarbeitungsfluss ändert. Außerdem werden die Verzweigungen mit der Zielanweisung „gefaltet“, wodurch die Belastung durch Verzweigungen auf Null Takte reduziert wird.

Benchmarking bescheinigt hohe Codedichte und hohe Rechenleistung pro MHz

Beim Benchmarking durch EEMBC [2] zeigte die AVR32-Architektur eine hohe Codedichte und eine überdurchschnittliche Rechenleistung.

Außergewöhnliche Codedichte

Der Befehlssatz des AVR32 wurde durch umfangreiches Benchmarking und eine Optimierung in Zusammenarbeit mit dem Hersteller des Compilers (IAR) entwickelt. Dadurch hat AVR32 eine Codedichte, die 10 bis 50 % über der von ARM9- oder ARM11-Prozessorkernen liegt (festgestellt über EEMBC Benchmark-Suite). Aufgrund dieser höheren Codedichte wird weniger Platz im Cache benötigt, und es kann eine größere Anzahl von Anweisungen im Prozessor-Cache gespeichert werden. Dadurch reduziert sich die Anzahl der Fälle, in denen benötigte Daten im Cache nicht vorhanden sind, und der Prozessordurchsatz pro Taktzyklus wird höher.

Hohe taktfrequenzbezogene Rechenleistung

Der AVR32 erzielt eine höhere Rechenleistung pro MHz als viele andere auf dem Markt erhältliche 32-bit-CPUs aufgrund der erwähnten Besonderheiten seiner Architektur. Das Embedded Microprocessor Benchmark Consortium (EEMBC) führt Benchmark-Tests an Prozessoren mit einer Vielzahl von Algorithmen unter Verwendung eines nicht optimierten, compilierten Codes durch. Als Maß für den Durchsatz wird angegeben, wie oft pro Sekunde jeder Algorithmus bei einer bestimmten Taktfrequenz durchgeführt werden kann. Die Ergebnisse schwanken, nicht nur abhängig von der Effizienz des Prozessors, sondern auch in Abhängigkeit von den zu verarbeitenden Daten und der Effizienz des Compilers. Außerdem fasst EEMBC häufig verwendete Algorithmen in bestimmten Anwendungsklassen zusammen (z.B. Vernetzung, Konsumelektronik etc.) und berechnet den geometrischen Mittelwert der entsprechenden Benchmark-Werte. Damit kommt man zu einem Benchmark-Wert für die jeweilige Anwendungsklasse (Tabelle 1).

Höherer Durchsatz bei niedrigeren Taktfrequenzen und geringerer Leistungs-aufnahme

Bei der Architektur des AVR32 geht es darum, eine ausreichende Verarbeitungsleistung bei minimaler Leistungsaufnahme für batteriebetriebene tragbare Consumerprodukte, wie z.B. tragbare Video-Player, mobile Kassensysteme oder tragbare medizinische Geräte bereitzustellen. Der außergewöhnlich hohe Durchsatz des AVR32-Kerns ermöglicht eine geringere Taktfrequenz, was zu einer linearen Senkung der Leistungsaufnahme führt. Unabhängig davon ermöglicht der AVR32 eine Minimierung der aktiven Leistungsaufnahme bei allen Taktfrequenzen, indem er Daten in der Nähe der CPU hält und einen unnötigen Transfer von Daten auf Bussystemen vermeidet.

Ältere MCU-Architekturen z.B. kopieren die Rückgabeadresse eines Subroutinenaufrufs in einen Speicher-Stack, was unnötig Leistung verbraucht. Dies wird beim AVR32 mit Hilfe eines in die Registerdatei integrierten Link-Registers vermieden. Durch Techniken wie Data Forwarding und die Verwendung des Akkumulator-Cache werden Daten innerhalb der Pipeline gehalten, was die Gesamtleistungsaufnahme senkt. Eine weitere stromsparende Funktion besteht darin, das Statusregister und die Rückgabeadresse für Interrupts und Ausnahmen in Systemregistern abzulegen, statt Daten zu und von einem Stack zu verschieben. Auch die hohe Codedichte des AVR32 trägt zu einer Senkung der Leistungsaufnahme bei, indem sie die Anzahl der Taktzyklen senkt und die Anzahl der externen Speicherzugriffe reduziert, wenn benötigte Daten im Cache nicht gefunden werden.