ARM-Architektur

ARM-Architektur
Logo
ARM-Prozessorchip von Conexant, der beispielsweise in Routern verwendet wird

Die ARM-Architektur ist ein vom britischen Unternehmen ARM Limited entwickeltes 32-Bit-Chip-Design. ARM steht für Advanced RISC Machines.

Das Unternehmen stellt keine eigenen Elektronikchips her, sondern vergibt unterschiedliche Lizenzen an Halbleiterhersteller. Die Vielzahl dieser Lizenznehmer und verschiedene Vorteile der Architektur (z. B. geringer Energiebedarf) führten dazu, dass ARM-Chips in embedded Bereich die meistgenutzte Architektur sind. Fast alle derzeitigen Smartphones haben beispielsweise einen oder mehrere lizenzierte ARM-Prozessoren.

Inhaltsverzeichnis

Geschichte

Das ARM-Design wurde 1983 vom englischen Computerhersteller Acorn als Entwicklungsprojekt gestartet. Das Team begann unter der Leitung von Sophie Wilson und Steve Furber die Entwicklung eines leistungsfähigen Prozessors für einen Nachfolger der bis dahin auf dem 6502 basierenden Computer.

Anstatt wie die Konkurrenz auf Prozessoren der Unternehmen Intel oder Motorola zurückzugreifen, entwickelte man einen eigenen Prozessor, den ARM (Acorn Risc Machine), mit 32 Bit und einer geplanten Taktfrequenz von 4 MHz. Die Tests mit den Prototypen verliefen derart erfolgreich, dass die späteren Serienprozessoren (ARM2, 1986), die in den neu entwickelten Rechnern (Acorn Archimedes) verbaut wurden, direkt mit 8 MHz getaktet wurden. Tests ergaben, dass diese Rechner bei praktisch gleicher Taktfrequenz etwa achtmal schneller waren als die Konkurrenten Commodore Amiga und Atari ST.

Nachdem der ARM2 1989 zum ARM3 (mit Cache und höherer Taktfrequenz) weiterentwickelt worden war und immer mehr Unternehmen Interesse an diesen Prozessoren bekundet hatten, gründete Acorn im Jahre 1990 zusammen mit Apple und VLSI Technology das Unternehmen Advanced RISC Machines Ltd. mit Sitz in Großbritannien, welches später in ARM Ltd. umbenannt wurde.

Eigenschaften

Die Architektur zeichnet sich durch einen effizienten Befehlssatz aus, erlaubt eine kompakte Umsetzung in einem ASIC-Design und ist gut für Optimierungen im Bereich der Ausführungsgeschwindigkeit und der Stromaufnahme geeignet.

Eine bedeutende Implementierung ist der als StrongARM bekannte Mikrocontroller.

Der Hersteller Intel ist neben anderen Marktteilnehmern Lizenznehmer des Unternehmens Advanced RISC Machines Ltd. und darf somit auf der ARM-Architektur basierende Prozessoren herstellen. Darüber hinaus darf Intel (neben z. B. Motorola/Freescale oder NXP), im Gegensatz zu den meisten anderen Lizenznehmern, Änderungen und Erweiterungen am ARM-Kern durchführen. So vertrieb Intel bis 2006 unter dem Namen XScale eine in Lizenz gefertigte ARM-CPU und weitere ebenfalls als XScale bezeichnete und per Bus angebundene Peripherie-Halbleiter. Dazu gehören die PXA250-, PXA260- und PXA270-Prozessoren, die häufig in PDAs und Smartphones zum Einsatz kommen, vor allem für Windows CE und Palm OS, die aktuelle Generation heißt Monahans.

Die GNU Compiler Collection kann Code für ARM erzeugen und auch der XNU-Kernel (Mac OS X/iOS), Linux-Kernel und Windows NT Kernel 6.2 laufen auf diesem CPU-Typ.

Einsatzgebiet

Aufgrund ihrer geringen Leistungsaufnahme kommen ARM-Prozessoren vor allem in eingebetteten Systemen, wie Mobiltelefonen, PDAs und Routern zum Einsatz. Besondere Bedeutung hat die Architektur bei Smartphones, da sie von allen mobilen Betriebssystemen (Stand 2011) unterstützt wird. Bei tragbaren Spielekonsolen besteht eine ähnliche Verbreitung. Ebenfalls findet man die CPUs in vielen stationären Geräten der Unterhaltungselektronik.

Die Rechner der Acorn-Archimedes- und Risc-PC-Reihe von Acorn verwendeten ebenfalls ARM-CPUs. Nachfolgemodelle dieser Desktop-Rechner sind unter anderem vom Unternehmen Castle Technology unter dem Namen IYONIX pc erhältlich.

Befehlssatz und Programmiermodell

Die ARM-CPU ist eine RISC-Architektur und kennt als solche drei Kategorien von Befehlen:

  • Befehle zum Zugriff auf den Speicher (Load/Store)
  • arithmetische oder logische Befehle auf Werte in Registern
  • Befehle zum Ändern des Programmflusses (Sprünge, Subprogrammaufrufe).

Die ARM verfügt über einen 3-Register-Befehlssatz, alle arithmetisch-logischen Befehle akzeptieren also ein Zielregister und zwei Operandenregister.

Beispiel:

  ADD    r0, r1, r2   ; r0 := r1 + r2

Die ARM ist sowohl Little-Endian- als auch Big-Endian-kompatibel, kann also mit beiden Byte-Reihenfolgen umgehen, was angesichts des Einsatzzwecks als Standard-CPU in Kommunikationsgeräten ein deutlicher Vorteil ist. Der Standardmodus der ARM ist Little-Endian.

Registersatz und Ausführungs-Modi

Die ARM verfügt, wie viele RISC-CPUs, über eine große Anzahl von Registern (halb so viele wie beim PowerPC). Dem Programmierer stehen 15 „general-purpose“-Register zur Verfügung (r0–r14), wobei im Register r13 standardmäßig der Stackpointer gehalten wird und das Register r14 als „Link-Register“ benutzt wird, in dem die Rücksprungadresse bei Prozeduraufrufen (mit BL „branch with link“) gespeichert wird, um später zurück in den Programmzähler geschrieben zu werden (Rückkehr zum aufrufenden Programmcode). Das Register r15 fungiert als Programmzähler (Program-Counter, PC). Zusätzlich zu diesen direkt veränderbaren Registern gibt es das Status-Register (CPSR, Current-Program-Status-Register), das die Statusbits und andere Informationen, wie z. B. den momentanen Ausführungsmodus, enthält.

Die ARM verfügt über mehrere Ausführungsmodi, die über bestimmte Ereignisse betreten werden und teilweise dem ausgeführten Code zusätzliche Privilegien einräumen. Im Einzelnen sind das:

  • User-Mode: normaler User-Code
  • Supervisor-Mode (SVC): privilegierte Betriebssystem-Tasks, Eintritt z. B. durch Aufruf eines Software-Interrupts (SWI)
  • Interrupt-Mode (IRQ): Eintritt durch Auftreten eines äußeren Interrupt-Requests während der Befehlsverarbeitung
  • Fast-Interrupt-Mode (FIQ): Eintritt durch Auftreten eines äußeren Fast-Interrupt-Requests. Fast-Interrupts werden meist nur für besonders zeitkritische Ereignisse benutzt (siehe Echtzeitsysteme).
  • Memory-Abort (ABT): tritt auf, wenn eine Datenanforderung nicht erfüllt werden kann.
  • Undefined-Instruction-Exception (UND): Eintritt durch Auftreten einer unbekannten Instruktion. Wird z. B. zur Emulation eines Gleitkomma-Coprozessors verwendet.

R13, R14 und das Statusregister werden für die Interrupt- und Exception-Modi gespiegelt (sogenannte Schattenregister), so dass Ausnahmebehandlungsroutinen sich nicht um die Sicherung des User-Stackpointers oder Link-Registers zu kümmern brauchen. Für die Fast Interrupts werden zusätzlich R8–R14 gespiegelt und stehen so dem Programmierer einer Interrupt-Service-Routine direkt zur Verfügung, ohne dass er den Inhalt dieser Register vorher sichern müsste.

Befehlsbreite und Adressierungsarten

Der Load/Store-Befehl des ARM unterstützt die üblichen Adressierungsmodi. Bei der unmittelbaren Adressierung und der absoluten Adressierung gibt es jedoch einige Einschränkungen, die im Folgenden näher erklärt werden sollen:

Sämtliche Befehle im ARM-Befehlssatz sind 32 Bit lang. Dies bedeutet auf der einen Seite, dass jede Instruktion mit einem Speicherzugriff geladen werden kann, wodurch sich das Design der Pipeline und die Instruction Fetch-Unit vereinfachen. Auf der anderen Seite können 32-Bit-Adressen oder 32-Bit-Werte nicht in einem 32 Bit breiten Befehl angegeben werden, da dann kein Platz mehr für den eigentlichen Befehlscode bleibt. Stattdessen hilft man sich folgendermaßen:

  • Es können keine beliebigen 32-Bit-Werte direkt im Befehl codiert werden. Stattdessen werden für Direktwerte 8 Datenbits und 4 Shift-Bits angegeben, wobei der tatsächliche Shift-Wert der doppelte gespeicherte Wert ist, es können also Bitverschiebungen um 0, 2, 4, 6, 8 … 26, 28 und 30 Stellen erfolgen. Dabei werden die Bits, die aus dem Register hinaus geschoben werden, auf der anderen Seite wieder hinein geschoben. Wird diese Technik z. B. auf den Wert 255 in den Datenbits angewendet, können die hexadezimalen Werte 000000ff, 000003fc, 00000ff0, 00003fc0, … 0ff00000, 3fc00000, ff000000, fc000003, f000000f und c000003f direkt erzeugt werden.
  • Andere Werte können durch Kombination von arithmetischen Operationen (z. B. Addition, Subtraktion) erzeugt werden.
  • Alternativ können Werte auch im Speicher gehalten und vor dem eigentlichen Befehl in ein Register geladen werden.
  • Der (relative) Sprungbefehl enthält einen 24-Bit-Offset, so dass im Bereich von ± 32 MB von der aktuellen Stelle im Programm aus gesprungen werden kann (wobei der Programmzähler der aktuellen Instruktion um 8 Byte vorauseilt). Zusätzlich kann optional der aktuelle Programmzähler ins Link-Register kopiert werden (falls L-Bit gesetzt), damit wird aus dem Sprung ein Unterprogrammaufruf (die aufgerufene Funktion kann den Programmzähler vom Link-Register einfach mit MOV PC,LR ins Programmzähler-Register zurückkopieren um wieder ins aufrufende Programm zurückzukehren).
  • Bei den Load/Store-Befehlen kann ein 12-Bit-Offset auf eine Basisadresse addiert werden, die aus einem Register gelesen wird. Wird der Programmzähler als Basisregister verwendet, kann so ein Wert innerhalb von 4 KByte ab der aktuellen Stelle des Programms geladen werden. Damit lässt sich z. B. ein Sprung an eine beliebige 32-Bit-Adresse umsetzen, indem die absolute Sprungadresse hinter dem Ladebefehl gespeichert wird und dann durch eine PC-relativen Ladebefehl mit Ziel Program-Counter (LDR PC,[PC,#-4]) angesprungen wird.
  • Alle Speicherstellen, die außerhalb der 4 KB um die aktuelle Stelle im Programm liegen, können nur geladen werden, indem zuerst ihre Adresse in ein Register geladen wird und dieses in nachfolgenden Zugriffen als Basisregister verwendet wird.

Besonderheiten des Befehlssatzes

Der ARM-Befehlssatz verfügt über einige Besonderheiten, die zur Effizienz der Architektur beitragen:

  • Sämtliche Befehle können bedingt ausgeführt werden. Damit entfällt die Notwendigkeit für Programmsprünge in vielen Standardsituationen, z. B. If-else-Abfragen (man vermeidet Programmsprünge, weil diese die Pipeline des Prozessors leeren, und dadurch Wartezyklen entstehen). Zum Kodieren der Bedingung werden die ersten 4 Bit eines jeden Befehles verwendet.

Beispiel:

  CMP    r0, r1           ; (setzt Bedingungsbits)
  ADDGE  r2, r2, r3       ; if (r0 >= r1) then r2 := r2 + r3;
  ADDLT  r2, r2, r4       ; else r2 := r2 + r4;
  • Die ARM verfügt über einen Barrel-Shifter im B-Pfad der ALU, sämtliche Befehle, die mit dem zweiten Operanden arbeiten, erlauben also auch die Angabe eines 4-bit-weiten Shift- oder Roll-Faktors.

Beispiel:

  ADD  r2, r3, r3, lsl #2 ; r2 := r3 + (r3 << 2)
                          ; → r2 := r3 + r3 * 4
                          ; → r2 := r3 * 5 
  • Neuere ARM-CPUs kennen SIMD-Befehle.

Thumb-Befehlssatz

Um die Code-Dichte zu erhöhen, also den Speicherbedarf für eine bestimmte Funktion zu verringern, hat ARM Ltd. den Thumb-Befehlssatz entwickelt, der nur aus 16 Bit breiten Befehlen besteht und im Wesentlichen zum normalen 32 Bit breiten ARM-Befehlssatz äquivalent ist. Obwohl man oft mehr Assembler-Befehle benötigt, um ein Programm zu schreiben, wird die Code-Größe in der Praxis um etwa 30–40 % reduziert. Als weiterer Vorteil können problemlos 16-Bit-Speicherbausteine an der ARM-CPU betrieben werden, ohne dass das Laden von Befehlen zwei Speicherzyklen in Anspruch nimmt. Aus 32-Bit-Speicherbausteinen lädt ein ARM-Prozessor stets zwei Thumb-Instruktionen auf einmal.

Die geringere Programmgröße wird allerdings oft durch eine geringere Ausführungsgeschwindigkeit erkauft. Zum einen sind viele Thumb-Befehle weniger leistungsfähig als die entsprechenden ARM-Befehle (und es werden mehr Thumb-Anweisungen benötigt), zum anderen gibt es in diesem 16-Bit-Befehlssatz keine bedingte Befehlsausführung außer den bedingten Sprüngen. Durch die dadurch vermehrt auftretenden Programmsprünge kommt es häufiger zu einer Entleerung der Pipeline. Zumindest wenn der Speicher mit 32 Bit angesprochen wird, ist der 16-Bit-Befehlssatz schon deshalb oft langsamer als der ARM-Befehlssatz. Der Hersteller NXP gibt in den Datenblättern seiner LPC2000-Controller einen Geschwindigkeitsverlust von 30 % an.

Es besteht die Möglichkeit, ARM- und Thumbcode miteinander zu vermischen. Häufig ist in großen Teilen eines Programmes die Ausführungsgeschwindigkeit sekundär. Hier bietet es sich an, diese Programmteile unter Verwendung der Thumb-Anweisungen zu schreiben, wogegen die kritischen Bereiche mit ARM-Anweisungen implementiert werden. Diese Technik nennt sich Thumb Interworking.

Coprozessor-Befehle

Die ARM ist als Mikroprozessor-Kern in eingebetteten Systemen gedacht, in denen meist keine Gleitkomma-Arithmetik benötigt wird. Der ARM wurde jedoch speziell im Hinblick auf Erweiterbarkeit um Coprozessoren entwickelt und besitzt ein eigenes Coprozessor-Interface und Befehle für optionale Coprozessoren.

Modelle

  • 1987: ARM2
  • 1989: ARM3
  • 1991: ARM6
  • 1993: ARM7
  • 1995: ARM8
  • 1997: ARM9, z. B. 104 MHz, 123 MHz, 150 MHz, 220 MHz, 320 MHz
  • 1998: ARM10, z. B. 330 MHz, 369 MHz
  • 2002: ARM11, z. B. 700 MHz
  • 2005: ARM Cortex (-Mx, -Rx, -Ax)

ARM2

Der ARM2 ist ein von dem englischen Unternehmen Acorn Computers Ltd. entwickelter 32-Bit RISC-Prozessor. Dieser wurde 1986 veröffentlicht und ab 1987 im Acorn Archimedes eingesetzt. Beim Standardtakt von 8 MHz wurden für damalige Verhältnisse unglaubliche 4 MIPS erreicht.

1991 erschien der ARM250, der ebenfalls auf dem ARM2 basierte, aber nun mit 12 MHz getaktet war und 7 MIPS erreichte. Außerdem wurden eine MMU-Einheit sowie ein Grafik- und IO-Prozessor integriert. Eingesetzt wurde diese CPU nur in den Archimedes-Modellen A3010, A3020 und A4000.

ARM3

Der ARM3 ist ebenfalls ein 32-Bit RISC-Prozessor, der von Acorn Computers Ltd. entwickelt wurde. Er wurde 1989 veröffentlicht und in den Archimedes-Modellen A540, A5000 und A4 eingesetzt.

Bei diesem Prozessor hat Acorn erstmals einen Cache mit 4 KByte integriert. Mit einer Taktfrequenz von 25 MHz erreicht der ARM3 12 MIPS.

ARM7TDMI (1993)

Der ARM7TDMI ist das momentane Low-End-Modell der ARM-Familie und wird vor allem als Komponente in SoCs für Mobiltelefone und andere portable Kommunikations- oder Multimediageräte verwendet. Anwendung findet er auch im Game Boy Advance, Nintendo DS (als Subprozessor) und Nintendo 3DS (ebenso als Subprozessor). Die Kürzel im Modellnamen stehen für Pipeline und einen gemeinsamen Datenbus für Instruktionen und Daten.

ARM9TDMI (1997)

Der ARM9 ist eine Weiterentwicklung der StrongARM- und ARM8-Architektur. Der wesentliche Unterschied des ARM9 gegenüber dem ARM7 ist ein getrennter Datenbus jeweils für Instruktionen und Daten (Harvard-Architektur). Meist werden diese an separate Caches für Daten und Instruktionen angeschlossen. Außerdem besitzt der ARM9 eine fünfstufige Pipeline und kann so höhere Taktraten erreichen und weist bessere CPI-Werte (Cycles per Instruction) auf. Wird der ARM9 ohne Caches an einem externen Speicher mit nur einem Datenbus betrieben, schrumpft der Geschwindigkeitsvorteil gegenüber der ARM7-Architektur aufgrund häufiger Pipeline-Stalls mit einer höheren Penalty durch die längere Pipeline. Ohne Cache kann in einem solchen ungünstigen Szenario ein ARM7 aufgrund seiner kürzeren Pipeline trotz eines deutlich niedrigeren Taktes schneller sein. Allerdings sollte dieser Fall in realen Systemen nicht auftreten, da ein ARM9 teurer ist und nur aufgrund seiner besseren Performance ausgewählt wird. Kommt es eher auf die Kosten an, so spart man sinnvollerweise nicht am Cache, sondern verwendet einen ARM7.

Zur Bedeutung des Kürzels „TDMI“ siehe ARM7TDMI.

Erweiterungen für ARM-Kerne

ARM Ltd. verkauft neben den ARM-CPU-Kernen auch Erweiterungen als synthetisierbare Makrozellen für den SoC-Entwurf, unter anderem Memory Management Units, Floating-Point-Coprozessoren sowie Signalprozessor-Erweiterungen (Piccolo).

Lizenznehmer

Folgende Unternehmen haben die ARM-Architektur von ARM Ltd. lizenziert:

Siehe auch

  • QEMU, Virtuelle Maschine, unterstützt auch viele ARM Prozessoren (armXXXX, cortex-XX, ti925t, pxa2XX, pxa270-XX, any)

Weblinks

 Commons: ARM microprocessors – Sammlung von Bildern, Videos und Audiodateien

Literatur

  • Steve Furber: ARM System-on-Chip Architecture. Addison Wesley, New York 2000, ISBN 978-0201675191.

Einzelnachweise

  1. Microsoft kauft ARM-Lizenz
  2. Nvidia kauft ARM-Lizenz

Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • ARM — steht für: Arm, eine der oberen Extremitäten des menschlichen Körpers Arm (Name), ein biblischer Name Arm (Stern), der Stern Eta Capricorni arm steht für: arm, Adjektiv, siehe Armut Personen mit Namen Arm sind: Mark Arm (* 1962), US… …   Deutsch Wikipedia

  • Arm (Begriffsklärung) — Arm steht für: Arm, eine der oberen Extremitäten des menschlichen Körpers Arm (Heraldik), einer Wappenfigur in der Heraldik Arm (Stern), der Stern Eta Capricorni Arm (Name), ein biblischer Name einem Nachnamen; bekannte Namensträger sind: Allisyn …   Deutsch Wikipedia

  • ARM Limited — Rechtsform Aktiengesellschaft Gründung 1990 Sitz Cherry Hinton …   Deutsch Wikipedia

  • ARM StrongARM — StrongARM ist ein Mikroprozessor auf Basis der ARM Architektur. Der Prozessor wurde gemeinsam von Digital Equipment Corporation (DEC) und Advanced RISC Machines Ltd. (ARM) entwickelt. Nachdem Intel große Teile von DEC gekauft hatte, haben sie… …   Deutsch Wikipedia

  • ARM Cortex-M3 — Der Cortex M3 ist eine Architektur (ARMv7 M) für Mikroprozessoren von ARM. Diese Architektur wurde in 2004 eingeführt [1] und kann als Nachfolger für die ARM7 im Bereich der Mikrocontroller betrachtet werden. Logo Inhaltsver …   Deutsch Wikipedia

  • ARM Cortex-M4 — Der Cortex M4 ist eine neue Architektur (ARMv7 M) für Mikroprozessoren von ARM. Diese Architektur kann als Nachfolger für die ARM7 im Bereich der Mikrocontroller betrachtet werden. Der ARM Cortex M4 Prozessor wird von ARM mit der Eigenschaft… …   Deutsch Wikipedia

  • Architektur Indiens — Tor am Großen Stupa von Sanchi (Madhya Pradesh, Zentralindien) Detail am hinduistischen Surya Tempel von Konark (Orissa, Ostindien) …   Deutsch Wikipedia

  • 32Bit-Architektur — Unter 32 Bit Architektur versteht man in der EDV eine Prozessorarchitektur, deren Wortbreite 32 Bit beträgt. Inhaltsverzeichnis 1 Architekturen 2 Design 3 Vorteile 4 Probleme …   Deutsch Wikipedia

  • 32-Bit-Architektur — Unter 32 Bit Architektur versteht man in der EDV eine Prozessorarchitektur, deren Wortbreite 32 Bit beträgt. Inhaltsverzeichnis 1 Architekturen 2 Design 3 Vorteile 4 …   Deutsch Wikipedia

  • Befehlssatz-Architektur — Der Befehlssatz (englisch: instruction set, weshalb in der deutschen Sprache der Begriff Instruktion synonym für Befehl verwendet wird) bezeichnet in der Informatik die Menge der Maschinenbefehle eines Mikroprozessors. Der Umfang des… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”