vault backup: 2025-07-07 19:57:44

This commit is contained in:
fzzinchemical
2025-07-07 19:57:44 +02:00
parent 1638e96536
commit ed7da1341b
14 changed files with 1982 additions and 0 deletions

View File

@@ -0,0 +1,161 @@
## 📘 **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
---