Motorola 680x0: function codes CPU unterscheidet mittels function codes fünf Adressräume: CPU-Adreßraum wird für E/A, Interrupts und Koprozessoren eingesetzt Realisierung z.b. durch Speicherverwaltungseinheit ( Memory Management Unit, MMU) 13 Motorola 680x0: Interrupts interne Interrupts ( exceptions ) ausgelöst z.b. durch Versuch, im User-Modus privilegierte System-Befehle auszuführen Adressierungsfehler bei Instruktionen auf ungeraden Adressen Versuch, nicht implementierte Instruktionen auszuführen explizite Trap Befehle im Programm externe Interrupts: über drei Eingangsleitungen wird bei jedem Interrupt der CPU eine Prioritätsstufe p {1,...,7} mitgeteilt; nur wenn p größer ist als die durch (I 2 I 1 I 0 ) im Systembyte des SR dargestellte Zahl, wird Interrupt akzeptiert höher priorisierter Interrupt unterbricht ggf. eine Behandlungroutine für einen niedrigeren Interrupt und setzt (I 2 I 1 I 0 ) auf den neuen Wert p Ausführung von RTI stellt vorherigen Inhalt von (I 2 I 1 I 0 ) wieder her alle Interrupts setzen Prozessor in den System-Modus und sichern PC und SR auf Stack! 14 1
Motorola 680x0: Interrupts (Forts.) vektorisierte Interrupts: Interrupt-Vektortabelle (IVT) mit 256 Einträgen an beliebiger Stelle im Speicher, Startadresse der IVT in Vektor-Basis-Register VBR Ablauf eines vektorisierten Interrupts: 1. E/A-Gerät signalisiert Interrupt einer Ebene p 2. CPU signalisiert IACK(p), wenn Interrupt (nach Vergleich mit I 2 I 1 I 0 ) akzeptiert 3. E/A-Gerät legt lokal gespeicherten 8-Bit Interrupt-Vektor IV auf Datenbus 4. CPU lädt PC mit Startadresse der Behandlungsroutine aus IVT[IV] 15 Motorola 680x0: neue Befehle (Auswahl) Befehle zur Verarbeitung von Bit-Strings variabler Länge width [1,32] auf Adresse ba=<ea>{offset:width} mit Bit-Offset offset [0,31] BFINS Dn,ba BFFO ba,dn BFCLR ba bit field insert bit field find first one bit field clear BFEXTU ba,dn BFTST ba BFSET ba bit field extract bit field test bit field set Beispiel: MOVE.W #3,D0 ; kopiere 4 Bitmuster L1 BFEXTU (A0){2:15},D1 ; lade D1 mit Bitmuster von (A0) BFINS D1,(20,A0){5:15} ; schreibe Bitmuster an (A0)+20 LEA (4,A0),A0 ; A0 A0+4 DBRA D0,L1 ; dekrementiere D0 und springe, ; wenn D0-1 Befehle zum Verschieben von Daten im Speicher Beispiele: MOVE.<size> <ea>,<ea> ; einzelnes 8/16/32-Bit Datum MOVE16 (An)+,(Am)+ ; 16 Bytes (mit Postinkrement) MOVE16 (An),<addr> ; 16 Bytes (absolut) Befehle für 32 32 64 Bit Multiplikation, Beispiel: MULS.L <ea>,d1-d0 16 2
Motorola 680x0: Architektur mikroprogrammiertes Steuerwerk drei ALUs: für arithmetisch/logische Operationen auf 8/16/32-Bit Daten aus Dn zur Berechnung effektiver Speicheradressen mittels Zeiger in An zur Ermittlung des neuen PC-Inhalts für die nächste Instruktion interne Harvard-Architektur (weitgehend getrennte interne Behandlung von Daten- und Programm-Adressen) seit 68020: Ausrichtungslogik für inkorrekt ausgerichtete 16/32-Bit Daten (benötigt zusätzliche Takte) seit Motorola 68020: integrierte Cache-Speicher (zunächst ein 256 Byte Instructions-Cache, in Motorola 68040 zwei separate 4 KByte Daten- und Instruktions-Caches) seit Motorola 68030: Integration von MMU ( Memory Management Unit ) mit ATC ( Address Translation Cache ) für Mehrprogrammsysteme seit Motorola 68040: Integration von FPU ( Floating-Point Unit ) 17 Motorola 680x0: Architektur (Forts.) Aufbau der 68040 CPU: 18 3
CISC RISC Ende der 70er Jahre übernahmen Motorola und Intel das CISC- Konzept von den IBM Großrechnern und DEC Minicomputern und lenkten den Mikroprozessormarkt in diese Richtung in der 80er Jahren bestand der Trend zu immer komplexeren CISC-Architekturen: jede durch technologischen Fortschritt ermöglichte Steigerung der Transistoranzahl wurde für neue Instruktionen und Adressierungsarten verwendet (begünstigt durch interne Mikroprogrammierung) Befürworter des CISC-Konzeptes wollten die semantische Lücke zwischen System-/Anwendungsprogrammen und Maschinenprogrammen schliessen Man erhoffte sich hierdurch eine Steigerung der Softwareproduktivität, einfachere Übersetzer, kürzere und elegantere Maschinenprogramme sowie eine höhere Leistung 19 CISC RISC (Forts.) die Prozessorhersteller bedachten jedoch nicht die aus der zunehmenden Komplexität ihrer CISC-CPUs resultierenden Probleme: Kompatibilität zu alten Prozessorentwürfen führte zu ineffizienten und umständlichen Architekturen (vor allem bei Intel x86 Familie) komplexe Mikroprogrammwerke mussten je Maschinenbefehl im Mittel etwa 10 Mikrobefehle ausführen bei den ersten CISC-CPUs war dies aufgrund schneller interner ROMs (mit Mikroprogramm) und langsamer externer RAMs (mit Maschinenprogramm) noch akzeptabel durch die Einführung von schnellen Cache-Speichern für Instruktionen verschwand jedoch der Geschwindigkeitsvorteil des internem Mikroprogrammspeichers fast völlig nur alle 10 Takte wird im Mittel eine neue Instruktion aus dem Cache geholt und ausgeführt, d.h. CPI ( Clocks Per Instruction ) 10 20 4
CISC RISC (Forts.) D.A. Patterson stellte 1981 ein anderes Konzept für eine effiziente Prozessorarchitektur vor (ähnliches Konzept wurde jedoch zuvor bereits 1979 im IBM 801 Minicomputer realisiert) Ziel: Ausführung einer Instruktion je Maschinentakt, d.h. CPI = 1 Ansatz: Analyse der Nutzung von Maschineninstruktionen in typischen (aus einer Hochsprache übersetzten) Anwendungsprogrammen Ergebnisse: ca. 74% aller Instruktionen sind einfache MOVE, Bcc, JSR und RTS Befehle! es ist sinnvoller, die Ausführung einfacher Befehle zu optimieren anstatt neue mächtige Instruktionen hinzuzufügen Ursachen sind u.a. häufige Aufrufe von Unterprogrammen mit Parameterübergabe und Erzeugung lokaler Variablen auf Stack instruction type data movement control flow arithmetic compare logical shift bit manipulation miscellaneous usage 45.28 % 28.73 % 10.75 % 5.92 % 3.91 % 2.93 % 2.05 % 0.44 % aus A. Clements, Computer Hardware, S. 354 21 CISC RISC (Forts.) weitere Ergebnisse der Analyse: 56% aller verwendeten Konstanten lagen im Bereich von 16 bis 15; 98% lagen im Bereich von 512 bis 511! Konstanten können in 10 Bit des Befehlswortes kodiert werden! bei Unterprogrammaufrufen wurden in 95% aller Fälle nicht mehr als 12 Speicherworte für Parameter und lokale Variablen benötigt mit mindestens 12 Register können Unterprogrammaufrufe effizient realisiert werden 53% aller Operationen verwendeten eine Register-Adressierung, 32% eine Speicheradressierung und 15% die unmittelbare Adressierung Registeradressierung stellt die wichtigste Adressierungsart dar bei den Speicherzugriffen lag in ca. 70% aller Fälle eine indizierte Adressierung (ohne/mit Offset) vor indizierte Adressierung ist in meisten Fällen ausreichend! 22 5
Eigenschaften von RISC-Prozessoren ausreichend große Anzahl von Registern zur Speicherung von Zwischenergebnissen und zur Parameterübergabe zwei Klassen von Befehlen: Load/Store Instruktionen, die ein Wort zwischen Speicher und Register transferieren 3-Adress-Instruktionen nur mit Registeroperanden: <instr> <reg1>,<reg2>,<reg3> Verzicht auf komplexe, selten benötigte Instruktionen und Adressierungsarten effiziente Realisierung von Sprungbefehlen Steuerwerk durch festverdrahtete Logik realisiert; nach Möglichkeit eine Instruktion je Takt (mittels Instruktionspipelining) einfache (und somit schnelle) Dekodierung aller Befehle durch weitgehend einheitliches Instruktionsformat; je Befehl nur ein Instruktionswort (typische Länge: 32 Bit)! 23 Beispiel: ARM Prozessor die Fa. Acorn Computer Group (UK) stellte 1985 den ersten kommerziell entwickelten RISC-Prozessor vor 1990 Gründung der Fa. ARM (Advanced RISC Machines, UK) Familie kompatibler RISC-Prozessoren wurde entwickelt: ARM7 (1993, 17 MIPS) bis ARM10 (1998, 390 MIPS) Portierung von Windows CE auf ARM im Jahre 1996; Intel kauft 1998 Lizenz zum Bau des StrongARM RISC Prozessors einfache und elegante 32-Bit RISC Architektur mit einigen interessanten Architekturmerkmalen Entwurf optimiert für sehr geringen Energieverbrauch wird heute z.b. in Handheld Computern und in eingebetteten Systemen eingesetzt 24 6
ARM: Programmiermodell Programmiermodell: 16 Allzweck-Register r0 bis r15 r15 ist PC r14 ist link register lr (speichert die Rücksprungadresse!) r13 dient als stack pointer sp (jedoch nicht zwingend) nach Interrupts und Ausnahmen werden einige der Register r8 bis r14 automatisch ausgetauscht Statusregister CPSR ( current program status register ), Bit 7...0 im user mode nicht veränderbar; nach Interrupts und Ausnahmen Sicherung in einem von 5 SPSRs ( saved program status register ) 25 ARM: Architektur Aufbau des ARM7: insgesamt 37 Register Barrel Shifter zum Schieben eines 32-Bit Wertes um eine beliebige Distanz in einem Takt little / big endian Formate hardwaremäßig einstellbar 5 Unterbrechungsarten mit fester Priorität Reset (höchste Priorität) Abort (z.b. bei Speicherfehler) FIQ (Fast Interrupt) IRQ undefined instruction / SWI versetzen CPU in abort/fiq/ IRQ/undefined/supervisor mode 26 7