Wikipedia · einfach zusammengefasst · Stand
ARM-Architektur
Der wesentliche Unterschied des ARM9 gegenüber dem ARM7 ist je ein getrennter Bus für Instruktionen und Daten (Harvard-Architektur). Meist werden diese an …
Inhalt6 Abschnitte
Grundlagen und Geschichte der ARM-Architektur
Die ARM-Architektur ist eine Mikroprozessor-Architektur, die 1983 vom britischen Computerunternehmen Acorn als Entwicklungsprojekt gestartet wurde und seit 1990 vom aus Acorn ausgelagerten Unternehmen ARM Limited weiterentwickelt wird. ARM stand ursprünglich für Acorn RISC Machines, später für Advanced RISC Machines. RISC (Reduced Instruction Set Computer) bezeichnet Prozessoren mit einem effizienten, einfachen Befehlssatz. Obwohl der Name außerhalb der IT-Fachwelt wenig bekannt ist, gehören ARM-Implementierungen zu den weltweit meistverbreiteten Mikroprozessoren, vor allem wegen ihres geringen Energiebedarfs bei hoher Leistungsfähigkeit und einer kompakten ASIC-Implementierung (ASIC = kundenspezifischer integrierter Schaltkreis). Der als StrongARM bekannte Mikrocontroller ist eine bedeutende Implementierung. Die GNU Compiler Collection kann Code für ARM erzeugen; der XNU-Kernel (macOS/iOS), der Linux-Kernel und der Windows NT Kernel 6.2 laufen auf diesem CPU-Typ. Die ersten ARM-Prozessoren (ARMv1) aus dem Jahr 1985 hatten eine 32-Bit-Architektur (ARM32); etwa 2013 erschienen Prozessoren mit 64-Bit-Architektur (Armv8-Serie, ARM64). Die ersten 64-Bit-Systeme waren der X-Gene von Applied Micro Circuits Corporation im Juni 2013 und im September 2013 der A7 im iPhone 5s. Die aktuellen, im Herbst 2025 vorgestellten Arm-C1-Kerne basieren auf der Armv9.3-A-Architektur. Das Entwicklungsteam unter der Leitung von Sophie Wilson und Steve Furber entwickelte für einen Nachfolger der auf dem 6502 basierenden Rechner einen eigenen 32-Bit-Prozessor (geplante Taktfrequenz 4 MHz), statt auf Intel- oder Motorola-Prozessoren zurückzugreifen. Die Serienprozessoren ARM2 (1986) wurden direkt mit 8 MHz getaktet und in den Acorn-Archimedes-Rechnern verbaut; diese Rechner waren bei praktisch gleicher Taktfrequenz etwa achtmal schneller als Commodore Amiga und Atari ST mit Motorola-68000-Prozessor. Nach dem ARM3 (1989, mit Cache) gründete Acorn 1990 zusammen mit Apple und VLSI Technology das Unternehmen Advanced RISC Machines Ltd. (später ARM Ltd.). Geschäftsmodell: ARM Limited stellte lange keine eigenen ICs (integrierte Schaltkreise) her, sondern vergibt Lizenzen an Halbleiterunternehmen. Kunden können zwischen Entwicklungslizenzen für eigene ICs auf Basis der Architektur und dem Zukauf von IP-Cores wählen – fertigen Funktionsblöcken wie CPU-Kernen der Arm-Cortex-A-Reihe, GPU-Einheiten wie Mali oder Bussystemen wie AMBA, die zu eigenen System-on-a-Chip-Bausteinen (SoC) konfiguriert werden. Seit 2026 stellt das Unternehmen auch eigene Prozessoren her. Einige Lizenznehmer wie Intel (neben z. B. Apple, Motorola/Freescale oder NXP) dürfen Änderungen und Erweiterungen am ARM-Kern durchführen; Intel vertrieb bis 2006 die in Lizenz gefertigte CPU XScale mit den Peripherie-Halbleitern PXA250, PXA260 und PXA270, die häufig in PDAs und Smartphones (Windows CE, Palm OS) eingesetzt wurden.
Befehlssatz, Registersatz und Ausführungsmodi
Die ARM-CPU ist eine RISC-Architektur mit drei Kategorien von Befehlen: Befehle zum Zugriff auf den Speicher (Load/Store), arithmetische oder logische Befehle für Werte in Registern sowie Befehle zum Ändern des Programmflusses (Sprünge, Unterprogrammaufrufe). Sie verwendet einen Drei-Adress-Code: arithmetisch-logische Befehle akzeptieren ein Zielregister und zwei Operandenregister, z. B. ADD r0, r1, r2 für r0 := r1 + r2. Die ARM ist sowohl Little-Endian- als auch Big-Endian-kompatibel (kann beide Byte-Reihenfolgen verarbeiten), was für Kommunikationsgeräte ein Vorteil ist; Standardmodus ist Little-Endian. Registersatz: Dem Programmierer stehen 13 Universal-Register r0 bis r12 zur Verfügung. Drei zusätzlich adressierbare Register haben besondere Bedeutung: r13 ist der Stackpointer, r14 der Link-Register (enthält bei Prozeduraufrufen mit BL, „branch with link“, die Rücksprungadresse) und r15 der Programmzähler (PC). Dazu kommt das Statusregister CPSR (Current-Program-Status-Register) mit Statusbits und Informationen wie dem momentanen Ausführungsmodus. Ausführungsmodi: User-Mode (normaler User-Code), Supervisor-Mode (SVC, privilegierte Betriebssystem-Tasks, Eintritt z. B. durch Software-Interrupt SWI), Hypervisor-Mode (HYP), Interrupt-Mode (IRQ, durch äußeren Interrupt-Request), Fast-Interrupt-Mode (FIQ, für besonders zeitkritische Ereignisse in Echtzeitsystemen), Memory-Abort (ABT, wenn eine Datenanforderung nicht erfüllt werden kann) und Undefined-Instruction-Exception (UND, bei unbekannten Instruktionen, z. B. zur Emulation eines Gleitkomma-Coprozessors). Für die Interrupt- und Exception-Modi werden r13, r14 und das Statusregister gespiegelt (Schattenregister), sodass Ausnahmebehandlungsroutinen den User-Stackpointer nicht sichern müssen. Bei Fast Interrupts werden zusätzlich r8 bis r12 gespiegelt.
Befehlsbreite, Adressierung und Besonderheiten
Sämtliche Befehle des ARM-Befehlssatzes sind 32 Bit lang. Das vereinfacht die Pipeline und die Instruction Fetch-Unit (jede Instruktion mit einem Speicherzugriff ladbar), aber 32-Bit-Werte passen nicht komplett in einen Befehl. Die Lösungen: Direktwerte werden mit 8 Mantissen-Bits und 4 Shift-Bits kodiert, wobei der tatsächliche Shift-Wert der doppelte gespeicherte Wert ist (Verschiebungen um 0, 2, 4, …, 30 Stellen, mit Ringschluss). Aus der Mantisse 255 ergeben sich so direkt kodierbare Werte wie 000000FF, 000003FC, 00000FF0 … FF000000, FC000003, F000000F und C000003F. Andere Werte entstehen durch Kombination arithmetischer Operationen oder werden aus dem Speicher in ein Register geladen. Der relative Sprungbefehl enthält einen 24-Bit-Offset, d. h. Sprünge im Bereich von ±32 MiB sind möglich (der Programmzähler eilt um 8 Byte vor). Bei gesetztem L-Bit wird der Programmzähler ins Link-Register kopiert – daraus wird ein Unterprogrammaufruf; die Funktion kehrt mit MOV PC,LR zurück. Load/Store-Befehle addieren einen 12-Bit-Offset auf eine Basisadresse aus einem Register; mit dem Programmzähler als Basisregister lassen sich Werte innerhalb von 4 KiB laden. So kann man auch an eine beliebige 32-Bit-Adresse springen: Die Sprungadresse wird hinter dem Ladebefehl gespeichert und mit dem PC-relativen Befehl LDR PC,[PC,#-4] geladen. Alles außerhalb der 4 KiB erfordert, zuerst die Adresse in ein Register zu laden. Besonderheiten des Befehlssatzes: Praktisch alle Befehle können bedingt ausgeführt werden („conditional execution“), kodiert durch die ersten 4 Bits bzw. ein Suffix (z. B. ADDGE = ausführen, wenn größer oder gleich; ADDLT = wenn kleiner). Das vermeidet in If/Else-Situationen Programmsprünge, die die Pipeline leeren und Wartezyklen verursachen. Der Bedingungscode 1111 stand anfangs für NV (never); diese Opcodes werden in neueren CPUs für Spezialbefehle wie PLD und BLX verwendet, NV-NOPs sind „deprecated“. Mit dem Suffix S werden wahlweise die Statusbits aktualisiert (z. B. ADDGES, kombiniert mit BCS = verzweige bei Überlauf). Die ARM besitzt einen Barrel-Shifter im B-Pfad der ALU; Befehle mit dem zweiten Operanden erlauben einen 4-Bit-Shift- oder Roll-Faktor, z. B. ADD r2, r3, r3, lsl #2 für r2 := 5*r3. Neuere ARM-CPUs kennen SIMD-Befehle.
Thumb-Befehlssatz und Coprozessoren
Thumb-Befehlssatz: Zur Erhöhung der Code-Dichte (weniger Speicherbedarf pro Funktion) entwickelte ARM Ltd. den Thumb-Befehlssatz mit nur 16 Bit breiten Befehlen. Trotz meist mehr Assembler-Befehlen wird die Code-Größe in der Praxis um etwa 30 bis 40 Prozent reduziert; aus 32-Bit-Speicherbausteinen lädt der Prozessor stets zwei Thumb-Instruktionen auf einmal. Nachteil: Thumb ist oft langsamer, da viele Befehle weniger leistungsfähig sind, es keine bedingte Befehlsausführung außer bedingten Sprüngen gibt und die Pipeline dadurch öfter entleert wird. NXP gibt für seine LPC2000-Controller einen Geschwindigkeitsverlust von 30 Prozent an. ARM- und Thumb-Code können gemischt werden (Thumb Interworking): unkritische Programmenteile in Thumb, zeitkritische in ARM. Beim GCC geschieht das über die Function Attributes attribute((thumb)) und attribute((arm)). Mit ARMv6 wurde Thumb auf 32-Bit-Code erweitert und Thumb-2 genannt; ab ARMv6T2 können 16-Bit- und 32-Bit-Instruktionen frei gemischt werden (beim ARMv6-M nur eingeschränkt). Thumb ist nur auf der klassischen 32-Bit-Architektur (retronym A32 bzw. AArch32) verfügbar, wurde aber nicht auf ARM64 (AArch64) übernommen. Coprozessor-Befehle: Der ARM ist als Mikroprozessor-Kern für eingebettete Systeme gedacht, in denen meist keine Gleitkomma-Arithmetik benötigt wird. Er wurde jedoch gezielt erweiterbar entworfen und besitzt ein eigenes Coprozessor-Interface samt Befehlen für optionale Coprozessoren. ARM Ltd. verkauft außerdem Erweiterungen als synthetisierbare Makrozellen für den SoC-Entwurf, z. B. Memory Management Units, Floating-Point-Coprozessoren und Signalprozessor-Erweiterungen (Piccolo).
Multi-Kern-Techniken: Big.LITTLE, DynamIQ und Server Interconnect
Big.LITTLE-Konzept: Zusammen mit dem Cortex-A7 führte ARM das Big.LITTLE-Konzept ein, um die hohe Rechenleistung des Cortex-A15 (3,5 DMIPS/MHz) mit der niedrigen Energieaufnahme des Cortex-A7 zu verbinden. Beide Kerne laufen als Cluster mit zwei bis vier Kernen auf einem SoC; da der Cortex-A7 aus Softwaresicht wie ein Cortex-A15 aussieht, wird der A15-Cluster bei einfachen Aufgaben abgeschaltet und bei Bedarf wieder eingeschaltet. Nach den 64-Bit-CPUs Cortex-A53 und A57 wurde das Konzept übertragen und erweitert: Tasks können jetzt individuell von einer beliebigen CPU auf jede beliebige übertragen werden. Schwächen sind z. B. hohe Latenzzeiten bei sprunghaften Laständerungen und die fehlende Berücksichtigung des realen Energieverbrauchs der einzelnen CPUs. DynamIQ (ab 2017): Eine DynamIQ Shared Unit (DSU) verwaltet mehrere CPU-Cores in einem Cluster mit gemeinsamem L3-Cache. Erweiterungen gegenüber Big.LITTLE: bis zu 6 Cluster mit beliebigen Mischungen von Kernen, bis zu 8 CPU-Kerne je Cluster, geringere Latenz zum CoreLink genannten Cache Coherent Interconnect (CCI), Tasks gleichzeitig auf mehrere Cluster, bis zu 24 Kerne, Memoryinterface über 1 oder 2 Ports (je 128- oder 256-Bit, AMBA ACE oder AMBA CHI), bis zu 6 Hauptspeicherkanäle, unterschiedliche Frequenzen und Spannungen je Cluster/Kern sowie Anbindung anderer Beschleuniger. 2021 erschien mit den Kernen Cortex-A510, -A710 und -X2 die DSU-110: zwei bidirektionale Ringe mit je vier Knoten, L3 in bis zu 8 parallel zugreifbaren Slices (bis zu fünffache Bandbreite), bis zu 16 MB gemeinsamer L3, Unterstützung von Memory Tagged Extensions (MTE), Anbindung über 1, 2 oder 4 je 256-Bit-breite AMBA CHI Ports. 2023 folgte mit Cortex-A520, -A720 und -X4 die DSU-120: 14 CPU-Cores je Cluster und bis zu 32 MB gemeinsamer L3. Die DynamIQ-CCI-Einheiten werden für SoCs ausschließlich mit den Arm-eigenen 64-Bit-Kernen Cortex-A55 und -A510, -A75 bis -A710 und -X1/-X2 angeboten. Server Interconnect: 2014 stellte Arm die CCN-500 Interconnect Serie vor (4 bis 12 Cluster mit je 4 Kernen, 2 bis 4 Speicherkanäle, L3 bis 8 bzw. 32 MB). Der Nachfolger CMN-600 (2016) vereint bis zu 32 Cluster in einem kohärenten Mesh-Netzwerk mit 64 (8 × 8) Knoten, bis zu 8 Speicherkanäle, 4 CCIX-Ports (seit Revision 2) und bis zu 128 MB L3-Cache. Der CMN-700 (2021) fasst in einem Mesh mit 144 (12 × 12) Knoten 256 CPU-Cores, 40 Speichercontroller (DRAM, HBM) und 32 CCIX-Ports zusammen, mit bis zu 512 MB L3-Cache.
Architekturversionen von ARMv1 bis Armv9
Die Architektur wird in Versionen unterteilt, abgekürzt mit ARMv[Versionsnummer]; ab ARMv2 wurde jede Version in mehreren Prozessoren implementiert. Seit ARMv6 gibt es die Cortex-Architekturen für besondere Anwendungen: Cortex A (Application, betriebssystembasierte Anwendungen), Cortex M (Microcontroller) und Cortex R (Realtime/Echtzeit). Seit 2018 gibt es die Neoverse-Familie für Serverlösungen; 2020 wurde die Cortex-A-Familie um die leistungsoptimierten Cortex-X-Kerne erweitert. Überblick: ARMv1 (ARM1, 1985, 4 MHz) wurde als Zweitprozessor im ARM Development System für den BBC Master eingesetzt. ARMv2 (1986): ARM2, 1986 veröffentlicht, ab 1987 im Acorn Archimedes; bei 8 MHz 4 MIPS; der ARM250 (1991) lief mit 12 MHz und 7 MIPS, mit integrierter MMU sowie Grafik- und IO-Prozessor (nur in A3010, A3020, A4000). Der ARM3 (1989) besaß erstmals einen 4-KiB-Cache und erreichte bei 25 MHz 12 MIPS (in A540, A5000, A4). ARMv3 (1991): ARM6, eingesetzt im Apple Newton und im Acorn Risc PC, 12–33 MHz. ARMv4 (1993): Der ARM7TDMI war das Low-End-Modell, verbaut als SoC-Komponente in Mobiltelefonen sowie im Game Boy Advance, Nintendo DS und Nintendo 3DS (jeweils als Subprozessor). Die Abkürzungen stehen für Thumb Instruction Set, Debug Port, 64-Bit-Result Multiplier und Embedded ICE Modul; er hat eine dreistufige Pipeline und einen gemeinsamen Bus für Instruktionen und Daten. Der mit DEC entwickelte StrongARM war die erste Abspaltung; der SA-110 (1995) sorgte im Newton 2000 mit Stromsparmodus für lange Akkulaufzeiten, der SA-1100 (1997) mit LCD-Schnittstelle, MCP-Audio/Touchscreen, PCMCIA, IrDA, USB und DMA-Controller war eines der ersten System-on-a-Chip. ARMv5TE (1997): implementiert in ARM7EJ, ARM9E und ARM10E. Der ARM9 (Weiterentwicklung von StrongARM und ARM8) hat gegenüber dem ARM7 je einen getrennten Bus für Instruktionen und Daten (Harvard-Architektur), eine fünfstufige Pipeline und bessere CPI-Werte (Cycles per Instruction); ohne Cache am externen Speicher kann der ARM7 trotz niedrigerem Takt schneller sein, weil seine Pipeline kürzer ist und weniger Stalls auftreten. Intel stellte ab 2002 die XScale-Reihe (802xx, PXA25x, XA263, PXA26x, PXA27x, PXA3xx) mit bis zu 1250 MHz vor (u. a. Palm Tungsten, Sony Clié); 2006 ging die Entwicklung an Marvell, das 2008 den Sheeva-Mikroprozessor und 2009 den SheevaPlug (erster marktreifer „Plug Computer“) vorstellte. ARMv6 (Oktober 2001 angekündigt): SIMD-Befehle, Multiprozessorunterstützung und neue Cache-Architektur; Implementierungen sind die ARM11-Familie (verbesserte Pipeline, ARM1136 ab Oktober 2002, verbaut in Smartphones von Apple und Nokia) und die Mikrocontroller-Kerne Cortex-M0, -M0+ und -M1. Thumb-2 ist seit ARMv6T2 verfügbar. Armv7 (2004): Einführung der SIMD-Einheit NEON mit 32 Registern à 128 Bit, primär für Multimediaverarbeitung, vergleichbar mit AltiVec/VSX (POWER) oder SSE/AVX (Intel). Die Kerne werden nun drei Anwendungsfeldern zugeteilt: Cortex-A (hohe Performance durch vielstufige Pipelines und mehrstufige Caches; z. B. Apple A4/A5, Nvidia Tegra, Samsung Exynos, Texas Instruments OMAP), Cortex-M (Mikrocontroller für nicht zeitkritische Steuer- und Regelaufgaben, viele Ein-/Ausgabeschnittstellen) und Cortex-R (harte Echtzeitanforderungen, z. B. in Festplatten, SSDs, Antiblockiersystemen und Airbag-Auslöseelektronik). Spätere ARMv7-Kerne wie Cortex-A15 und -A7 bieten zusätzlich die „Extended VMSAv7 MMU“ mit Large Physical Address Extensions (LPAE): drei Seitentabellen und mit 40 Bits bis zu 1 TB adressierbarer Speicher. Armv8-A (Oktober 2011): erstmals eine 64-Bit-Architektur für Datenverarbeitung und Speicheradressierung, abwärtskompatibel bis ARMv5. Zwei unabhängige Ausführungsmodi: AArch32 für 32-Bit-Software (herkömmlicher ARM-Befehlssatz) und AArch64 mit dem neuen Befehlssatz A64. VFPv3/v4 und SIMD (NEON) sind Pflicht, dazu Kryptographie-Instruktionen für AES und SHA-1/SHA-256. Im Oktober 2012 erschienen Cortex-A53 und Cortex-A57; die erste Fremdimplementierung war das X-Gene-SoC von Applied Micro (Juni 2013, „Server-on-a-Chip“); das erste Mobilgerät war das iPhone 5s (September 2013) mit dem SoC und zwei von Apple entworfenen Kernen namens Cyclone; Qualcomm entwickelte darauf aufbauend die Architektur Kryo (erstmals 2015). Erweiterungen: Armv8.1-A (Dezember 2014), Armv8.2-A (Januar 2016), Armv8.3-A (Oktober 2016), Armv8.4-A (November 2017), Armv8.5-A (September 2018), Armv8.6-A (August 2019), Armv8.7-A (Dezember 2020). Armv9-A (März 2021): baut auf Armv8.5-A auf; Memory Tagging (MTE) und Transactional Memory (TME) werden Pflicht, anfänglich auch Scalable Vector Extension 2 (SVE2) – später auf optional zurückgenommen; neu ist das Sicherheitskonzept Realms. Die AArch32-Kompatibilität wurde auf Applikationsebene (EL0) beschränkt und ist nur noch optional. Armv9.1-A verlangt eine volle Implementierung der verbindlichen Erweiterungen von Armv8.6-A, Armv9.2-A von Armv8.7-A. Typische Taktraten (Übersichtstabelle): ARMv2 8–25 MHz (0,5 DMIPS/MHz), ARMv3 12–40 MHz (0,89), ARMv4 16,8–206 MHz (0,9), ARMv5 104–1250 MHz (1,25), ARMv6 ca. 27–1000+ MHz (0,60–1,54), Armv7 bis 2500 MHz (bis 3,5), Armv8 1200–3300 MHz (2,3–4,1; 64-bit/32-bit), ARMv9 (2021, Cortex-A510/A710/X2, Neoverse N2).
Lernvideos zu ARM-Architektur
3:55
Von Neumann Architektur - Grundlagen des Rechners einfach erklärt
Studyflix · 153.022 Aufrufe
7:34
IFDO03 Was ist die Von-Neumann Architektur?
JavaWebAndMore · 82.352 Aufrufe
5:37
Kunst und Architektur in der Renaissance: Das musst du wissen – Geschichte | Duden Learnattack
Duden Learnattack · 51.678 Aufrufe
20:46
Mikrocontroller-Architektur erklärt am ATmega328 (Arduino)
FearlessEngineers - Elektrotechnik & Programmieren · 29.693 Aufrufe