Files
2025-07-07 19:57:44 +02:00

3.5 KiB
Raw Permalink Blame History

📘 Zusammenfassung: V6 Pipelining Datapath and Control Computerarchitektur

🔁 Wiederholung: Pipelined Datapath

  • Pipeline-Register zwischen Stufen speichern Zwischenergebnisse:

    • IF/ID, ID/EX, EX/MEM, MEM/WB
  • Ziel: jede Stufe arbeitet gleichzeitig an unterschiedlichen Instruktionen


📦 Pipeline-Steuerung

  • Steuersignale werden wie im Single-Cycle-Design aus dem Opcode abgeleitet.

  • Vereinfachte & detaillierte Steuerung für jede Pipeline-Stufe:

    • IF → ID → EX → MEM → WB
  • Fehlerbehandlung und Hazard-Erkennung notwendig.


⚠️ Data Hazards & Forwarding

📦 Beispiel-Hazard

sub $2, $1, $3  # Ergebnis wird in $2 geschrieben
and $12, $2, $5 # liest $2 → Hazard
or  $13, $6, $2 # liest $2 → Hazard

🛠 Lösungen

  • Forwarding (Bypassing):

    • Ergebnis wird direkt aus EX/MEM oder MEM/WB weitergeleitet.
  • Forwarding-Bedingungen:

    • EX-Hazard (vorherige Instruktion schreibt):

      if EX/MEM.RegWrite && EX/MEM.RegisterRd ≠ 0
          && EX/MEM.RegisterRd == ID/EX.RegisterRs
      → ForwardA = 10
      
    • MEM-Hazard (vor-vorherige Instruktion schreibt):

      if MEM/WB.RegWrite && MEM/WB.RegisterRd ≠ 0
          && MEM/WB.RegisterRd == ID/EX.RegisterRs
      → ForwardA = 01
      
  • Revised Forwarding: MEM-Forwarding nur, wenn kein EX-Hazard.


🔁 Load-Use Hazard

  • Auftritt, wenn Instruktion direkt nach einem Load das geladene Register benötigt.

  • Lösung: 1-Stall-Cycle (Bubble) einfügen.

  • Erkennung:

    if ID/EX.MemRead && 
       (ID/EX.RegisterRt == IF/ID.RegisterRs || 
        ID/EX.RegisterRt == IF/ID.RegisterRt)
    → Stall
    

⏱ Stalls & Bubbles

  • Bubble: NOP wird in die Pipeline eingefügt

  • PC und IF/ID-Register werden nicht aktualisiert (Pipeline pausiert)

  • Compiler kann Code oft umsortieren, um Stalls zu vermeiden.


🔥 Branch Hazards & Lösungen

Problem:

  • Branch-Entscheidung erst in MEM-Stufe bekannt → falsche Befehle im IF

🛠 Lösungen:

  1. Early Branch Resolution:

    • Zieladresse & Vergleich schon in ID berechnen
  2. Flush Pipeline:

    • Falls Branch genommen → falsche Instruktionen entfernen
  3. Branch Prediction:

    • Static Prediction:

      • Rückwärts: taken (Schleifen)

      • Vorwärts: not taken

    • Dynamic Prediction:

      • 1-Bit Predictor: einfache Historie

      • 2-Bit Predictor: robuster gegen wiederholte Fehleinschätzungen

    • Branch Target Buffer (BTB):

      • Cache für Zieladressen

📐 Visualisierung

  • Multi-Cycle-Diagramme: Ressourcen-Nutzung über Zeit

  • Single-Cycle-Diagramme: Pipeline-Zustand zu einem Takt


📊 Performance-Effekte

  • Forwarding & Prediction minimieren Stalls

  • Dennoch: Stalls notwendig für Korrektheit

  • Compiler kann helfen: Instruction Scheduling


📝 Für die Klausur merken

Pipeline-Register & ihre Funktion
Forwarding vs. Stalling: Bedingungen & Hardwarelogik
Load-Use Hazard: Erkennung & Behebung
Branch Hazards: Static & Dynamic Prediction, BTB
Unterschied Multi- und Single-Cycle-Diagramme