WHY yeh dangerous hai: har flip-flop ko apni input D capturing clock edge ke ird-gird ek
window mein stable rehna chahiye:
setup timetsu — data edge se pehle stable,
hold timeth — data edge ke baad stable.
Agar source domain signal ko is window ke andar badal de (jo tab inevitable hai jab clocks
unrelated hon), to flip-flop metastability mein chala jaata hai.
Peak ke paas flip-flop ek regenerative amplifier ki tarah behave karta hai: ek chhota
voltage imbalance v exponentially badhta hai kyunki do cross-coupled inverters ek doosre
ko amplify karte hain. Model:
dtdv=τv
Yeh step kyun? Loop gain positive feedback hai ek characteristic time constant
τ ke saath (jo transistor gm aur load C se set hota hai: τ≈C/gm). Solve karne par:
v(t)=v0et/τ
Output "resolved" maana jaata hai jab v(t) ek valid logic swing Vlogic tak pahunch jaata hai.
Agar hum assume karein ki initial imbalance v0 metastability window par uniformly distributed
hai, to probability ki ball settling time ts ke baad bhi peak par hai:
P(unresolved after ts)∝e−ts/τ.
Caveat (honestly bolein): real devices mein v0 distribution perfectly uniform nahi hoti,
isliye e−ts/τ ke aage ka exact constant naive uniform-model value se alag hota hai.
Practice mein yeh constant empirical fitting parameter T0 mein fold ho jaata hai, jo silicon par
measure kiya jaata hai — exponential shape survive karti hai, sirf prefactor calibrate hota hai.
Is cheez ko combine karo ki hum kitni baar metastability mein jaate hain (rate ∝fclkfdataT0),
to hum master reliability formula paate hain.
Async signal FF1 mein enter karta hai. FF1 use mid-transition pakad sakta hai → metastable. Kyun? Setup/hold
violate hua kyunki source unrelated hai.
Hum FF1 ko resolve hone dete hain. Available settling time hai:
ts=Tclk+tcq,FF1−tsu,FF2,Yeh exactly kyun? clkB edge se count karna shuru karo jo FF1 ko metastability mein daal gayi.
FF1 ki resolved value uske output par sirf uske clock-to-Q delay tcq,FF1 ke baad appear
hoti hai, jo effectively window ko extend karti hai; FF2 ko agale clkB edge (ek poora period
Tclk baad) se ek setup time tsu,FF2pehle stable data dekhna chahiye. In teeno ko net
karne par upar wala formula milta hai. (Ek common simplification tcq,FF1 drop kar deti hai,
lekin strictly yeh wahan hona chahiye.)
FF2, FF1 ka (resolved) output sample karta hai. Ab safe kyun? Is bade ts ko MTBF mein plug karo → exponential failure ko vanishingly rare bana deta hai.
Sender data bus par rakhta hai, req raise karta hai. req (1 bit) ko receiver mein synchronized
kiya jaata hai. Receiver data latch karta hai (ab stable hai), ack raise karta hai. ack (1 bit)
ko wapas synchronized kiya jaata hai. Sirf control bits synchronizers se cross karte hain; data
bus stable rakha jaata hai aur transition ke dauran kabhi sample nahi hota.
Dual-port RAM + Gray-coded read/write pointers jo opposite domain mein synchronized hote hain.
High-throughput CDC ka gold standard.
Recall Feynman: ek 12 saal ke bachche ko samjhao (click to reveal)
Socho tum ek dost ko paani ka glass pass kar rahe ho jo ek ghoomte merry-go-round par hai. Agar
tum galat waqt par chhodo, to glass tilta hai aur girata hai — tum nahi padhh sakte kitna bhara
hai. Ek synchronizer waise hai jaise ek poora spin wait karo taaki glass tumhare dost ke haath
mein settle ho jaaye phir level check karo. Aur agar tum glasses ki poori tray pass kar rahe ho
(bahut saare bits), to tum unhe ek-ek karke nahi uchhaalte — tum kehte ho "ready?" aur tabhi dete
ho jab tumhara dost "mil gaya!" keh de. Yeh "ready/mil gaya" baat hi handshake hai.