Here tcq is the flip-flop's clock-to-Q delay (how long after the clock edge the output changes), tcomb is the combinational logic delay along a path, tsu / th are setup / hold times, Tclk is the clock period, and tskew=tcapture−tlaunch is the clock skew (how much later the capturing flop's clock arrives than the launching flop's — it can be negative if the capture clock arrives earlier).
The one picture we keep returning to — a signal launched by FF1, running through logic, and needing to be settled at FF2 before its next edge:
Goal: pick the right formula and the right path (max vs min).
Recall Solution L1.1
Setup → longest path. Setup fears data arriving too late; the slowest route (the propagation delay, tcomb,max) is the latest arrival.
Hold → shortest path. Hold fears data arriving too early and corrupting the capture at the same edge; the fastest route (the contamination delay, tcomb,min) is the earliest disturbance.
Recall Solution L1.2
Setup constraint at equality: Tclk,min=tcq+tcomb,max+tsu=0.25+3.0+0.4=3.65ns.
Recall Solution L1.3
False. The hold equation tcq+tcomb,min≥th+tskew contains no Tclk. Hold is a same-edge race; the clock period is irrelevant to it.
Goal: plug numbers into setup, hold, slack, and fmax.
Recall Solution L2.1
Tclk,min=0.2+6.3+0.5=7.0 ns.
fmax=7.0ns1=7×10−9s1≈142.9MHz
Recall Solution L2.2
Arrival (required by data) =tcq+tcomb,max+tsu=7.0 ns.
Setup slack =Tclk−7.0=6.5−7.0=−0.5ns → fails by 0.5 ns. The deadline (6.5 ns) arrives before the data can settle (7.0 ns).
Recall Solution L2.3
Earliest arrival =tcq+tcomb,min=0.2+0.15=0.35 ns.
Hold slack =0.35−th=0.35−0.5=−0.15ns → hold violation. New data races to FF2 in 0.35 ns but must stay away until 0.5 ns after the edge.
Goal: reason about skew (both signs), and about which path each violation lives on.
Recall Solution L3.1
Start from the formula and substitute term by term:
Setup slack=(Tclk+tskew)−(tcq+tcomb,max+tsu)
At tskew=0 the slack was 0.3, so Tclk−(tcq+tcomb,max+tsu)=0.3. Adding skew only touches the +tskew term:
new slack=old0.3++0.4tskew=+0.7ns
Positive skew helps setup — because it enters with a + sign, a later capture edge pushes the deadline back, giving data more time.
Recall Solution L3.2
Substitute into the hold-slack formula term by term:
Hold slack=(tcq+tcomb,min)−(th+tskew)
Here tskew appears inside a subtraction, so it enters slack with a − sign. At tskew=0 the slack was 0.1; adding +0.4 of skew subtracts0.4:
new slack=old0.1−0.4tskew=−0.3ns
→ now a hold violation. Positive skew hurts hold: delaying the capture edge means the old value must be held longer, so early-arriving new data corrupts it. Same tskew, opposite signs in the two formulas — that is the whole asymmetry. See the arrows below.
Recall Solution L3.3
Negative skew flips both signs relative to L3.1–L3.2. Substitute tskew=−0.3:
Setup slack=0.5+tskew=0.5+(−0.3)=+0.2nsHold slack=0.4−tskew=0.4−(−0.3)=+0.7nsNegative skew hurts setup (deadline pulled earlier, less time — slack shrank) and helps hold (the old value need be held for less time — slack grew). This is the exact mirror of positive skew. Both paths still pass here, but you can see the trade run in the opposite direction.
Recall Solution L3.4
Slowing the clock only relaxes setup (it enlarges Tclk). Since the failure vanished, it was a setup violation, living on the longest / critical path (tcomb,max). A hold failure would have been unaffected.
Goal: choose and size a fix, not just detect a problem.
Recall Solution L4.1
Current hold slack =(0.2+0.1)−0.5=−0.2 ns. We need to add at least 0.2 ns of delay.
Buffers needed =⌈0.2/0.05⌉=⌈4⌉=4 buffers (adding exactly 0.20 ns → new slack =0.0 ns, which passes at ≥0).
Note we add delay to the data path, never slow the clock — hold is Tclk-independent.
Recall Solution L4.2
Setup slack =Tclk−(tcq+tcomb,max+tsu)=6.0−(0.2+5.0+0.4)=6.0−5.6=+0.4ns → still passes. Because the buffers sit on the short path only, the critical (long) path is untouched, so the setup fix is not disturbed.
Recall Solution L4.3
Arrival =0.3+4.2+0.5=5.0 ns. We need 5.0≤0.9Tclk, i.e. Tclk≥5.0/0.9≈5.556ns (so f≤180 MHz gives ≥10% margin).
Goal: integrate everything, including the physical why, edge cases, and the timing exceptions (multi-cycle and false paths).
Recall Solution L5.1
(a) Setup: Tclk,min=tcq+0+tsu=0.2+0.3=0.5ns. Even with no logic, the register overhead sets a floor on the period.
(b) Hold: tcq+tcomb,min=0.2+0=0.2 ns; require ≥th=0.4 ns → 0.2<0.4 → hold FAILS by 0.2 ns. Back-to-back flops are the classic hold-violation shape: the new value shoots through in just tcq, faster than the old value can be captured. Real libraries guarantee tcq≥th or insert delay to prevent exactly this — this is why metastability and hold are cousins.
Recall Solution L5.2
(a) Setup slack =(Tclk+tskew)−arrival=(5.0+tskew)−5.2=tskew−0.2. Set ≥0:
tskew−0.2≥0⇒tskew≥0.2ns
So the minimum positive skew that rescues setup is tskew=0.2 ns (setup slack becomes exactly 0).
(b) With tskew=+0.2 ns, hold slack drops by that same amount (it enters hold with a − sign):
new hold slack=0.5−tskew=0.5−0.2=+0.3ns→still passes.
Here we bought the setup fix with skew and the hold path had enough cushion (0.5 ns) to absorb the 0.2 ns cost. This is useful skew — a real optimization, but only safe when hold margin can afford it. Had the hold slack started below 0.2 ns, this same skew would have created a hold violation.
Recall Solution L5.3
Setup slack =(Tclk+tskew)−(tcq+tcomb,max+tsu)=(5.0+0.1)−(0.25+3.9+0.35)=5.1−4.5=+0.6ns ✅
Hold slack =(tcq+tcomb,min)−(th+tskew)=(0.25+0.3)−(0.2+0.1)=0.55−0.3=+0.25ns ✅
Both positive → the path signs off. This is what a passing STA report row looks like.
Recall Solution L5.4
(a) With tcomb=0.3:
Setup slack =Tclk−(tcq+tcomb+tsu)=1.0−(0.2+0.3+0.4)=1.0−0.9=+0.1 ns ✅ (barely).
Hold slack =(tcq+tcomb)−th=(0.2+0.3)−0.6=0.5−0.6=−0.1 ns ❌.
(b) Add Δ to the route. Since it is the same wire for both checks, tcomb becomes 0.3+Δ in both formulas:
Hold slack=(0.5+Δ)−0.6=Δ−0.1≥0⇒Δ≥0.1Setup slack=1.0−(0.9+Δ)=0.1−Δ≥0⇒Δ≤0.1
The only value satisfying both is Δ=0.1 ns exactly — a razor edge with zero margin on either side. Any real-world variation (a slightly faster or slower buffer, temperature drift) tips one check negative. Buffering trades hold slack for setup slack on the same wire, so on a single shared route it can never create margin for both at once. The real fix: restructure the logic so the fast and slow concerns live on different physical routes, or pipeline to shorten the long path, or retime the flops. See Critical path and pipelining.
Recall Solution L5.5
Arrival (data required time) =tcq+tcomb,max+tsu=0.3+8.0+0.4=8.7 ns.
(a) Single-cycle setup slack =Tclk−8.7=3.0−8.7=−5.7ns → fails badly.
(b) With a 3-cycle exception the deadline is 3⋅Tclk=9.0 ns: setup slack =9.0−8.7=+0.3ns → passes. The path was never actually broken; the default one-cycle assumption was wrong for it.
(c) No. Hold is still evaluated at a near edge (by default one cycle from launch), so the MCP does not loosen hold — you must still satisfy tcq+tcomb,min≥th. Forgetting this is the classic MCP hold trap.
Recall Solution L5.6
Once the false path is excluded, the true critical path sets the period: Tclk,min=6.0 ns.
fmax=6.0ns1≈166.7MHz
The chip was always capable of ~167 MHz; the false path was a phantom limit. Caveat: marking a path false is a promise that it truly cannot toggle — if that promise is wrong, silicon fails while STA reports "clean."
Tclk when there is zero combinational logic
tcq+tsu — the register overhead alone sets a floor; logic delay only adds to it.
Recall How do you fix a hold violation, and how many buffers?
Add delay to the short data path (never slow the clock). Number of buffers =⌈(hold deficit)/(delay per buffer)⌉.
Recall What must both be true for a path to sign off?
Setup slack ≥0and hold slack ≥0 — two separate checks on two path extremes.
Recall What does negative skew (capture clock early) do?
Opposite of positive skew: it hurts setup (deadline pulled earlier) and helps hold (old value held for less time).
Recall What is a multi-cycle path, and does it relax hold?
A path the designer allows N cycles instead of 1, so setup deadline becomes N⋅Tclk. It does not relax hold — hold is still checked at the default near edge.
Recall What is a false path?
A structurally-present route that can never carry a real transition; the designer marks it so STA ignores it, preventing a phantom path from limiting fmax.
Recall Difference between
tcomb,min and tcomb,max?
tcomb,min = contamination (fastest) delay, used for hold; tcomb,max = propagation (slowest) delay, used for setup.