# MU7-Rechner
## Pipeline
- erlaubt den nächsten Befehl zu holen während der letzte noch bearbeitet wird
- für Implementierung notwendig:
  - Ergebnisse jeder Pipelinestufe in Zwischenregistern speichern
    - Stufen werden unabhängig voneinander
    - Stufen können gleichzeitig arbeiten
- Für jede Stufe eigenes Instruktionsregister
  - steuert Abarbeitung des jeweiligen Befehls
- Sprungbefehle führen zu äußerem Eingriff in den Ablauf der Pipelinestufen
  - kann Ausführung der jeweiligen Operation verhindern
- **Moderne Pipelines:**
  - Pipelines mit 5-17 Stufen
  - längere Bearbeitung von Floatingpoint-Befehlen → lange Pipelines

## Datenpfad mit 5-Stufen Pipeline
![image_152.png](image_152.png)

## Pipeline 6-stufig
![image_153.png](image_153.png)

- **fetch**: nächsten Befehl aus Speicher holen
- **dec**: Befehl dekodieren (Befehlsart ermitteln)
- **reg**: Operanden aus Registerbank holen
- **ALU**: ALU Berechnung / Speicheradresse berechnen
- **mem**: Zugriff auf Speicher
- **res**: Ergebnis in Registerbank zurückschreiben

## Pipeline-Hazard durch Registerzugriff
read after write Hazard

![image_154.png](image_154.png)

## Nachteil der Pipeline: Sprungbefehle
- Sprungbefehle brauchen 5 Takte zusätzlich um nächste gültige Instruktion auszuführen
  - alle Befehle in der Pipeline müssen verworfen werden
- Ausweg: **Forwarding**
  - Nach Berechnung der neuen Sprungadresse
    - Direkt in IADR Register/PC schreiben
  - nur noch 3 Leertakte
  - ist in allen modernen Prozessoren vorhanden


## Pipeline-Hazard durch Sprungbefehl
Sprungverhalten einer Pipeline mit Forwarding

![image_155.png](image_155.png)

## Datenpfad mit 5-Stufen Pipeline und Forwarding des PC
![image_156.png](image_156.png) 