David Schirrmeister 98dd74ca9d updatet
2024-05-08 14:56:21 +02:00

50 lines
1.7 KiB
Markdown

# 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)