Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -3,90 +3,61 @@
|
||||
### 🔁 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`)
|
||||
|
||||
- **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
|
||||
|
||||
- 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
|
||||
|
||||
- **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
|
||||
|
||||
- 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`|
|
||||
|
||||
|
||||
| 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)
|
||||
|
||||
- **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ä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
|
||||
|
||||
- Aufteilung des Datenpfads in Stufen
|
||||
- Überlappende Bearbeitung mehrerer Instruktionen
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user