5.2.10 · HinglishProcessor Datapath & Pipelining

Hazard detection units

3,044 words14 min readRead in English

5.2.10 · Hardware › Processor Datapath & Pipelining

Yeh Kaunsa Problem Solve Karta Hai?

Ek pipelined processor mein, multiple instructions alag-alag stages (IF, ID, EX, MEM, WB) mein ek saath execute hoti hain. Lekin kya hoga agar instruction 2 ko instruction 1 ka result chahiye pehle se, jab instruction 1 ne woh likha bhi nahi? Ya agar ek branch PC ko change kar de jab pipeline already galat instructions fetch kar chuki ho?

Hazard detection unit dedicated combinational logic hai jo:

  1. Pipeline registers ko dependencies ke liye monitor karta hai
  2. Control signals generate karta hai (stall, flush, forward)
  3. Forwarding unit ke saath coordinate karta hai hazards resolve karne ke liye

Combinational kyun? Decisions ek single clock cycle ke andar hone chahiye—next clock edge se pehle jo galat values commit kare.

Detect Hone Wale Hazards ke Types

Architecture: Data Hazard Detection Logic

Detection Combinational Circuit

Hazard detection unit ID stage mein hota hai aur yeh dekhta hai:

  • ID/EX register: Woh instruction jo abhi EX mein hai
  • EX/MEM register: Woh instruction jo abhi MEM mein hai
  • MEM/WB register: Woh instruction jo abhi WB mein hai
  • IF/ID register: Woh instruction jo abhi ID mein hai

ID stage kyun? Yahi par hum instruction ko decode karte hain aur jaante hain ki woh kaunse registers read karta hai. Hum dependencies pehle se detect kar sakte hain, EX ke stale data use karne se pehle.

Yeh kyun matter karta hai: Baaki data hazards forwarding se resolve ho sakte hain (forwarding unit unhe handle karta hai). Hazard detection unit sirf stall karta hai jab forwarding impossible ho.

Stall Signal Generation

Jab upar wali condition true ho, hazard unit yeh assert karta hai:

  • PCWrite = 0: PC ko freeze karo (next instruction fetch mat karo)
  • IF/ID_Write = 0: IF/ID register ko freeze karo (current instruction ko ID mein rakho)
  • Control_Mux = 0: ID/EX mein ek NOP (bubble) insert karo saare control signals zero karke

Yeh teen signals kyun?

  1. PCWrite=0: Agar hum next instruction fetch karein, toh jab hum finally aage badhenge toh woh kho jaayegi
  2. IF/ID_Write=0: Dependent instruction ko ID mein rokke rakho taaki woh next cycle mein sahi data ke saath retry kare
  3. Control_Mux=0: Woh instruction jo ID→EX mein jaane wali thi, usse bubble (no operation) banana zaroori hai taaki woh pipeline corrupt na kare

Architecture: Control Hazard Detection

Branch Resolution aur Flushing

Branches ke liye, hazard detection unit ko:

  1. Branch ko jaldi detect karna hoga (ideally ID mein registers compare karke)
  2. Wrong-path instructions flush karni hongi agar branch liya gaya
  3. Optionally predict karna hoga (simple version: assume not-taken)

Optimization: ID mein jaldi branch resolution

  • ID stage mein comparison hardware add karo (EX mein ALU ka wait karne ki jagah)
  • ID mein ek adder se branch target compute karo
  • Branch penalty 3 cycles se ghatke 1 cycle ho jaati hai

Forwarding Unit ke Saath Interaction

Hazard detection unit aur forwarding unit alag hain lekin coordinate karte hain:

Unit Kaam Placement Action
Forwarding Unit Register file ko bypass karke hazards resolve karna EX stage EX/MEM ya MEM/WB se directly ALU inputs mein data mux karta hai
Hazard Detection Unit Unsolvable hazards detect karna (load-use) ID stage Jab forwarding help nahi kar sakta toh pipeline stall karta hai

Alag kyun?

  • Forwarding data routing ke baare mein hai (mux selection)
  • Hazard detection control flow ke baare mein hai (stall/flush signals)

Implementation Details

Simplified Verilog Sketch

module hazard_detection_unit(
    input [4:0] IF_ID_Rs, IF_ID_Rt,
    input [4:0] ID_EX_Rd,
    input ID_EX_MemRead,
    output reg Stall
);
    always @(*) begin
        // Load-use detection
        if (ID_EX_MemRead && 
            ((ID_EX_Rd == IF_ID_Rs) || (ID_EX_Rd == IF_ID_Rt))) begin
            Stall = 1;  // Assert stall signals
        end else begin
            Stall = 0;
        end
    end
endmodule

Yeh kyun kaam karta hai:

  • Combinational (always @(*)) toh output turant update hota hai
  • One-cycle delay case check karta hai jahan load EX mein hai aur dependent instruction ID mein
  • Real implementations mein Rd != 0 bhi check hota hai (MIPS mein register 0 hardwired to zero hota hai)
Recall Ek 12 Saal ke Bacche Ko Samjhao

Imagine karo tum 5 doston ke saath ek group project kar rahe ho, aur tum sab mila ke ek bada Lego castle bana rahe ho. Har dost ek part par kaam karta hai (pieces laana, glue karna, paint karna, details add karna, display par rakhna). Tum sab alag-alag towers ke alag-alag parts par ek saath kaam kar rahe ho—jaise ek factory assembly line!

Lekin kabhi kabhi problem hoti hai: Sarah ek tower paint karna chahti hai jo Ahmed abhi glue kar raha hai. Paint jar (data) abhi ready nahi hai! Agar Sarah wahan jo bhi hai use le le, toh woh galat cheez paint kar degi aur poora castle bigad jaayega.

Hazard detection unit ek smart supervisor ki tarah hai jo sabko dekhta rehta hai. Jab woh dekhta hai ki Sarah kuch paint karne wali hai jo ready nahi, toh kehta hai "Ek minute ruko, Sarah!" (stall). Ya agar Ahmed gluing khatam karke tower seedha Sarah ko de sakta hai bina table par rakhe (forwarding), toh supervisor woh hone deta hai time bachane ke liye.

Kuch galtiyaan cheezein seedha pass karke fix ho sakti hain (forwarding). Kuch mein actually wait karna padta hai (stall). Supervisor jaanta hai kaunsa kaunsa hai!

Advanced: Multiple Hazards Handle Karna

Kya hoga agar multiple hazards ek hi cycle mein hon?

Priority rules:

  1. Load-use hazard (stall) pehle aata hai—pehle resolve hona chahiye
  2. Branch hazard (flush) stall complete hone ke baad apply hota hai
  3. Forwarding stall ke baad hota hai, ab available data use karke

Connections

  • 5.2.8-Pipeline-registers: Instructions aur control signals ko stages ke beech hold karta hai
  • 5.2.9-Forwarding-unit: Zyaadatar data hazards stalling ke bina resolve karta hai
  • 5.2.11-Branch-prediction: Control hazard penalties kam karta hai (advanced topic)
  • 5.2.7-Pipeline-control-signals: Woh signals (RegWrite, MemRead, etc.) jo hazard detection examine karta hai
  • 5.1.3-Control-unit: Original control signals generate karta hai; hazard unit unhe override kar sakta hai (mux to NOP)

#flashcards/hardware

Ek pipelined processor mein hazard detection unit kya karta hai? :: Yeh pipeline registers ko data/control dependencies ke liye monitor karta hai aur stall ya flush signals generate karta hai taaki hazards results corrupt na karein. Yeh forwarding unit ke saath coordinate karta hai hazards jahan ho sake resolve karne ke liye.

Hazard detection logic combinational kyun honi chahiye?
Kyunki hazard decisions ek single clock cycle ke andar complete hone chahiye—next clock edge se pehle jo pipeline register updates commit kare. Sequential logic ek extra cycle ki delay laayegi, jo galat values ko propagate hone degi.
Load-use hazard kya hota hai?
Ek data hazard jahan ek instruction immediately ek load ke baad aati hai aur loaded data chahiye. Forwarding help nahi kar sakta kyunki load ka data MEM stage ke end tak available nahi hota, lekin dependent instruction ko EX ke start par chahiye. 1-cycle stall ki zaroorat hoti hai.
Pipeline stall karne ke liye hazard detection unit kaunse teen control signals assert karta hai?
PCWrite=0 (program counter freeze karo), IF/ID_Write=0 (IF/ID register freeze karo), aur ID/EX mein ek NOP insert karo (mux se control signals zero karke). Yeh dependent instruction ko ID mein rokta hai aur EX mein bubble create karta hai.
Forwarding load-use hazard kyun resolve nahi kar sakta?
Kyunki forwarding EX/MEM ya MEM/WB se ALU inputs mein data route karta hai. Load ka data MEM/WB tab tak nahi pahunchta jab tak dependent instruction EX mein execute ho chuki hoti. 1-cycle timing gap hai jo forwarding bina time travel ke bridge nahi kar sakta.
Control hazard kya hota hai?
Ek hazard jahan pipeline ko nahi pata ki aage kaunsi instruction fetch karni hai kyunki branch condition abhi evaluate nahi hui. Already-fetch ki hui instructions galat path ki ho sakti hain aur agar branch taken ho toh unhe flush karna padta hai.
ID mein jaldi branch resolution penalty kyun kam karta hai?
ID stage mein comparison logic aur branch target adder add karke, branch decision 1 cycle pehle ho jaata hai (EX mein ALU ka wait karne ki jagah). Yeh galat-path instructions ki sankhya 2 se ghatake 1 kar deta hai, penalty 2 cycles se ghatake 1 cycle ho jaati hai.
Hazard detection unit aur forwarding unit alag kyun hain?
Hazard detection (ID stage) control decisions handle karta hai—kab stall ya flush karna hai. Forwarding (EX stage) data routing handle karta hai—ALU mein kaunsa pipeline register mux karna hai. Unhe alag karna design simplify karta hai: sirf tab stall karo jab forwarding help na kar sake, jab bhi possible ho forward karo.
Jab ID mein ek branch taken resolve hoti hai toh kya hota hai?
Hazard detection unit ek flush signal assert karta hai jo IF/ID register (jo galat tarike se fetch ki gayi next instruction contain karta hai) ko NOP mein convert karta hai. PC branch target par update ho jaata hai, aur pipeline sahi path se continue karti hai.
Load-use detection formula mein ID/EX.MemRead == 1 check kyun karte hain?
Kyunki sirf load instructions memory se read karti hain. Agar MemRead=0 hai, toh EX mein instruction load nahi hai, isliye uska result stall ke bina forwarding mein available hoga. MemRead=1 us specific case ko identify karta hai jahan data time par ready nahi hoga.

Concept Map

implemented as

monitors

monitors

monitors

special case

requires

resolved by

resolved by

coordinates with

prevents

prevents

Hazard Detection Unit

Combinational Logic in ID stage

Data Hazard

Control Hazard

Structural Hazard

Stall Pipeline

Flush Pipeline

Forwarding Unit

Load-Use Hazard

Wrong Results