## 📘 **Zusammenfassung: V4 Prozessor (Teil 2) – Computerarchitektur**

### 🔁 Wiederholung aus Teil 1

- **Instruktionstypen (MIPS):**
    - **R-Format:** arithmetische/logische Operationen (z. B. `add $s1,$s2,$s3`)    
    - **Load/Store:** Speicherzugriff (z. B. `lw`, `sw`)    
    - **Branch:** bedingte Sprünge (`beq`, `bne`)    
- **Datenpfad (Full Datapath):**
    - Register → ALU → Speicher → Register    
    - Separate Instruktions- und Datenspeicher nötig, da ein Zugriff pro Zyklus    

---

### ⚙️ Steuerungseinheit (Control Unit)

- **Erzeugt Steuersignale aus dem Opcode:**
    - **MemtoReg:** bestimmt Datenquelle für Register-Schreiben    
    - **ALUSrc:** wählt ALU-Operand (Register vs. unmittelbarer Wert)    
    - **RegWrite:** aktiviert Schreibzugriff auf Register    
    - **MemRead/MemWrite:** steuern Speicherzugriffe    
    - **Branch:** aktiviert bei bedingten Sprüngen    
- **ALU Control:**
    - Basierend auf Opcode und Funct-Feld    
    - Beispiel Mapping:

| ALUOp | Funct  | ALU-Funktion |
| ----- | ------ | ------------ |
| 00    | XXXXXX | `add`        |
| 01    | XXXXXX | `sub`        |
| 10    | 100000 | `add`        |
| 10    | 100010 | `sub`        |
| 10    | 100100 | `and`        |
| 10    | 100101 | `or`         |
| 10    | 101010 | `slt`        |


---

### 📦 Erweiterter Datenpfad

- Unterstützung für:
    - **Jumps (`j`, `jal`):**    
        - PC-Update mit 26-Bit Zieladresse + oberen 4 Bit des alten PCs 
        - Steuerleitung „Jump“ wird aus Opcode dekodiert        
    - **Branches (`beq`, `bne`):**    
        - Zieladresse berechnen (PC+4 + Offset << 2)        
        - ALU prüft, ob Bedingung erfüllt (Zero-Flag)        

---

### 🚨 Performance-Betrachtung

- **Ein-Zyklus-Datenpfad Problem:**
    - Längster Pfad (Critical Path) bestimmt Taktfrequenz    
    - Beispiel: Load-Befehl → Instruktionsspeicher → Registerfile → ALU → Datenspeicher → Registerfile    
    - Unterschiedliche Instruktionen hätten unterschiedliche Latenzen → nicht praktikabel    
- **Lösung:** **Pipelining**
    - Aufteilung des Datenpfads in Stufen    
    - Überlappende Bearbeitung mehrerer Instruktionen    

---

### 📝 Für die Klausur merken

✅ Steuersignale (MemtoReg, ALUSrc, RegWrite, Branch, Jump)  
✅ ALU Control Mapping (wie wird aus Opcode+Funct ALU-Funktion bestimmt?)  
✅ Erweiterung des Datenpfads für Jump/Branch  
✅ Problem des Ein-Zyklus-Datenpfads (Critical Path) → Motivation für Pipelining  
✅ Unterschied: Jump vs. Branch

---
