## 📘 **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

---
