! !

Designprinzipien moderner Prozessoren

ARM Cortex A9 B. Totev, C. Knap

! ! !

!

Geschichte:

!

Die britisch-österreichische Firma Acorn wird 1978 gegründet. Der erste von Roger Wilson entwickelter Rechner mit Mostek-6502Prozessor, 256 Byte Speicher, 512 Byte ROM, einer HexadezimalTastatur und kleinem Display, wird Anfang 1981 zum Durchbruch mit 1,5 Millionen Verkäufen. Leider vergisst Acorn ihre Techniken patentieren zu lassen, sodass Apple alles ganz legal kopieren konnte. Sophie Wilson entwirft den Befehlssatz der Acorn RISC Maschine -> ARM. Kurze Zeit später ( 26. April 85 ) entwickeln Wilson, Furber und Co. das erste laufende Modell. Es setzte sich nicht durch, da die Anfrage überwiegend Fertigprodukte waren. Das ganze ARM-Projekt verlor an Wert und wurde noch 1985 von der europäischen Firma Olivetti übernommen. Der ARM1 war ein Chipsatz aus Prozessor, Speicher-, I/O- und Grafik-Controller, der ohne Multiplikationseinheit daher kam. Der Nachfolger ARM2 wurde Ende 1987 in die ersten Archimedes-Rechner 305/310 und 410/420 ( alle mit 8 MHz Takt ) eingebaut. Der ARM3-Prozessor kam heraus mit einem integrierten L1-Cache eingebaut. Der Arm2-Kern wird zudem redesignt, war geeignet für den Embedded-Markt und zog viele Interessenten für Handheld-Produkte an, u.a Apple. ARM wurde von 'Acorn Risc Machine' zu 'Adcanced Risc Machines' und Apple beteiligte sich an den Investitionen. Steve Furbes entwickelt `taktlosen´ ARM-kompatiblen Prozessor namens Amulett. Unter dem neuen Chef Robin Saxby wurde nur IP vermarktet (Intellectual Property), die Nomenklatur der Prozessoren änderte sich, auf ARM3 folgte ARM6, später wurden es Buchstaben… ARM kam in Fahrt während Acorn den Desktop-Markt schliesslich aufgab und sich als Element 14 nur noch auf Kommunikation, Digital-TV und DSL konzentrierte Arm rules the world 1997 eroberte sich ARM7TDMI dank seines „Sparbefehlssatzes“ Thumb riesige Marktanteile in der EmbeddedWelt und lizenziert ihre Codes an so gut wie alle Halbleiter Firmen.

!

Die architektonische Schlichtheit von ARM Prozessoren geht zurück auf deren einfache, kleine und regelmäßige Befehlssätze. Dies ist heute beim Cortex A9 nicht anders. Einfache Prozessoren benötigen weniger Transistoren und dadurch auch weniger Siliziumfläche, deshalb passt eine komplette CPU samt leistungssteigernden Merkmalen, wie z.B. Cache, Speicherverwaltungfunktionen, Gleitkommaeinheit usw. auf einen Chip. Die anhaltenden Fortschritte in der Halbleitertechnik ( ⇾ Moore’s Law ) sorgen zusätzlich für eine Vergrößerung der beherrschbaren Chipfläche.

!

Architektur

Familie

Jahr

Takt

ARMv1

ARM1

1985

4 MHz

ARMv2

ARM2, ARM3

1986, 1989

8–25 MHz

ARMv3

ARM6, ARM7

1991, 1993

12–40 MHz

ARMv4

ARM7TDMI, ARM8, Strong ARM ARM9TDMI

1995, 1997

ARMv5

ARM7EJ, ARM9E, ARM10E, XScale

2002

ARMv6

ARM11, ARM Cortex-M0, ARM Cortex-M1 ARM Cortex-M1 - M4 ARM Cortex-A, ARM Cortex-R

2002

16,8– 75 MHz,... 180 MHz 104–369 MHz 133– 1250 MHz 400–772 MHz 170 MHz

ARMv7 ARMv8

ARM Cortex-A53, ARM Cortex-A57

2004, 2005

bis 2 GHz

2014

64-bit ?? GHz

! ! Die ARM Architektur ist eine RISC Architektur mit folgenden Merkmalen:

!

➛ Ausführung nahezu aller Maschinenbefehle in einem Taktzyklus, da Befehle einfach gehalten sind und ohne Microcode ausgeführt werden können.

!

➛ Eine große Registerbank mit 56 ( Cortex A9 ) 32-bit Registern.

!

➛ Feste ( 32 Bit ) Befehlsgröße mit wenigen Formaten ( z.B. 3 Befehl-Format ) ( bei CISC gibt es Befehle mit variablen Längen und verschieden Formaten ).

!

➛ Dies sorgt für eine effiziente Architektur, bei der Hauptspeicherzugriffe nur mittels der Befehle LOAD und STORE erfolgen. Alle anderen Operationen werden allein auf Registeroperanden ausgeführt ⇾ Harvard-Architektur - Vermeidung struktureller Pipelinekonflikte ! ( bei CISC Prozessoren lassen die Verwendung von Werten im Speicher als Operanden in Datenverarbeitungsbefehlen zu ). Zusätzlich bietet die ARM Architektur weiterhin:

!

➛ Shiftbefehle kombiniert mit arithmetischen oder logischen Operationen ➛ auto-increment und auto-decrement Adressierungsmodi ➛ Load und Store multiple Instructions ➛ bedingte Ausführung von fast allen Befehlen

! ! ! !

Der User Mode, wie wir ihn von Rechnerarchitekturen kennen, ist weiterhin aus den 32-bit Kernregistern R0 - R15 plus CPSR aufgebaut. Die übrigen Register werden bei der Programmierung auf Systemebene benötigt, oder ro beim Exception Handling ( Interrupts ) in verschieden CPU Modes.

! ! ! ! !

Die meisten ARM Befehle können weiterhin bedingt ausgeführt werden. Das bedeutet, dass ein Programmierer Operationen, Speicherzugriffe oder Coprozessorzugriffe mit flags versehen kann, welche spezifische, bedingte Befehle zur Folge haben können. Ist dies nicht der Fall, fungiert der Befehl als NOP und der nächste Befehl kann ganz normal behandelt werden. Durch die bedingte Ausführung von Befehlen werden Sprünge gemieden und somit auch Konflikte in der Pipeline. Bedingte Verzweigungen hingegen sorgen für Konflikte in der Pipeline.

! ! ! !

r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 sp r14 lr r15 pc CPS R

! ! ! ! ! ! Ein einfaches, vergleichendes Beispiel soll das illustrieren: ! ! CMP r0, #8; BEQ JUMP; ADD r1, r1, r0; SUB r1, r1, r2; JUMP …

if (r0 != 8) { r1:= r1+r0-r2 }

!

dies wird ersetzt durch: CMP r0, #8; ADDNE r1, r1, r0; SUBNE r1, r1, r2; …



Dieser Codeabschnitt ist schneller und kürzer & pipelinetauglich !

! ! ! !

weitere Cortex A9 Features Thumb-2 Technologie

Speicherreduktion bei Store Befehlen

MPE

Cortex NEON Media Processing Engine

FPU

Floating Point Unit

optimierte Caches / Controller

schnelle Speicher

Accelerator Coherency Port

Verbindung zu nicht-cachebaren Peripherien

Generic Interrupt Controller

unterstützt 224 unabhängige Interrupts

TrustZone® Technology

PayPal, Banking Apps…

Jazelle RCT and DBX Technology

Java Unterstützung / Beschleunigung

Advanced SIMD Architektur Erweiterung

beschleunigt u.a. MPE und FPU durch zusätzliche, breitere Registerbank

und: v7 debug Architektur, trace Unterstützung mit Interface, Intelligent Energy Manager, optionale Preload Engine, PTM interface, Performance monitoring Virtualisierungsfeatures (z.B. für Interrupts) …

! Der Cortex A9

!

Der Cortex A9 kann sowohl als Einkerner, als auch als Mehrkerner konfiguriert werden. In der Multiprozessorvariante, die bis zu 4 Kerne unterstützt, ist die Snoop Control Unit (SCU) für eine stimmige Verwendung des gemeinsam genutzten L1 Data Caches verantwortlich. Dual 64bit AMBA3 AXI ist ein Port / Bus für Peripherie ausserhalb des Prozessors. Die AXI Advanced Microprocessor Bus Architecture stellt eine Verbindung zum L2 Cache her. ACP ist ein optionaler AXI 64-bit Port für noncached Peripherie. NEON: ARMs optionale Media Processing Engine.

! !

Beispiel iPhone: Der Apple iPhone und iPad SoC wurden über mehrere Generationen mit zwei A9 Prozessoren konfiguriert.

! ! ! ! ! !

! !

Apple A5 SoC:

- 96,71 mm² - 32 nm - 2x Cortex A9 ARM-7s CPU Kerne / 1,3 GHz ( Apple swift ) - 336 MIPS ( Integer Test ) - 2x 32 KB L1 Cache - bis 8 MB L2 Cache - 2x PowerVR GPU 266MHz normal sind 4 GPUs - ca. 300 mW Stromaufnahme - Coprozessor ( z.B. Cortex M ): Audio Controller oder Video Decodierung…

! !

! !

ARM setzt beim Prozessordesign des A-9 zum ersten mal auf eine out-of-order Ausführung mit spekulativer, 2-fach superskalarer & längenvariabler ( 8 -11 stufiger Pipeline ).

! Speicherhierarchie Cortex A9: !

! !

!

➛ „innen“ Havard:

! ! ! ! ! ! ! ! ! !



RISC

! ! ! ! ! ! ! ! ! !

➛ „außen“ von Neumann:

Im Prozessordesign sind viele Leistungssteigerungen und erweiterte Pipeline Techniken durch kleine Speicher, Buffer und zusätzliche Register realisiert.

!

Forwarding -> ist eine Methode zum lösen eines Datenkonflikts, bei der das fehlende Datenelement aus internen Pufferspeichern abgerufen und nicht darauf gewartet wird, bis dieses aus den für den Programmierer sichtbaren Registern oder aus dem Speicher kommt und weiterverarbeitet wird.

!

Sprungvorhersage -> ist eine Methode zum Auflösen eines Steuerkonflikts, bei der für den Sprung ein bestimmtes Ergebnis angenommen wird und bei der unter dieser Voraussetzung fortgefahren wird, statt auf die Bestätigung des tatsächlichen Ergebnisses zu warten.

!

! Pipelinehemmnisse: !

Beim Pipelining gibt es drei verschiedene Situationen in den der nächste Befehl nicht im folgenden Taktzyklus ausgeführt werden kann. Diese Ereignisse werden als Hemmnisse oder Konflikte bezeichnet.

!

1) Struktukonflikte ( structural hazard ): Hierbei kann die Hardware die Befehlskombination, die in einem Taktzyklus ausgeführt werden soll, nicht unterstützten. Dies Art von Hemmnis ist durch die im ARM Prozessor herrschende Harvard Architektur auszuschließen. 2) Steuerkonflikte ( control hazard ): Ein Ereignis irgendwie gewünschte Befehl nicht im gewünschten Takt Zyklus ausgeführt werden kann, weil der Befehl, der geholt wurde, nicht der ist, der benötigt wird. Das bedeutet, dass die Abfolge von Befehlsadressen anders als von der Pipeline erwartet ist. Er kann entstehen, wenn aufgrund der Ergebnisse eines Befehls eine Entscheidung getroffen werden muss, während andere Befehle ausgeführt werden. 3) Datenkonflikte ( data hazard ): treten auf wenn die Pipeline anhalten muss, da ein Schritt auf den auf den Abschluss eines anderen wartet. NOPs werden eingefügt und die Pipeline ausgebremst. Der Compiler des Cortex A9 eliminiert dies in der register renaming Phase und der dispatch Phase.

! ! ! ! ! ! !

Blockschaltbild Cortex A-9:

!

! 1a) Instruction prefetch state ! 2) Dual instruction decode stage ! 3) Register rename stage: ! 4) Dispatch stages ! 5) Execute stage ! 1b) data cache with memory system

! ! !

!

und Writeback stage

Instruction prefetch state:

Instruction cache: Der Cache ist 16, 32 oder 64 KB groß und holt 2 Befehle aufeinmal.

!

Small loop mode: Energiesparfeature der Instruktion Prefetch Einheit. Befehlsschleifen die kleiner als 64 Byte sind, brauchen in der Regel keinen weiteren Zugriff auf den Instruktion Cache, weshalb dieser Unterbunden wird.

!

Die Instruktion Queue ist eine Warteschlange die dafür sorgt, dass in der Dekodierphase immer genügend Befehle zur Verfügung stehen, um eine hohe Auslastung zu erzielen ( Fassungsvermögen: 12 Einträge ).

!

Dual instruction decode stage: 2 bis 4 volle Befehle pro Taktzyklus werden hier decodiert (Super Scalar Decoder). Das Bauteil besteht aus 2 unabhängigen Einheiten. In dieser Stufe werden der Befehlscode und die Operanden ermittelt. Nach dem Dekodieren des Befehls werden die Operanden geladen.

!

Die Dekodierpipeline besteht aus den folgenden Stufen: .

D0  Dekomprimierung spezieller Thumb Befehle in 32-Bit ARM Instruktionen. Anschließend wird eine vorläufige Dekodierfunktion ausgeführt.

.

D1  Abschließen der Dekodierung. Einige wenige Befehle müssen in mehrere Teilbefehle zerlegt und rückgekoppelt werden.

.

D2  Lesen und Schreiben von Befehlen in eine Warteschlange zur Entkopplung, damit der Ausführungspipeline möglichst of zwei ausführbare Befehle bereit stehen.

.

D3  Einteilung der Befehlsausführung und Überprüfung der Datenabhängigkeiten. Zwei abhängige Befehle werden an dieser Stelle serialisiert. Das Scoreboard prognostiziert, wann die Operanden bereit sind, was durch Cache Hits und Misses beeinflusst wird.

! !

! ! ! !

Register rename stage: Das Register Renaming erleichtert die out-of-order Ausführung in Write-after-Write (WAW) und Write-after-Read (WAR) Situationen. Datenabhängigkeiten zwischen Instruktionen sollen durch Umbenennung der Registeroperanden beseitigt werden. Die Register die der Assembler Programmierer oder der Compiler benutzen werden in die 56 unsichtbaren physikalischen 32-bit Register umgeschrieben. Dem CPSR stehen noch ein dedizierter Pool von 8 physikalischen 9-bit Registern zur Verfügung. Wahre Datenabhängigkeiten werden besser erkannt ( d.h.: keine Namensabhängigkeiten zwischen den Anweisungen ). Ein Bit wird gesetzt um zu bestimmen ob ein Wert bereits berechnet wurde. Dies erlaubt eine out-of-order execution, sofern keine echten Abhängigkeiten bestehen.

!

Dispatch stages: Hier findet die eigentliche out-of-order Zuteilung (Scheduling) statt. Die zur Ausführung bereitstehenden Befehle in der Instruction Queue werden auf Konflikte geprüft. Befehle, die zur Ausführung freigegeben wurden, werden dynamisch und spekulativ auf die Ausführungspipelines verteilt. Außerdem sorgt eine Kontrollstruktur, die von der Writebackeinheit über die korrekte Ausführung eines Befehls informiert wird, für den Abschluss des Befehls (Commit) und das Entfernen aus der Warteschlange. Execute stage: Die Ausführungeinheit ist dreifach superskalar und besteht aus zwei ALUs, einem Multiplizierer, einer Load/Store Einheit und optional wird die NEON- und Fließkommaeinheit über die Load/Store Pipeline integriert. Abhängige Load/Store Befehle können in das Speichersystem weitergeleitet und dort unabhängig weiter bearbeitet werden, wodurch ein Stocken der Pipeline verhindert wird.

Write back stage: Diese Einheit ist in ihrer Komplexität sehr gestiegen, da nun die ausgeführten Befehle in beliebiger Reihenfolge eintreffen. Die Befehle werden sortiert (Reorder) und es wird sichergestellt, dass die Ausführung korrekt ablief. Die Dispatcheinheit wird darüber verständigt. Dann erfolgt das Rückschreiben der Ergebnisse in die Register.

! ! ! ! ! ! !

! !! !! !! !! !! !! !! !! !!

Quellenangaben:

- Rechnerorganisation und -entwurf von D. Patterson und J. Hennessy - Designprinzipien_moderner_Prozessoren.pdf von G. Fröhlich - http://www.arm.com/products/processors/cortex-a/cortex-a9.php - ARM.com Technical Reference Manual.pdf vom Cortex A9

!

- http://www.wallstreet-online.de/aktien/arm-aktie#t:10y||s:lines||a:abs|| v:week - http://www.heise.de/ct/artikel/Die-ARM-Story-1425834.html?view=zoom;zoom=5 - http://www.chipworks.com - http://en.wikipedia.org/wiki/ARM_architecture#Core_license - Vorlesungsskript Rechnerarchitekturen von G. Raffius - http://www.heise.de/newsticker/meldung/ARM-steigert-Umsatz-und-Gewinn-1652353.html - http://blog.daniel-weisensee.de - ARM-Rechnerarchitekturen für SoC Design von S. Furber