F ein einfacher Modellprozessor F Ein einfacher Modellprozessor Einordnung in das Schichtenmodell:. Prozessor 2. Aufbau des Modellprozessors 3. Organisation eines SRAM 4. Beschreibung in RTL 5. Adresspfad 6. Datenpfad 7. Kontrollpfad 8. Befehlssatz 9. ein einfaches Steuerwerk F-2 Prozessor Prozessor = CPU ( Central Processing Unit ) Mikroprozessor = CPU auf einem Chip CPU = Steuerwerk + Rechenwerk + E/A-Werk Von Neumann Prinzip: Programme und Daten sind im gleichen Speicher in jedem Befehlszyklus wird ein Befehl geholt, dekodiert und ausgeführt ( Fetch/Decode/Execute ) E/A-Werk hier nicht weiter behandelt Prozessor (2) Wieso zunächst Betrachtung eines Modellprozessors? Modellprozessor: einfacher, übersichtlicher Aufbau aus bereits bekannten Komponenten einheitlicher Speicherzugriff kompakter Befehlssatz (ca. 35 Instruktionen) realer Prozessor: detaillierter Aufbau des Prozessors nicht dokumentiert sehr große Anzahl unterschiedlicher Speicherzugriffsmöglichkeiten sehr großer Befehlssatz (ca. 25 Instruktionen) viele komplexe, hier zunächst nicht betrachtete Architekturkonzepte (z.b. Instruktionspipelining, Parallelität, Out-of-Order Befehlsausführung) F-3 F-4
2 Aufbau des Modellprozessors 3 Organisation eines SRAM CPU besteht aus SRAM = Static Random Access Memory Datenpfad: Datenregister, ALU und MBR Adreßpfad: Programmzähler (PC), Inkrementer und Adreßregister (MAR) allgemeiner Aufbau: 2 b n D Flip-Flops 2 b Speicherzeilen Kontrollpfad: Instruktionsregister (IR), Kontrolleinheit und Statusregister (CCR) Speicher nicht Teil der CPU! je Zeile ein n-bit Wort Steuersignale E (Enable) und R/W (Read/Write) F-5 F-6 4 Beschreibung in RTL 4 Beschreibung in RTL (2) Arbeitsweise einer CPU läßt sich einfach durch den Transfer von Registerinhalten beschreiben Verwendung von RTL ( Register Transfer Language ) Notationen: D [D] [M(x)] [Y] [X] Datenregister D Inhalt von Datenregister D Inhalt des Speichers M an Adresse x Transfer des Inhalts von Register X nach Register Y Beispiele: [D] [D] Registerinhalt von D nach D kopieren [D] [M(3)] Speicherinhalt von Adresse 3 nach D kopieren [M(5)] [D] Registerinhalt von D nach Speicheradresse 5 kopieren [D] [D]+ Registerinhalt von D inkrementieren [D] [M([AR])] Speicherinhalt von Adresse aus Register AR nach D kopieren RTL ist eine Notation und keine Programmiersprache! RTL kann eingesetzt werden, um Abläufe im Modellprozessor einfach zu beschreiben Beispiel: durch den Befehl MOVE 4,D soll der Modellprozessor den Inhalt von Speicheradresse 4 lesen und in das Register D schreiben die Ausführung des Befehls kann in RTL beschrieben werden durch: [D] [M(4)] im folgenden werden in RTL die Phasen bei der Abarbeitung eines Befehls im Modellprozessor beschrieben: Befehlsholesequenz: RTL-Sequenz zum Holen des nächsten Befehls aus dem Speicher ( Fetch -Phase) Ausführungssequenz: RTL-Sequenz zur Ausführung des Befehls mit allen beteiligten Registern ( Decode - und Execute -Phase) F-7 F-8
5 Adresspfad des Modellprozessors 5 Adresspfad des Modellprozessors (2) PC enthält Adresse der Speicherzeile mit dem nächsten auszuführenden Befehl (Initialisierung mit [PC] ) n-bit Instruktion kann neben dem Opcode-Anteil auch einen b-bit Adress-Anteil a enthalten (im Modellprozessor gilt: n > b) Adresse i ist eine b-bit Zahl, die die i-te Zeile aus 2 b Speicherzeilen auswählt jede n-bit Speicherzeile kann einen Befehl enthalten Befehlsholesequenz in RTL: (nächster Befehl wird ins MBR und von dort in das Register IR geladen; Opcode-Anteil des Befehlswortes wird dem Steuerwerk übergeben) FETCH: [MAR] [PC] [PC] [PC] + [MBR] [M(MAR)] [IR] [MBR] CU [IR(Opcode)] in der Ausführungsphase wird dieser Adressanteil in das Register MAR geladen und dient als Speicheradresse Beispiel: RTL-Ausführungssequenz für Befehl MOVE 7,D : (Ausführungssequenz ist für jeden Befehl unterschiedlich!) MOVE: [MAR] [IR(Addr)] [MBR] [M(MAR)] [D] [MBR] F-9 F- 6 Datenpfad des Modellprozessors 6 Datenpfad des Modellprozessors (2) arithmetisch/logische Einheit: kann einstellige Operation auf Inhalt von D ausführen (Beispiel: NOT D) zwei Operanden aus D und aus Speicheradresse i verknüpfen (Beispiel: ADD 7,D) Ergebnis der arithmetisch/ logischen Operation in D Auswahl der ALU-Funktion durch Opcode und Steuerwerk Beispiel: RTL-Ausführungssequenz für Befehl ADD 7,D : ADD: [MAR] [IR(Addr)] [MBR] [M(MAR)] ALU [D]; ALU [MBR] [D] ALU Aufbau einer einfachen n-bit Arithmetisch/Logischen Einheit zur Addition, Multiplikation und bitweisen logischen Verknüpfung: Auswahl von Addierer, Logikeinheit oder Multiplizierer über zwei Multiplexer-Steuersignale ALU, ALU F- F-2
6 Datenpfad des Modellprozessors (3) entweder die n höherwertigen oder die n niedrigwertigen Bits des 2n-Bit breiten Produktes y = a b können ausgegeben werden bei Wahl von NOT =, CIN = und SUB = kann Addierer auch y = a b berechnen Funktionen der Logikeinheit: L 2 L L Bedeutung y i = a i b i (bitweises UND) y i = a i + b i (bitweises ODER) y i = a i b i (bitweises XOR) y i = a i y i = a i (bitweises NOT) y i = a i+ für i < n, y n = c in, c out = a y i = a i+ für i < n, y n = a n, c out = a y i = a i für i >, y = c in, c out = a n 6 Datenpfad des Modellprozessors (4) ALU generiert vier Statussignale: N =, wenn Ergebnis y negativ ist, d.h. wenn y n = Z =, wenn y = ist (Zero), d.h. wenn y n +... + y + y = V =, wenn im Addierer bei c n c n 2 = ein arithmetischer Überlauf (overflow) generiert wird C =, wenn bei Addition zweier n-bit Zahlen das Carry-Bit c n gesetzt ist bzw. wenn bei Subtraktion zweier n-bit Zahlen das Carry-Bit c n nicht gesetzt ist oder : C = bei Linksschieben einer n-bit Zahl a mit Bit a n =, bzw. bei Rechtsschieben von a mit Bit a = F-3 F-4 7 Kontrollpfad des Modellprozessors 8 Befehlssatz des Modellprozessors fast alle Algorithmen haben for- oder while-schleifen und if-verzweigungen datenabhängiger Kontrollfluß Statusregister CCR speichert Statussignale N,Z,V und C der letzten ALU-Operation bedingte Sprungbefehle testen ein Bit ( Flag ) des CCR und verzweigen zur Zieladresse a, wenn das Flag gesetzt ( Set ) oder nicht gesetzt ( Clear ) ist Beispiel: RTL-Sequenz zur Ausführung des Befehls BCC a (BCC = Branch on Carry Clear ) IF [C]= THEN [PC] [IR(ADDR)] Lade- und Speicherbefehle: MOVE a,d MOVE D,a MOVE #x,d Laden von [D] mit Inhalt von Speicheradresse a Speichern von [D] in Speicheradresse a unmittelbares Laden von D mit einer Konstanten x beim Befehl MOVE #x,d befindet sich die Konstante x im Adreßfeld der Instruktion ( Move Immediate ): zur Kodierung von x stehen nur b < n Bits zur Verfügung beim Transfer [D] [IR(Addr)] wird durch Ergänzung führender Bits mit demwert x b ein n-bit Operand generiert Beispiel: MOVE #-, D Seien z.b. b = und n = 6, dann ist im Adressteil des Befehlsworts die Bitsequenz kodiert; in das Register D wird jedoch geladen! F-5 F-6
8 Befehlssatz des Modellprozessors (2) arithmetische Befehle: ADD a,d Addition von [M(a)] und [D] ADD #x,d Addition der Konstanten x zu [D] ADDC a,d Addition von [M(a)] und [D] mit Carry SUB a,d Subtraktion der Speicherstelle [M(a)] von [D] SUB #x,d Subtraktion der Konstanten x von [D] CMP a,d wie SUB a,d jedoch ohne Modifikation von D CMP #x,d wie SUB #x,d jedoch ohne Modifikation von D SUBC a,d Subtraktion der Speicherstelle [M(a)] von [D] mit Carry MUL a,d Bits n,..., der Multiplikation von [M(a)] und [D] MULH a,d Bits 2n,...,n der Multiplikation von [M(a)] und [D] 8 Befehlssatz des Modellprozessors (3) logische Befehle: AND a,d OR a,d XOR a,d NOT D LSR D ASR D ROR D LSL D ROL D bitweise UND-Verknüpfung von [M(a)] und [D] bitweise ODER-Verknüpfung von [M(a)] und [D] bitweise XOR-Verknüpfung von [M(a)] und [D] Negation (er-komplement) von [D] Logisches Rechtsschieben von [D]: Null wird eingeschoben, Bit von D nach Flag C Arithmetisches Rechtsschieben von [D]: Vorzeichenbit wird eingeschoben, Bit von D nach Flag C Rechtsrotieren von [D]: Wert von Flag C wird eingeschoben, Bit von D nach Flag C Logisches Linksschieben von [D]: Null wird eingeschoben, Bit n von D nach Flag C Linksrotieren von [D]: Wert von Flag C wird eingeschoben, Bit n von D nach Flag C F-7 F-8 8 Befehlssatz des Modellprozessors (4) Befehle zur Steuerung des Kontrollflusses: BCC a Sprung bei C= ( Branch on Carry Clear ) BCS a Sprung bei C= ( Branch on Carry Set ) BNE a Sprung bei Z= ( Branch on Not Equal ) BEQ a Sprung bei Z= ( Branch on Equal ) BPL a Sprung bei N= ( Branch on Plus ) BMI a Sprung bei N= ( Branch on Minus ) BVC a Sprung bei V= ( Branch on overflow Clear ) BVS a Sprung bei V= ( Branch on overflow Set ) BRA a Unbedingter Sprung ( Branch Always ) STOP Anhalten der CPU 8 Befehlssatz des Modellprozessors (5) weitere Sprungbefehle für den Vergleich zweier Zahlen: BLT a BLE a BGT a BGE a BLS a BHI a Sprung falls arithmetisch kleiner ( Branch on Less Than ), d.h. wenn N V + N V = Sprung falls arithmetisch kleiner oder gleich ( Branch on Less or Equal ), d.h. wenn Z + N V + N V = Sprung falls arithmetisch größer ( Branch on Greater Than ), d.h. wenn Z N V + Z N V = Sprung falls arithmetisch größer oder gleich ( Branch on Greater or Equal ), d.h. wenn N V + N V= Sprung falls logisch kleiner oder gleich ( Branch on Lower or Same ), d.h. wenn C + Z = Sprung falls logisch größer ( Branch on Higher ), d.h. wenn C Z = F-9 F-2
8 Befehlssatz des Modellprozessors (6) 8. Beispielprogramme Vergleich zweier Zahlen erfolgt i.a. durch CMP a,d oder CMP #x,d Vergleiche D mit Wert an Speicherstelle a bzw. mit Konstante #x arithmetischer Vergleich (bei Zahlen im Zweierkomplement): BLT: Sprung bei [D] < [M(a)] bzw. [D] < #x BLE: Sprung bei [D] [M(a)] bzw. [D] #x BGT: Sprung bei [D] > [M(a)] bzw. [D] > #x BGE: Sprung bei [D] [M(a)] bzw. [D] #x logischer Vergleich (bei vorzeichenlosen Zahlen): BLS: Sprung bei [D] < [M(a)] bzw. [D] < #x BCS: Sprung bei [D] [M(a)] bzw. [D] #x BHI: Sprung bei [D] > [M(a)] bzw. [D] > #x BCC: Sprung bei [D] [M(a)] bzw. [D] #x Programmfragment in Hochsprache: int a,b,c; c = (a+b) / 2; c = abs(c); if (c > ) c = ; gleiches Programmfragment in Maschinensprache: RUN: MOVE a,d load a ADD b,d add b ASR D divide by 2 BPL POS >? NOT D s compl. ADD #,D 2 s compl. POS: MOVE D,c store c MOVE #,D load SUB c,d BPL END c >? MOVE #,D MOVE D,c store c = END: STOP a:... Wert a b:... Wert b c:... Ergebnis c F-2 F-22 8. Beispielprogramme (2) 9 ein einfaches Steuerwerk Programmfragment zur Berechnung von n! in Hochsprache: int i,n,f; f=; for (i=;i<=n;i++) f=f*i; gleiches Programmfragment in Maschinensprache: FAK: MOVE #,D load MOVE D,f store f = MOVE D,i store i = LOOP: MOVE n,d load n SUB i,d compute n i BMI END n i <? MOVE f,d load f MUL i,d compute f = f i MOVE D,f store f MOVE i,d load i ADD #,D i = i + MOVE D,i store i BRA LOOP END: STOP i:... Wert i n:... Wert n f:... Ergebnis f benötigte Steuersignale für den Datenfluss im Modellprozessor: Taktsignale Clock R für jedes Register R (aus negativ flankengetriggerten D Flip-Flops) Steuersignale G i zur Kontrolle des Zugriffs auf Busleitungen Steuersignale R/W und E für Speicher Steuersignale für ALU F-23 F-24
9. Tristate-Puffer Ausgang eines Tristate-Puffers kann die Zustände, oder x ( floating bzw. unconnected ) annehmen Tristate-Puffer werden eingesetzt, wenn mehrere Komponenten Signale über einen gemeinsam genutzten Bus übertragen sollen 9.2 Entwurf eines einfachen Steuerwerks Schritt : Dekodierung der Instruktion 6 Bit sind ausreichend zur Kodierung aller Befehle für jeden Befehl x existiert eine Steuerleitung I x der Dekoder aktiviert eine Steuerleitung, sobald der zugehörige Opcode ins IR geladen wird F-25 F-26 9.2 Entwurf eines einfachen Steuerwerks (2) Schritt 2: Entwurf eines Sequencers jeder Befehl des Modellprozessors kann durch Zusammenfassen von RTL-Schritten in max. 6 Taktzyklen ausgeführt werden bei gleichzeitiger Ausführung mehrerer RTL Schritte werden diese durch Semikolon getrennt in eine Zeile geschrieben Beispiel: ADD a,d Fetch- Phase: [MAR] [PC] [MBR] [M(MAR)] ; [PC] [PC]+ [IR] [MBR]; 9.2 Entwurf eines einfachen Steuerwerks (3) Sequencer generiert in jedem Taktzyklus i =,...,5 ein Signal T i kann als synchrones Schaltwerk aus einem Modulo-6 Zähler mit Reseteingang (zählt von bis ) und einigen UND-Gattern entworfen werden: Decode/ Execute- Phase CU [IR(Opcode)] ; [MAR] [IR(Addr)] [MBR] [M(MAR)] ALU [D] ; ALU [MBR] ; [D] ALU F-27 F-28
9.2 Entwurf eines einfachen Steuerwerks (4) Schritt 3: Ermittlung der Steuersignale für Taktzyklen bis 5 Transfers und resultierende Steuersignale für die Fetch-Phase: T : [MAR] [PC] G = ; Clock MAR = T : [MBR] [M(MAR)] R/W = ; G 6 = ; G = ; Clock MBR = [PC] [PC]+ G 2 = ; Clock PC = T 2 : [IR] [MBR]; G 7 = ; Clock IR = Transfers und resultierende Steuersignale für die Execute-Phase sind für jeden Befehl unterschiedlich, z.b. für ADD a,d : T 3 : CU [IR(Opcode)] [MAR] [IR(Addr)] G 3 = ; Clock MAR = T 4 : [MBR] [M(MAR)] R/W = ; G 6 = ; G = ; Clock MBR = T 5 : ALU [D] G = ; L 2 = L = L = ALU [MBR] G 7 = ; NOT = ; CIN = ; SUB = [D] ALU ALU = ALU 2 = ; G 2 = ; Clock D = 9.2 Entwurf eines einfachen Steuerwerks (4) Schritt 4: Kombination der Steuersignale die Signale der Execute-Phase jedes Befehls müssen mit dem zugehörigen Dekoder- Signal konjunktiv verknüpft werden, z.b.: Clock D = T 5 I ADD a,d die resultierenden Signale müssen dann disjunktiv zusammengefasst werden, z.b.: G 7 = T 2 + T 5 I ADD a,d + T 5 I SUB a,d +... F-29 F-3 9.3 Nachteile des Modellprozessors Lernziele nur ein einzelnes Datenregister erfordert eine sehr häufige Speicherung von Zwischenergebnissen im RAM kein Aufruf von Unterprogrammen möglich kein indizierter Zugriff auf Komponenten a[i] eines Feldes keine Hardwareunterstützung von Gleitkommazahlen und Division in ALU keine Unterstützung eines größeren Adressraums mit mehr als 2 b Adressen (mit b = Breite des Adressfeldes in Instruktion) keine Unterbrechungen ( Interrupts ) langsam (getrennte Fetch- und Execute-Phasen, sechs Taktzyklen je Befehl) aufwendiges Schaltwerk zur Generierung der Steuersignale Begriffe: CPU, Daten-/ Adress-/ Kontrollpfad, SRAM, Opcode, Statusregister, Programmzähler, Sequencer,... Verständnis der Arbeitsweise eines von-neumann Rechners (Fetch-/Decode-/Execute-Phase) Aufbau und Befehlssatz eines einfachen Prozessors Beschreibung des Ablaufs von Befehlen unter Verwendung von RTL Verständnis einfacher Maschinenprogramme Unterschied von Mikroarchitektur und Instruktionssatz- Architektur Entwurf eines einfachen Prozessors: ALU Steuerwerk in diskreter Logik F-3 F-32