## 📘 **Zusammenfassung: V6 Pipelining Datapath and Control – Computerarchitektur** ### 🔁 Wiederholung: Pipelined Datapath - **Pipeline-Register** zwischen Stufen speichern Zwischenergebnisse: - IF/ID, ID/EX, EX/MEM, MEM/WB - **Ziel:** jede Stufe arbeitet gleichzeitig an unterschiedlichen Instruktionen --- ### 📦 Pipeline-Steuerung - **Steuersignale** werden wie im Single-Cycle-Design aus dem Opcode abgeleitet. - Vereinfachte & detaillierte Steuerung für jede Pipeline-Stufe: - IF → ID → EX → MEM → WB - Fehlerbehandlung und Hazard-Erkennung notwendig. --- ### ⚠️ Data Hazards & Forwarding #### 📦 Beispiel-Hazard ```asm sub $2, $1, $3 # Ergebnis wird in $2 geschrieben and $12, $2, $5 # liest $2 → Hazard or $13, $6, $2 # liest $2 → Hazard ``` #### 🛠 Lösungen - **Forwarding (Bypassing):** - Ergebnis wird direkt aus EX/MEM oder MEM/WB weitergeleitet. - **Forwarding-Bedingungen:** - EX-Hazard (vorherige Instruktion schreibt): ``` if EX/MEM.RegWrite && EX/MEM.RegisterRd ≠ 0 && EX/MEM.RegisterRd == ID/EX.RegisterRs → ForwardA = 10 ``` - MEM-Hazard (vor-vorherige Instruktion schreibt): ``` if MEM/WB.RegWrite && MEM/WB.RegisterRd ≠ 0 && MEM/WB.RegisterRd == ID/EX.RegisterRs → ForwardA = 01 ``` - **Revised Forwarding:** MEM-Forwarding nur, wenn kein EX-Hazard. --- ### 🔁 Load-Use Hazard - Auftritt, wenn Instruktion direkt nach einem Load das geladene Register benötigt. - **Lösung:** 1-Stall-Cycle (Bubble) einfügen. - Erkennung: ``` if ID/EX.MemRead && (ID/EX.RegisterRt == IF/ID.RegisterRs || ID/EX.RegisterRt == IF/ID.RegisterRt) → Stall ``` --- ### ⏱ Stalls & Bubbles - **Bubble:** NOP wird in die Pipeline eingefügt - PC und IF/ID-Register werden nicht aktualisiert (Pipeline pausiert) - Compiler kann Code oft umsortieren, um Stalls zu vermeiden. --- ### 🔥 Branch Hazards & Lösungen #### ⏳ Problem: - Branch-Entscheidung erst in MEM-Stufe bekannt → falsche Befehle im IF #### 🛠 Lösungen: 1. **Early Branch Resolution:** - Zieladresse & Vergleich schon in ID berechnen 2. **Flush Pipeline:** - Falls Branch genommen → falsche Instruktionen entfernen 3. **Branch Prediction:** - **Static Prediction:** - Rückwärts: taken (Schleifen) - Vorwärts: not taken - **Dynamic Prediction:** - **1-Bit Predictor:** einfache Historie - **2-Bit Predictor:** robuster gegen wiederholte Fehleinschätzungen - **Branch Target Buffer (BTB):** - Cache für Zieladressen --- ### 📐 Visualisierung - **Multi-Cycle-Diagramme:** Ressourcen-Nutzung über Zeit - **Single-Cycle-Diagramme:** Pipeline-Zustand zu einem Takt --- ### 📊 Performance-Effekte - Forwarding & Prediction minimieren Stalls - Dennoch: Stalls notwendig für Korrektheit - Compiler kann helfen: **Instruction Scheduling** --- ### 📝 Für die Klausur merken ✅ Pipeline-Register & ihre Funktion ✅ Forwarding vs. Stalling: Bedingungen & Hardwarelogik ✅ Load-Use Hazard: Erkennung & Behebung ✅ Branch Hazards: Static & Dynamic Prediction, BTB ✅ Unterschied Multi- und Single-Cycle-Diagramme ---