Hazard detection units
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:
- Pipeline registers ko dependencies ke liye monitor karta hai
- Control signals generate karta hai (stall, flush, forward)
- 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?
- PCWrite=0: Agar hum next instruction fetch karein, toh jab hum finally aage badhenge toh woh kho jaayegi
- IF/ID_Write=0: Dependent instruction ko ID mein rokke rakho taaki woh next cycle mein sahi data ke saath retry kare
- 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:
- Branch ko jaldi detect karna hoga (ideally ID mein registers compare karke)
- Wrong-path instructions flush karni hongi agar branch liya gaya
- 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
endmoduleYeh 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 != 0bhi 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:
- Load-use hazard (stall) pehle aata hai—pehle resolve hona chahiye
- Branch hazard (flush) stall complete hone ke baad apply hota hai
- 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?
Load-use hazard kya hota 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.