Question bank — Hazard detection units
5.2.10 · D5· Hardware › Processor Datapath & Pipelining › Hazard detection units
Questions se pehle, yeh page har woh vocabulary khud se build karta hai jo woh use karta hai. Yeh setup ek baar padho; poora bank isi par tika hai.
Paanch lanes (pipeline stages)
Pipeline ko paanch lanes ki tarah imagine karo, aur ek instruction har clock tick par ek lane daayein khisak rahi hai:
- IF — instruction fetch: memory se agla instruction pakdo.
- ID — instruction decode: pata lagao yeh kya hai aur apne source registers padho.
- EX — execute: ALU arithmetic karta hai.
- MEM — memory: data memory ko touch karo (sirf loads aur stores yahan real kaam karte hain).
- WB — write-back: result ko register file mein likho.
Pipeline registers (ID/EX-style names)
Lanes ke har pair ke beech mein ek pipeline register baitha hota hai — ek latch jo har clock edge par ek instruction ka data ek stage se agale mein le jaata hai. Inhe un do stages ke naam se jaana jaata hai jinke beech yeh baitha hai:
Aisi register ke andar ek field dot ke saath likhi jaati hai: ID/EX.MemRead ka matlab hai "jo bhi instruction currently EX mein hai uska MemRead control bit".
Register fields Rs, Rt, Rd
Har MIPS instruction teen tak registers number se name karti hai:
Is bank mein use hone wale control signals
Bubble kahan se aata hai — control mux
Forwarding vs. stalling (do ilaaj)
- Forwarding = ek shortcut wire jo ek freshly-computed value ko backward ek aisi instruction tak le jaata hai jise abhi chahiye, register file tak pahunchne ka intezaar karne ki jagah. Forwarding unit dwara EX/MEM ya MEM/WB se handle kiya jaata hai.
- Stall = pipeline ke front ko ek tick ke liye freeze karna aur ek bubble inject karna taaki ek not-yet-ready value ko appear hone ka waqt mile.
Load-use detection condition, poori tarah se explain ki gayi
Is bank mein har stall ek Boolean expression se aati hai. Yeh poori tarah se likhi hai:
Kyun exactly ek bubble kaafi hai
Load lw aur uske consumer add ko, tick by tick, ek bubble insert hone ke saath trace karo:
| Cycle | IF | ID | EX | MEM | WB |
|---|---|---|---|---|---|
| 1 | lw |
— | — | — | — |
| 2 | add |
lw |
— | — | — |
| 3 | add |
bubble | lw |
— | — |
| 4 | … | … | bubble | lw |
— |
| 5 | … | add |
… | bubble | lw |
Cycle 3 mein hazard unit detect karta hai lw EX mein hai aur add ID mein hai, toh woh add ko freeze karta hai (ID mein hold karta hai) aur ek bubble inject karta hai. Cycle 5 tak load ki value MEM/WB tak pahunch gayi hai, jo exactly woh stage hai jahan se forwarding unit bypass kar sakta hai add ke EX mein. Ek bubble woh minimum delay hai jo load ko forwardable position mein le aati hai — isliye exactly ek kaafi hai.
Hazard detection unit tab hi fire karta hai jab forwarding tumhe bacha nahi sakta. Woh ek sentence hi hai jo in mein se zyaadatar traps ko unlock karta hai.
True or false — justify karo
Forwarding unit aur hazard detection unit logic ka ek hi block hai
Har data hazard ek pipeline stall force karta hai
Hazard detection unit EX stage mein rehti hai jahan ALU hota hai
Rs, Rt) decode hote hain. ID mein dependency detect karna hume EX se pehle stall karne deta hai kabhi bhi stale value consume karne se.Hazard detection unit combinational honi chahiye, clocked nahi
Ek bubble ka load-use stall hamesha dependent instruction ke liye sahi data lane ke liye kaafi hota hai
Ek instruction ko flush karna aur stall karna ek hi operation hai
MIPS mein register 0 par likhna ek false load-use hazard create kar sakta hai
Rd != 0 check add karta hai. Register 0 zero par hardwired hai; us par ek "dependency" meaningless hai, toh ise hazard treat karna pointless bubbles insert karta.Simple 5-stage in-order pipeline mein WAR aur WAW hazards common hain
Structural hazards usi load-use comparison logic se detect kiye ja sakte hain
Branches ko EX ki jagah ID stage mein resolve karna un instructions ki sankhya kam karta hai jinhe hume flush karna padta hai
Error dhundho
Claim: "Hum load ka result seedha ID/EX register se agli instruction ke ALU mein forward karte hain, toh kabhi koi stall ki zaroorat nahi." — kya galat hai?
Claim: "Stall par hum PCWrite = 1 set karte hain taaki PC chalta rahe." — kya galat hai?
PCWrite = 0 chahiye (upar definitions se freeze setting). Agar stall ke dauran PC aage badha toh hum agla instruction fetch karke phir kho dete. PC aur IF/ID ko freeze karna hi pipeline ke front ko wait karata hai.Claim: "Bubble insert karne ke liye hum ID/EX control signals ko freeze karte hain taaki woh apni purani value hold karein." — kya galat hai?
Claim: "Load-use stall ke dauran hum load instruction ko ID mein hold karte hain." — kya galat hai?
Claim: "Taken branch ke baad flush karne ke liye sirf Stall = 1 set karna kaafi hai." — kya galat hai?
Claim: "Detection condition sirf Rs check karta hai, kyunki woh pehla operand hai." — kya galat hai?
MemRead ko dono Rs aur Rt ke OR ke saath AND karta hai, kyunki dependent instruction load ka destination kisi bhi source operand se padh sakti hai. Rt miss karna ek real hazard ko second-operand dependencies par slip past karne deta.Claim: "Kyunki forwarding EX/MEM aur MEM/WB hazards handle karta hai, hazard unit unhe bhi check kar sakta hai aur load case skip kar sakta hai." — kya galat hai?
Why questions
Hazard detection unit specifically ID/EX.MemRead kyun dekhta hai opcode ki jagah?
MemRead = 1 woh clean, decoded flag hai jo load identify karta hai — woh akela instruction jiska result EX ke end tak ready nahi hota. Ek control bit dekhna hazard unit ke andar opcode re-decode karne se sasta aur tez hai.Stall ka faisla ek single clock cycle ke andar kyun khatam hona chahiye?
Jab bhi possible ho forwarding ko stalling se kyun prefer kiya jaata hai?
Branch resolution pehle (ID mein) move karne ke liye extra hardware kyun chahiye, aur kya yeh worth it hai?
Hazard detection unit akela saari pipeline stalls kyun eliminate nahi kar sakta?
Control-signal path ko ek aisi mux kyun chahiye jo saare signals ko zero force kar sake?
Branch prediction (5.2.11-Branch-prediction) control-hazard flush logic ka complement kyun hai, na ki replacement?
Edge cases
Agar load ka destination register dependent instruction ke Rs aur Rt dono ke barabar hai (dono operands), toh kitne bubbles insert hote hain?
Kya hoga agar load ke baad wali instruction load ke Rd se alag register padhti hai?
Rd == Rs / Rd == Rt comparison fail hota hai, toh Stall = 0 aur pipeline full speed par chalti hai. Paas mein load ka hona hi harmful nahi hai bina matching register ke.Ek load ke baad ek store aata hai jo loaded value ko apni data-to-store ke roop mein use karta hai — kya yeh abhi bhi load-use hazard hai?
Rt (store-data register) se load ka Rd padhta hai. Consumer ka store hona timing nahi badalta: value abhi bhi ready nahi hoti, toh stall bilkul usi tarah required hai.Agar ek taken branch ke baad turant wrong path par ek aur branch aata hai toh kya?
Ek branch ID mein resolve hoti hai aur not taken nikali — hazard unit kya karta hai?
Flush = Branch AND BranchTaken false evaluate karta hai aur koi bubble insert nahi hota.Do independent loads back-to-back, jahan pehle load ke baad doosri instruction value use karti hai — kya stall chahiye?
Agar ID/EX.MemRead = 1 hai lekin loaded value baad ki kisi bhi instruction se kabhi use nahi hoti, kya unit stall karta hai?
Rs ya Rt par koi register match nahi hone se, detection condition false hai. Bina dependent consumer wala load zero penalty ke saath flow karta hai — unit dependencies par react karta hai, loads par nahi.Recall Ek-line summary lock karne ke liye
Hazard detection unit sirf load-use case ke liye stall karta hai (value abhi produce nahi hui), sirf wrong-path branch instructions ke liye flush karta hai, aur chup rehta hai jab bhi forwarding unit pehle se data reroute kar sakta ho.