FF1 sees the edge at t=0. FF2 sees the next edge nominally at t=T, but skewed by tskew, so FF2's capturing edge is at T+tskew.
Data is valid at FF2's D input at time:
tdata=tcq+tlogic
Requirement: data settled by setup window:
tcq+tlogic+tsu≤T+tskew
Now add jitter — it can push the capture edge earlier by tjitter in the worst case (edge arrives sooner, less time available):
tcq+tlogic+tsu+tjitter≤T+tskew
Hold is about the same edge causing a race: the new data launched by FF1 at t=0 must NOT arrive at FF2 too fast and corrupt what FF2 is trying to capture on its own edge.
FF2's capturing edge is at tskew (same edge, skewed). New data arrives at FF2 at tcq+tlogic,min. It must arrive after the hold window closes:
tcq+tlogic,min≥tskew+th
Add jitter (edge can arrive later, worsening hold by tjitter):
tcq+tlogic,min≥tskew+th+tjitter
Spatial, deterministic difference in clock-edge arrival time between two flip-flops from the same clock, due to unequal clock-tree paths.
Define clock jitter.
Temporal, random cycle-to-cycle variation of a clock edge from its ideal position, due to oscillator/PLL/supply noise.
Setup constraint with skew and jitter?
tcq+tlogic,max+tsu+tjitter≤T+tskew
Hold constraint with skew and jitter?
tcq+tlogic,min≥tskew+th+tjitter
Why can't you fix a hold violation by lowering clock frequency?
The hold inequality contains no period T; it's an edge-vs-edge race on the same cycle, independent of T.
Does positive skew help or hurt setup?
Helps — the late capture edge gives data more time.
Does positive skew help or hurt hold?
Hurts — late capture edge lets fast new data violate the hold window.
Does jitter ever help timing?
No — being random, worst-case jitter always reduces margin for both setup and hold.
fmax formula with uncertainty?
fmax=1/(tcq+tlogic,max+tsu+tjitter−tskew)
How to fix a hold violation?
Add delay/buffers to the data path (increase tlogic,min) or reduce clock skew.
Recall Feynman: explain to a 12-year-old
Imagine a relay race where a whistle tells everyone to run. Ideally everyone hears the whistle at the exact same instant. Skew is when the whistle's echo reaches some runners a little later because they stand farther — always the same delay. Jitter is when the timekeeper's hand shakes, so the whistle blows a tiny bit early or late each time — random. If runners start at slightly wrong times, some hand off the baton too soon (hold problem) or the next runner isn't ready yet (setup problem). Engineers leave extra time so nobody messes up the handoff.
Dekho, ek clock ka kaam hai poore chip me ek saath "tick" bhejna — jaise ek dum sabko ek hi second me signal mile. Lekin real hardware me wires ki length alag hoti hai aur buffers me delay hota hai, isliye ek hi edge do alag flip-flops tak thodi alag time par pahunchta hai. Yeh spatial, fixed difference hi clock skew hai. Dusri taraf, jo oscillator/PLL clock banata hai wo bilkul perfect nahi hota — supply noise aur thermal noise ki wajah se har tick thoda early ya late aa jaata hai. Yeh random, cycle-to-cycle wobble jitter hai. Trick yaad rakho: Skew = Spatial & Steady, Jitter = Just Jumpy.
Ab yeh matter kyun karta hai? Flip-flop ko data chahiye setup time pehle stable, aur hold time tak stable. Setup constraint banta hai: tcq+tlogic+tsu+tjitter≤T+tskew. Yahan positive skew (capture clock late aata hai) tumhe extra time deta hai — helpful. Lekin jitter hamesha bura hai kyunki worst case me edge jaldi aa jaata hai. Isliye jitter ko period me pad karna padta hai.
Hold ka case ulta hai. Hold violation tab hota hai jab naya data FF2 par bahut jaldi pahunch jaata hai aur purana data corrupt kar deta hai: tcq+tlogic,min≥tskew+th+tjitter. Notice karo — is equation me T hai hi nahi! Matlab clock slow karke hold problem kabhi fix nahi hoti. Positive skew yahan dushman hai. Fix karne ka tareeka: data path me buffers/delay daalo, ya skew kam karo. Exam me bas sign yaad rakho: Setup Smiles with positive skew, Hold Howls.