David Schirrmeister 6bbd1deb0f update
2024-05-22 11:25:28 +02:00

1.7 KiB

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

Pipeline 6-stufig

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

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

Datenpfad mit 5-Stufen Pipeline und Forwarding des PC

image_156.png