MIPS-Architektur lb, lbu Laden eines Bytes sb Speichern eines Bytes lh, lhu Laden eine Halbwortes sh Speichern eines Halbwortes lw Laden eines Wortes sw Speicher eines Wortes ld* Laden eines Doppelwortes sd* Speichern eines Doppelwortes la* Laden einer Addresse li* Laden eines immidiate Wertes l.s*, l.d* Laden eines Gleitkommaregisters s.s*, s.d* Speichern eines Gleitkommaregisters move* Transfer zwischen Universalregistern mov.s* Transfer zwischen Gleitkommaregistern mov.d* mfhi Transfer zwischen Universalregister und den Regiestern Hi und Lo mflo mthi mtlo mfc1 Transfer zwischen Universalregistern und Gleitkommaregistern mtc1 addi Addition addi addu addiu sub Subtration sub mult Multiplikation multu div Division divu abs* Absoluter Wert neg* Negation rem* Modulo not* Logisches NOT and Logisches UND andi or Logisches OR ori xor Logisches XOR xori nor Logisches NOR sll Logisches Linksschieben sllv srl Logischse Rechtsschieben srlv sra Arithmetische Rechtsverschiebung srav rol* Rotation links ror* Rotation rechts slt Vergleich kleiner slti sltu stliu seq* Vergleich gleich sne* Vergleich ungleich sgt* Vergleich groesser sgtu* sge* Vergleich groeser gleich sgeu* sle* Vergleich kleiner gleich sleu* j, unbedingter Sprung b* jr jal* Jump mit Speicherung PC+4 jalr Jump Regeister beq Verzweigung falls gleich bne Verzweigung falls ungleich beqz* Verzweigung falls gleich bnez* Verzweigung falls gleich bgt* Verzweigung falls groesser bge* Verzweigung falls groesser gleich bgtz Verzweigung fals groesser bgez Verzweigung falls groesser gleich blt* Verzweigung falls kleiner ble* Verzweigung falls kleiner gleich bltz Verzweigung falls kleiner blez Verzweigung falls kleiner gleich nop Nulloperation, leere Anweisung bge* Befehlssatz = Instruction Set Befehlsarten: 1. Datenbewegungsbefehle (Data Movement) 2. Arithmetisch-Logische Befehle (Integer Arithmeic and Logical) 3. Schiebe- und Rotationsbefehle (Shift, Rotate) 4. Multimediabefehle 5. Gleitkommabefehle (Floating-Point Instructions) 6. Programmsteuerbefehle (Control Transfer Instructions) 7. Systemsteuerbefehle (System Control Instructions) 8. Synchronisationsbefehle Gleitkommabefehle (Floating-Point Instructions) 1. Bitfeldorientierte Multimediabefehle 2. Graphikorientierte Multimediabefehle Datenbewegungsbefehle, auch: push, pop Saturationsarithmetik: Zahlen"uberschreitungen werden auf die h"ochstwertigste bzw. niederwertigste Zahl abgebildet Befehlsformate: Opcode Dreiaddressformat Zweiaddressformat Einaddressformat Nulladdressformat Lade/- und Speicherarchitektur (Load/Store Architecture) Register-Speicher-Architektur Speicher-Speicher-Architektur Akkumalatoren-Architekturen Stack- und Kellerarchitektur Stackarchiktur: 8087, Intel ATAM862 Atmel Addressierungsarten: Register und Unmittelbare Addressierungsarten Klasse des Einstufigen Addressierung Klasse der zweistufigen Addressierung Datenaddressierung Registeraddressierung Unmittelbare Addressierung Direkte oder absolute Addressierung Registerindirekte ADdressierung Registeraddressiernug mit Autoinkrement/Dekrement Pr"ainkrement, Postinkrement Pr"adekrement, Postdekrement Registerindirekte Addressierung mit Verschiebung (Displacement) Indizierte Addressierung Indizierte Addressierung mit Verschiebung Befehlsaddressierung Befehlsrelativer Modus Befehlsz"ahlerindirekt +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - Big-Endian-Format - Little-Endian-Format - Datenformate 1. Einzelbit 2. Ganzzahl (Integer) 3. Gleitkomma 4. Multimedia Ganzzahldatenformate: - signed - unsigned - packed - unpacked - BCD-Zahlen (Binary Coded Decimals) - ASCII Bate Halbwort Wort Doppelwort Gleitkommadatenformate (IEEE-754-Standard) Einfache Genauigkeit: 32 Bit Doppelte Genauigkeit: 64 Bit Erweiterte Genauigkeit: 80 Bit f = (-1)\^s * 1.m*2\^(e-b) biased - verschoben b bias m Mantissenanteil b = 2\^{ne-1}-1 p = 23, einfache p = 52, doppelte p = 63, erweiterte Multimediaformate: 64 Bit breite W"orter Bitfeldorientierte Graphikorientierte Befehlssatz Datenbwegungsbefehle (Data Movement) Arithmetisch-Logische-Befehle Schiebe- und Rotationsbefehle Multmediabefehle Gleitkommabefehle Programmsteuerbefehle Systemsteuerbefehle Synchronisationsbefehle SWAP, TAS Befehlsformate (instruction format) Dreiaddressformat (3-Address Instruction Format), zwei Quelloperanden, ein Zieloperand Zweiaddressformat Einaddressformat Nulladdressformat Lade-/Speicherarchitektur (Load/Store Architecture) Register-Register-Architektur Register-Speicher-Architektur Speicher-Speicher-Architektur Akkumalatorarchitektur Stack- oder Kellerarchitektur Addressierungsart Effektive Addresse Effektive Addresse Virtuelle Addresse Physikalische Addresse Datenaddressierungsarten Registeraddressierung Unmittelbare Addressierung Direkte oder absolute Addressierung Registerindirekte Addressierung Registerindirekte Addressierung mit Autoinkrement/Autodekrement Pr"ainkrement, Postinkrement, Pr"adekrement, Postdekrement Registerindirekte Addressierung mit Verschiebung (Displacement) Indizierte Addressierung Indizierte Addressierung mit Verschiebung Befehlsaddressierungsarten Befehlsrelativer Modus Befehlsindirekter Modus MIS Register \$0 bis \$31 \$0 \$zero 0 (read-only) \$1 \$at reserviert f"ur den Assembler \$2 - \$3 \$v0 - \$v1 R"uckgabewert von Funktionsaufrufen \$4 - \$7 \$a0 - \$a3 Argumente f"ur den Funktionsauf \$8 - \$15 \$t0 - \$t7 Tempor"are Variablen \$16 - \$23 \$s0 - \$s7 Gesicherte Variablen \$24 - \$25 \$t8 - \$t9 Tempor"are Variablen \$26 - \$27 \$k0 - \$k1 Reserviert f"ur das Betriebssystem \$28 \$gp Data Segment Pointer \$29 \$sp Stack Pointer \$30 \$fp Frame Pointer \$31 \$ra Return Address Einzyklus-Mikroarchitekur Zustandselemente Zustandselemente: - PC - Befehlsspeicher - Registersatz - Datenspeicher Befehlsz"ahlerregister Befehlsspeicher Datenpfad Befehlsholephase (Instruction Fetch - IF) Zustandselmente 1. Befehlsz"ahler 2. Befehlsspeicher 3. Registersatz 4. Datenspeicher Datenpfade f"ur die Daten (Nicht Befehle): Also: - Lesedaten brauchen keinen Eingabeport - warum auch? Aus ihnen wird gelesen Stattdessen 5-Bit-Addresse (32-Bit-Register) - Dann haben wir 3-Address-Befehle - also 2 Lesedaten - Eine Schreibedaten: 32 Bit - Ein Schreiberegister (Welches - 5 Bit) - Einen CLK - Ein WE (Write Enable) Das ist oder war schon der Registersatz Danach kommt die ALU und jetzt nicht direkt verbunden mit Registersatz, sondern mit Datenspeicher Der Befehlsdekodierer bzw. die Steuereinheit hat Steuerleitung zu - RegWrite - Registersatz - WE - MemWrite f"ur Datenspeicher - Keine Daten zu Lese-Daten und Lese-Register, diese sind immer frei => Das m"ussen wir uns so vorstellen, wie mit unseren Multiplexern im Operationswerk Zun"achst mal das Wichtigste: - Registersatz - Datenspeicher - ALU - Steuereinheit Der Datenspeicher ist wiederum mit dem Registersatz verbunden Registersatz -> (Lese-Daten 1, Lese-Daten 2) -> ALU -> Datenspeicher Multiplexer sind: 1. Vor ALU (Lese Daten 2)/F"ur Befehle, zum Berechnen der Adresse 2. Nach Datenspeicher: Entweder Datenspeicher oder ALU Weil: Registersatz -> Datespeicher Von Datenspeicher oder ALU kann das Ergebnis nach Regsistersatz Registersatz -> (Lese-Daten 1, Lese-Daten 2) -> ALU/Datenspeicher -> Registersatz Alles, was mit Befehlen im Operationswerk zu tun hat 1. Befehlsz"ahler 2. Befehlsspeicher 3. Vorzeichenerweiterung 4. 2x Addierer Register-Satz - Lese-Daten 1 -> ALU -> Datenspeicher -> MUX Register-Satz - Lese-Daten 1 -> ALU -> MUX Register-Satz - Lese-Daten 1 -> ALU -> Datenspeicher -> MUX -> Registersatz - Schreibedaten Register-Satz - Lese-Daten 1 -> ALU -> MUX -> Registersatz - Schreibedaten Register-Satz - Lese-Daten 2 -> MUX -> ALU -> MUX Register-Satz - Lese-Daten 2 -> MUX -> ALU -> Datenspeicher -> MUX Normaler Befehlspfad ohne Verzweifung Befehlsz"ahler -> Befehlsspeicher Befehlsz"ahler -> Addierer +4 MUX -> Befehlsz"ahler. Steuereinheit: 1. Befehlsdekodierer 2. Funktionsdekodierer Befehlsdekodierer: 1. MemtoReg 2. MemWrite 3. Branch 4. ALUSrc 5. RegDst 6. RegWrite 7. ALUOp Funktionsdekodierer: ALU Operation: 3 Bit Funktionsdekodierer: 1. Ausgang: ALU Operation: 3 Bit 2. Eingang: Func - vom Befehl - 6 Bit 3. Eingang: ALUOp, 2 Bit vom Befehlsdekodierer Befehlsdekodierer Funktionsdekodierer Registersatz ALU Datenspeicher Befehlsspeicher Befehlsz"ahler Vorzeichenerweiterungseinheit 4 x MUX 1 x AND 2 x Addierer 1 x Bit Shifter Befehlsdekodierer: 1. MemtoReg 2. MemWrite 3. Branch 4. ALUSrc 5. RegDst 6. RegWrite 7. ALUOp Funktionsdekodierer: 1. Func 2. ALUOp 3. ALU Operation Registersatz: - Lese-Register 1 - Lese-Register 2 - Schreiberegister - Schreibedaten - WE - Lese-Daten 1 - Lese-Daten 2 ALU: - ALU-Ergebnis - Null AND: - PCSrc Datenspeicher: - Addresse - Schreibedaten - WE - Lesedaten Befehlsspeicher: - Leseaddresse - Lesedaten Befehlsz"ahler: - PC (t+1) - PC (t) Alle Datenwege: 1. MemtoReg (Befehlsdekodierer) 2. MemWrite (Befehlsdekodierer) 3. Branch (Befehlsdekodierer) 4. ALUSrc (Befehlsdekodierer) 5. RegDst (Befehlsdekodierer) 6. RegWrite (Befehlsdekodierer) 7. ALUOp (Befehlsdekodierer) 8. Func (Funktionsdekodierer) 9. ALUOp (Funktionsdekodierer) 10. ALU Operation (Funktionsdekodierer) 11. Lese-Register 1 (Registersatz) 12. Lese-Register 2 (Registersatz) 13. Schreiberegister (Registersatz) 14. Schreibedaten (Registersatz) 15. WE (Registersatz) 16. Lese-Daten 1 (Registersatz) 17. Lese-Daten 2 (Registersatz) 18. ALU-Ergebnis (ALU) 19. Null (ALU) 20. PCSrc (AND) 21. Addresse (Datenspeicher) 22. Schreibedaten (Datenspeicher) 23. WE (Datenspeicher) 24. Lesedaten (Datenspeicher) 25. Leseaddresse (Befehlsspeicher) 26. Lesedaten (Befehlsspeicher) 27. PC (t+1) (Befehlsz"ahler) 28. PC (t) (Befehlsz"ahler) Abgeschrieben, das war aus dem Blockschaltbild - aber allgemeiner Prozessor (OpenSource - und kann jeder verwenden): ALUOp Func ALU Operanden 00 X 010 - add X1 X 110 - sub 1X 100000 - add 010 - add 1X 100010 - sub 110 - sub 1X 100100 - and 000 - and 1X 100101 - or 001 - or 1X 101010 - slt 111 - set les than Op-Code Reg-Write Reg-Dst ALU-Src Branch Mem-Write Mem-toReg ALU-Op R-Typ 000000 1 1 0 0 0 0 10 lw 100011 1 0 1 0 0 1 00 sw 101011 0 X 1 0 1 X 00 beq 000100 0 X 0 1 0 X 01 Geographisch, von S"uden nach Norden und Westen nach Osten Addierer, Befehlsz"ahler, Befehlsspeicher MUX, Registersatz, Funktionsdekodierer, Befehlsdekodierer Vorzeichenweiterung, Registersatz, Funktionsdekodierer, Befehlsdekodierer 2-Bit-Shifter, MUX, ALU Addierer, Datenspeicher, AND Oder als ganze Bl"ocke, von Westen nach Osten, S"uden nach Norden Block 1: Addierer, Befehlsz"ahler, Befehlsspeicher Block 2: MUX, Vorzeichenerweiterung Regisersatz Funktionsdekodierer, Befehlsdekodierer Block 3 2-Bit-Shifter, Addierer, ALU MUX, ALU, Datenspeiecher, MUX AND Pfade am MIPS Prozessor Befehlsz"ahler Eingang: PC (t) Ausgang: PC (t+1) Befehlsspeicher: Eingang: Leseaddresse Ausgang: Lesedaten Datum, Ausgang: Befehl Befehlsdekodierer: Eingang: Opcode Ausgang: MemToReg MemWrite Branch ALUSrc RegDst RegWrite Ausgang: ALU-Op Funktionsdekodierer: Eingang: Func ALUOp Ausgang ALU Operation Datenpfade: 1.) PC (t+1) Ausgang am Befehlsz"ahler geht in Eingang, Leseaddresse vom Befehlsspeicher 2.) Befehslsspeicher, Ausgang, Lesedaten - geht: 31:26 nach Eingang Opcode von Befehsldekodierer Bit 5:0 geht Eingang Func Funktionsdekodierer Bit 0:15 (16 Bit) geht Vorzeichenerweiterungseinheit 3.) Vorzeichenerweiterungseinheit geht 2 Bit Shifter 4.) 2 Bit Shifter geht an Addierer 5.) Addierer geht an MUX 6.) MUX geht Eingang PC (t) in Befehlsz"ahler PC (t+1) Befehlsz"ahler => Befehlsspeicher => Vorzeichenerweiterungseinheit => 2 Bit Shiter => Addierer => MUX => PC (t) Befehlsz"ahler 1.) PC (t+1) Befehlsz"ahler 2.) Befehlsspeicher 3.) Vorzeichenerweiterungseinheit 4.) 2 Bit Shiter 5.) Addierer 6.) MUX 7.) PC (t) Befehlsz"ahler 3.) Vorzeichenerweiterungseinheit 4.) 2 Bit Shiter 5.) Addierer 3.) Vorzeichenerweiterungseinheit 4.) 2 Bit Shiter 5.) Addierer 6.) MUX 1.) PC (t+1) Befehlsz"ahler 2.) Befehlsspeicher 7.) PC (t) Befehlsz"ahler Alternative: Befehl inkrementieren 1.) Ausgang PC (t+1) Befehslsz"ahler geht Addierer Addierer +4 2.) Geht wieder in den Addierer + Vorherigen 3.) Oder in den MUX, direkt in den MUX 4.) Geht in Befehlsz"ahler PC (t) Also, der erste noch mal: Datenpfade: 1.) PC (t+1) Ausgang am Befehlsz"ahler geht in Eingang, Leseaddresse vom Befehlsspeicher 2.) Befehslsspeicher, Ausgang, Lesedaten - geht: 31:26 nach Eingang Opcode von Befehsldekodierer Bit 5:0 geht Eingang Func Funktionsdekodierer Bit 0:15 (16 Bit) geht Vorzeichenerweiterungseinheit 3.) Vorzeichenerweiterungseinheit geht 2 Bit Shifter 4.) 2 Bit Shifter geht Addierer, + (Addierer) Geht PC +4 Addierer, alter Befehladdresse +4, von PC 5.) Addierer geht an MUX 6.) MUX geht Eingang PC (t) in Befehlsz"ahler Befehlsspeicher: 1.) 31:26 geht in Befehlsdekodierer 2.) 5:0 geht in Funktionsdekodierer (Func Feld) 3.) 15:0 16 Bit geht in Vorzeichenerweiterungseinheit 4.) 25:21 geht in Leseregister-1 (Quelloperand) 5.) 20:16 geht in Leseregister-2 (Quelloperand) 6.) 20:16 oder 15:11 geht in MUX geht in Schreiberegister Da ist ein MUX 20:16 entweder Leseregister-2 Oder - Schreiberegister, wenn Schreiberegister 15:11 1.) 5:0 geht in Funktionsdekodierer (Func Feld) 2.) 15:0 16 Bit geht in Vorzeichenerweiterungseinheit 3.) 20:16 entweder Leseregister-2, 20:16 geht in Leseregister-2 (Quelloperand), 20:16 oder 15:11 geht in MUX geht in Schreiberegister 4.) 25:21 geht in Leseregister-1 (Quelloperand) 5.) 31:26 geht in Befehlsdekodierer ALU: Lesedaten-1 Lesedaten-2 Aber bei Lese-Daten-2, MUX Das MUX kommt von Vorzeichenerweiterungseinheit, 32 Bit von Sprungbefehl ALU-Ausgang Geht in Addresse, von Datenspeicher Oder MUX in Schreibedaten von Registersatz Echte Datenabh"angigkeit: ED Gegenabh"angigkeit: GA Ausgabeabh"angigkeit: AA I1: addi \$t1, \$t2, 2 I2: add \$t4, \$t1, \$t3 I3: subi \$t3, \$t5, 3 I4: subi \$t3, \$t6, 3 ED: I1, I2 I2 benutzt werden in \$t1 der zuvor I1 berechnet wurde 2 x GA: I2 und I3 I2 und I4 Sowohl I3 und I4 schreiben in \$t3 Dass von I2 lesend verwendet wurde AA: I3 und I4 Da beide Befehle in das \$t3 Register zur"uckschreiben Falsche = Scheinbare Datenabh"angigkeit = Namensabh"angigkeiten = Name Dependency: Gegenabh"angigkeit Ausgabeabh"angigkeit Sind Datenabh"angige Befehle weit voneinander entfernt, so kommt es zu keinem Datenkonflikt F"ur einfache Skalare MIPS-Pipeline: Nur echte Datenabh"angigkeit von Bedeutung Superskalar: Auch Gegenabh"angigkeit Ausgabeabh"angigkeit I1: WB I2: MEM I3: EX I4: ID I5: IF IF-Phase: Befehlsregister: Ir ID-Stufe: ALU-Eingaberegister: Ai1, Ai2 EX-Stufe: ALU-Ausgaberegister: Ao 1.) Wir haben eine Datenabh"angigkeit Diese m"ussen wir benennen wir m"ussen die Datenabh"angigkeiten zwischen allen Befehlen benennen, so zu sagen, auch, wenn diese tausend Befehle auseinander liegen Datenabh"angigkeit benennen heisst einfach, zwischen den Befehlen besteht Datenabh"angigkeit Welche Datenabh"angigkeit besteht Das ist einfach so und wir m"ussen benennen, welche das ist 2.) 1.) Einzyklus 2.) Mehrzyklus 3.) Pipelining Mehrzyklus heisst, wir erh"ohen den Takt wir haben viele Stufen Aber es gibt keine "Uberlappungen, weil es gibt mehrere Zyklen, aber keine "Uberlappungen Beispiel IF ID EX MEM WB I1: Schreibt in \$t1, WB-Phase I2: Liesst von \$t1, ID-Phase Mehrzyklus: I1: 0, IF; 1, ID; 2, EX; 3, MEM; 4, WB (I1 schreibt in \$t1) I2: 5, IF; 6, ID (I2 liesst von \$t1); 7, EX; 8, MEM; 9, WB Pipelining: I1: 0, IF; 1, ID; 2, EX; 3, MEM; 4, WB (I1 schreibt in \$t1) I2: 0; 1, IF; 2, ID (I2 liesst von \$t1); 3, EX; 4, MEM; 5, WB Jetzt wissen wir - was passiert ist Wir wissen es gibt Datenkonflikte bzw. Zusammenh"ange zwischen Befehlen, egal welche Befehle das sind und egal wie weit sie auseinander liegen Zwischen I1 und I1023 besteht so oder so eine Datenabh"angigkeit egal, ob diese 8192 Befehle auseinander liegen Bei der Mehrzyklusarchitektur spielt das keine Rolle, weil sie werden immer noch hintereinander abgearbeitet, selbst, wenn mit Zyklen Die Datenabh"angigkeit besteht Und wir wissen, welche, es gibt 3 verschiedene, GA, GA, GG Gut: Mehrzyklus - jetzt k"onnen wir sagen, wann sie stattfindet Der n"achste Befehl ist einen Takt sp"ater in der Pipeline Jetzt kommt die L"osung - die ist kein wenig kompliziert - das hat mit Datenflusskonflikten nichts zu tun Einf"ugen von Lehrbefehlen durch den Compiler NOP's Statische Befehlsumordnung - statt Leerbefehlen, durch bereits vorhandene Befehle Hardware-L"osung Leerlauf der Pipeline I1 und I2: Anhalten des Befehls I2 f"ur zwei Takte, Pipeline-Sperrung, Interlocking Oder Pipeline-Leerlauf: Stalling Es entstehen Pipeline-Blasen, Pipeline Bubbles Die Wirkung ist dieselbe wie bei eingef"ugten NOP Befehlen 2.) L"osung: Komplizierter: Nimmt das Ergebnis nicht aus Architekturregister sondern von der ALU direkt Forwarding Interlocking: IF, ID, EX, MEM, WB IF, ID, EX, MEM, WB 0, 1, 2, 3, 4 3, 4, 5, 6, 7 Also: Differenz, immer ein Zyklus Zwei Befehle Sperren - 2 Zyklen, macht 3 Forwarding: EX->ID Einzyklus Mikroarchitektur Mehrzyklus Mikroarchitektur Pipeline Mikroarchitektur Einzyklus Mikroarchitektur Zustandselemente Datenpfad Steuereinheit Vor und Nachteile Mehrzyklus Mikroarchitektur Funktionsweise Vor und Nachteile Pipeline Mikroarchitektur Pipeline Prinzip Stufen der Befehlspipeline die MIPS-Pipeline Pipeline-Konflikte Datenkonflikte und deren L"osungsm"oglichkeiten Steuerflusskonflikte und deren L"osungsm"oglichkeiten Steuerflusskonflikte und Ressourcenkonflikte und deren L"osungsm"oglichkeiten Ausf"uhrung in mehrere Takten zustandselemente - Befehlsz"ahler - Befehlsspeicher - Registersatz - Datenspeicher 32-Bit-Bus 5-Bit-Bus PC - 32 Bit Register - Wird nach Taktzyklus inkrementiert - Wird um 4 Inkrementiert Leseport am Befehlsspeicher 32x32-Bit Registersatz Zwei lese und Schreibport 5-Bit addressen 2\^52 = 32 Datenpfad Arithmetische und Logische Befehle: R-Typ Befehle I-Typ-Transportbefehle: lw - Laden eines Wortes rs-Feld: Befehlswort rt-Feld: Register Destination r-Typ-Befehle: add, sub, and, or, slt Steuereinheit: - func-Feld ALUOp 00 Addition 01 subtraktion 10 Nutze das Func-Feld 11 n/a Func: - X - X - 100 000 - add - 100 010 - sub - 100 100 - and - 100 101 - or - 101 010 - slt Dementsprechend die ALU-Operation Befehl: ALU-OP: 00, x1, 1x - addition direkt, subtraktion direkt Func Befehl f"ur andere Dann entsprechend ALU-Operation ALU-Operation 010 - add 110 - sub 010 - add 110 - sub 000 - and 001 - or 111 - slt - set less than R-Typ lw sw beq Pipelining: - Kritischer Pfad: Schaltnetz mit der l"angsten Verz"ogerungszeit - Latenz: Ist die Anzahl der Takte, die ein Befehl braucht um die gesamte Pipeline zu durchlaufen - Durchsatz: Anzahkl der Befehle, die pro Takt, die Pipeline verlassen k"onnen Beschleunigung, Speeadup Stufen Pipelnie Konflikte Piplene Hemmnisse Hazards Datenkonflikte steuerflusskonflikte Struktur und Ressourcenkonflikte Datenabh"angigkeit zwischen Befehlen I1 und I2 Echte Datenabh"angigkeit: RAW - Read After Write - True Dependency Gegenabh"angigkeit: WAR - Write after Read - Anti Dependency Ausgabenabh"angigkeit: WAW - Schreibe nach Lese Konflikt Abh"angigkeitsgraph falsche bzw. scheinbare Datenabh"angigkeit Namensabh"angigkeiten - Name Dependency Integrationsdichte Kurzbezeichnung Anzahl Transistoren Small Scale Integration SSI 100 Medium Scale Integration MSI 1.000 Large Scale Integration LSI 10.000 Very Large Scale Integration VLSI 100.000 Ultra Large Scale Integration ULSI 1.000.000 Super Large Scale Integration SLSI 10.000.000 Extra Large Scale Integration ELSI 100.000.000 Giga Scale Integration GSI > 1.000.000.000 Strukturbreite: 10 Mikro Meter bis 0.01 Mikro Meter Intel Xeon 22-Core Xeon Bradwell E5 Maskenprogrammierbar: ASIC Elektrisch Programmierbar: FPGA Pipelining: "Uberlappende Befehlsverarbeitung CISC, RISC EPIC: Explicitly Parallel Instruction Computing: Mischung aus RISC und CISC Befehlssatzarchitektur: Instruction Set Architecture ISA: definiert die Grenze zwischen Hardware und Software Befehlssatzarchitektur = Prozessoarchitektur = Programmiermodell Prozessorarchitektur keine Aussagen "uber Detail der Hardware Mikroarchitektur: Implementierung des Prozessors Prozessortechniken: Mikroarchitektur, Prozessoarchitektur bin"arkompatibel Prozessorfamilie: Gleiche Basisarchitektur 1.) Register und Speichermodell 2.) Datenformate 3.) Befehlssatz 4.) Befehlsformate 5.) Addressierungsarten Addressraumorganisation Architekturregister: Vom Programmierer ansprechbare Register Allgemeine Register, Multimediaregister, Gleitkommaregister, Spezialregister b: Byte h: Halbwort (16 Bit) w: Wort (32 Bit) d: Doppelwort (64 Bit) logischer Addressraum 1.) Programmcode Statische Daten 2.) Dynamische Daten (Heap) 3.) Laufzeitstapel (Stack) 4.) Bereich f"ur E/A aligned: Big-Endian, Little-Endian Lerne den Spruch: Little-Endian ist falsch rum, Big-Endian ist richtig rum SSL - Shift Logical Left SLR - Shift Logical Right SAR - Shift arithmetic Right ROL - Rotate Left ROR - Rotate Right 1.) Befehlssatz 2.) Befehlsformate Befehlsformate operaion code instruction format 1.) Dreiaddressformat: opcode - dest - src1 - src2 2.) Zweiaddressformat: opcode - dest/src1 src2 3.) Einaddressformat: opcode - src 4.) Nulladdressformat: opcode Quell-Operanden: src1, src2 Zieloperand: dest Lade- und Speicherarchitektur: Nur Lade und Speicherbefehle transportieren Daten zwischen dem Hauptspeicher und den Registern Register-Speicher: Mindestens eines ist Register eines ist Speicher Einaddressbefehle: Akkumulatorarchitektur Speicher-Speicherarchitektur: Einziger: TI 9900 Texas Instruments Befehle: load, store, sub, add Registeraddressierung: Opcode Registerbezeichner RegisterBezeichner RegisterBezeichner Unmittelbare Addressierung: Opcode Operand Direkt oder Absolut: Opcode RegisterBezeichner Speicheraddresse Registerindirekte Addressierung mit Verschiebung: Opcode Registerbezeichner Verschiebung Befehlsz"ahlerrelativ Registeraddressierung: Opcode Registerbezeichner RegisterBezeichner RegisterBezeichner Registerbezeichner 2 zeigt auf Registersatz Unmittelbare Addressierung: Opcode Operand Direkt oder Absolut: Opcode RegisterBezeichner Speicheraddresse Speicheraddresse zeigt Auf Speicher Registeraddressierung: Opcode Registerbezeichner RegisterBezeichner RegisterBezeichner Registerbezeichner 2 zeigt Registersatz zeigt auf Operand im Speicher Registerindirekte Addressierung mit Verschiebung: Opcode Registerbezeichner Verschiebung Indizierte Addressierung: OpCode Registerbezeichner Befehlsz"ahlerrelativ Register load R1, R2 Unmittelbare load R1, const direkt, absolut load R1, (const) registerindirekt load R1, (R2) Postinkrement load R1, (R2)+ Pr"adekrement load R1, -(R2) registerindirekt mit Verschiebung load R1, displ(R2) Indiziert load R1, displ(R2,R3) Befehlsz"ahlerrelativ branch displ MARS: MIPS Assembler and Runtime Simulator Register: \$zero, \$at, \$v0 - \$v1, \$a0 - \$a3, \$t0 - \$t9, \$s0 - \$s7, \$k0 - \$k1, \$gp, \$sp, \$fp, \$ra R-Typ-Befehle I-Typ-Befehle J-Typ-Befehle R-Typ I-Typ J-Typ R-Typ: op rs rt rd sa func I-Typ: op rs rt immediate J-Typ: op target address R-Typ: op rs rt rd sa func I-Typ: op rs rt immediate J-Typ: op target address R-Typ: op 31 bis 26 rs 25 bis 21 rt 20 bis 16 rd 15 bis 11 sa 10 bis 6 func 5 bis 0 I-Typ: op rs rt immediate op 31 bis 26 rs 25 bis 21 rt 20 bis 16 immidiate 15 bis 0 J-Typ: op 31 bis 26 target address 25 bis 0 Quell und Zielregister: rs rt rd Unmittelbarer Operand immidiate Verzweigungsaddresse target address Verschiebewerte sa move mov.s Transport zwischen Universalregistern mov.d Transport zwischen Gleitkommaregistern mfhi, mflo Transfer zwischen Universalregister und Register Hi und Lo mthi, mtlo mfc1, mtc1 Transfer zwischen Universalregistern und Gleitkommaregistern sll, sllv Logische Linksverschiebung srl, srlv Logische Rechtsverschiebung sra, srav Arithmetische Rechtsverschiebung rol, ror Rotation links bzw. rechts slt, slti, sltu, sltiu Vergleich kleiner sgt, sgtu Vergleich gleich bzw. ungleich sge, sgeu Vergleich gr"osser gleich sle, sleu Vergleich kleiner gleich I-Typ-Transportbefehl: Laden eines wortes - lw 1.) Inhalt des Quellregisters auslesen: Basisaddresse f"ur die Bestimmung der Zieladdresse im Datenspeicher Quellregister: rs-feld Vorgang: Befehlsz"ahler -> Befehlsspeicher -> Registersatz (Lese-Register-1, Lese-Daten-1) -> Datenspeicher 2.) lw: Offset Unmittelbare Feld des Befehlswortes (Befehle [15:0]) Datenpfad: Befehlsz"ahler -> Befehlsspeicher -> Vorzeichenerweiterungseinheit -> ALU -> Datenspeicher Und: Befehlsz"ahler -> Befehlsspeicher -> Register-Satz -> Lese-Daten-1 -> ALU -> Addresse, Datenspeicher ALU: Immidiate + Lese-Daten-1 3.) Lese-Daten von Datenspeicher -> Schreibedaten, Schreiberegister von Registersatz rt-Feld: Register Destination Befehlswort (Befehl [20:16]) Steuersignal: RegWrite: WE - Am Registersatz 4.) Schritt: Addresse des n"achsten Befehls: PC (t) -> Addierer + 4 -> PC (t+1) Datenpfad - zum Speichern eines Wortes sw in den Datenspeicher geschrieben: rt-Feld Befehl[20:16] WE-Port des Datenspeichers: MemWrite MemWrite RegWrite Kontrolle des Multiplexers: ALU-Src