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