Files
2025-07-07 19:57:44 +02:00

161 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 📘 **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
---