Volume 05 Beginner 5 sub-modules ~20 min read

Hold Analysis, Step by Step

Setup asks whether the data is fast enough. Hold asks whether it is too fast - whether new data can race through a short path and spoil a capture that is still happening. The arithmetic is the same stopwatch, but with the fastest delays, the same clock edge at both ends, and no clock period anywhere. That last fact changes everything about how hold problems are found and fixed.

You will learn
  • How hold arrival and hold required time are built, and why they use the fastest delays
  • How to compute hold slack, on one line
  • Why the clock period is not in the hold check, and what that means for fixing it
  • How setup and hold together leave a window of allowed skew
  • How to read a hold report line by line
You need
  • Volume 04, for arrival time, required time and reading a report

5.1 Hold arrival and required time

A hold check asks whether new data can arrive too soon. It takes the earliest the data can reach the capture flip-flop, and compares it with how long the old value must be held. Both are counted from the same clock edge.

At every clock edge two things happen at once. The launch flip-flop sends out new data, and the capture flip-flop stores the old data sitting at its input. If the new data reaches the capture flip-flop before it has finished storing, the old value is spoiled.

The same clock edge launching new data and capturing old data 0 1 2 clk q1 d2 OLD NEW launches NEW, captures OLD
Figure 5.1 - At edge 1, FF1 launches NEW while FF2 is still capturing OLD. On a short path, NEW reaches FF2's input only a moment after the edge. If that moment is shorter than FF2's hold time, the capture of OLD is corrupted.

So this time the danger is a fast path. Everything is measured with the fastest delays the library allows, because the question is how early the data could possibly be.

The short path

This volume uses a short path on the same 200 MHz clock as Volume 04: one buffer between two flip-flops, with the capture clock arriving a little late.

A short path with one buffer, and a capture clock that arrives 0.14 ns after the launch clock u_ff3 D Q t_cq 0.15 BUF 0.05 ns hold 0.04 u_ff4 D Q clk period 5.00 ns 0.83 ns 0.97 ns
Figure 5.2 - The hold path for this volume. The clock reaches u_ff3 after 0.83 ns but u_ff4 after 0.97 ns. The data needs only 0.15 ns to leave u_ff3 and 0.05 ns to pass the buffer, at their fastest.

Hold arrival: the earliest the data can get there

Step Adds Running total
Launch edge - 0.00 ns
Clock source latency 0.50 0.50 ns
Clock tree to u_ff3 0.33 0.83 ns
Clock-to-Q, fastest 0.15 0.98 ns
u5 buffer, fastest 0.05 1.03 ns
Hold arrival time 1.03 ns

Hold required: how long the old value must be left alone

Step Adds Running total
Capture edge - the same edge - 0.00 ns
Clock source latency 0.50 0.50 ns
Clock tree to u_ff4 0.47 0.97 ns
Clock uncertainty for hold 0.03 1.00 ns
Library hold time of u_ff4 0.04 1.04 ns
Hold required time 1.04 ns
Hold, both sides arrival = launch clock latency + fastest clock-to-Q + fastest logic required = capture clock latency + hold uncertainty + hold time
In plain words

For setup, the required time is a deadline: arrive before it. For hold, it is a starting gate: the new data must arrive after it. That is why the margins are added on the hold side, where setup subtracted them.

Common mistake

Using the slow delays for a hold check. Hold is about the data being too early, so the tool uses the fastest clock-to-Q and the fastest logic it can find. A path that is safely slow in the setup report can still fail hold with its fast numbers.

Quick check

With no skew, a path's fastest clock-to-Q is 0.11 ns and its fastest logic is 0.09 ns. The hold time is 0.06 ns. What is the hold slack?

Show the answer

Answer: A. The new data arrives 0.11 + 0.09 = 0.20 ns after the edge, and must not arrive before 0.06 ns. Hold slack = 0.20 - 0.06 = 0.14 ns. The clock latencies were equal, so they cancel.

5.2 Hold slack

Hold slack is the arrival time minus the required time - the other way round from setup. Negative hold slack means the new data got there too soon.

For the short path:

Hold slack slack = arrival - required = 1.03 - 1.04 = -0.01 ns (violated)

It fails, by 10 picoseconds.

The same sum on one line

Let the source latency cancel, and write skew as the capture clock arrival minus the launch clock arrival (0.97 - 0.83 = +0.14 ns):

Hold slack, all terms slack = clock-to-Q + logic - hold - skew - uncertainty

0.15 + 0.05 - 0.04 - 0.14 - 0.03 = -0.01 ns. Compare it with the setup line from Volume 04:

Setup slack Hold slack
Clock period T + T not there
Skew + skew - skew
Clock-to-Q and logic subtracted, slowest values added, fastest values
Library time - setup - hold
Uncertainty - setup uncertainty - hold uncertainty

Look at the skew row. A late capture clock gives setup more time and hold less. It is the same 0.14 ns, pulling the two checks in opposite directions.

A long path is safe from hold

The adder path from Volume 04 has fast numbers too: its logic takes at least 1.14 ns. Its hold arrival is 2.14 ns and its hold required time is 0.95 ns, giving a hold slack of +1.19 ns. Long paths almost never fail hold. The dangerous ones are short: a buffer, a wire, or nothing at all.

Remember

Setup fails on long paths. Hold fails on short ones. A timing report sorted by hold slack is full of paths with one or two cells in them.

Quick check

Fastest clock-to-Q 0.10 ns, fastest logic 0.07 ns, hold 0.05 ns, hold uncertainty 0.04 ns. The capture clock is 0.12 ns late. What is the hold slack?

Show the answer

Answer: C. slack = 0.10 + 0.07 - 0.05 - 0.12 - 0.04 = -0.04 ns. The positive skew is what breaks it: with no skew the slack would be +0.08 ns.

5.3 Why hold ignores the clock period

A hold check compares a clock edge with itself, so the clock period cancels out. A hold violation is exactly the same at any frequency - which is why it is the more dangerous of the two.

Volume 01 showed this with one path. Here it is again with the short path, checked at five clock speeds:

Period Frequency Setup slack Hold slack
2.00 ns 500.0 MHz 1.69 ns -0.01 ns
5.00 ns 200.0 MHz 4.69 ns -0.01 ns
10.00 ns 100.0 MHz 9.69 ns -0.01 ns
50.00 ns 20.0 MHz 49.69 ns -0.01 ns
1000.00 ns 1.0 MHz 999.69 ns -0.01 ns

The setup slack follows the period exactly. The hold slack does not move at all.

Why the period drops out

  1. Setup compares the launch edge with the next edge, one period later. The period is the gap between them, so it sits in the sum.
  2. Hold compares the launch edge with the capture that happens at that same edge. There is no gap between them to measure.
  3. So hold depends only on how fast the path is and how the clock tree is balanced - both fixed once the chip is built.
What this means in the lab

A chip with a setup violation can be run at a slower clock and sold as a slower part. A chip with a hold violation fails the same way at every clock speed, at every voltage where its fast path stays fast. There is no knob to turn. It is scrap, which is why hold is checked with such care.

Common mistake

Waiting until the design is nearly finished to look at hold. Before the clock tree is built, skew is unknown, and hold can look clean. The first report with a real clock tree often shows thousands of new hold violations at once. Plan for them.

Quick check

The path in the last quick check fails hold by 0.04 ns at 200 MHz. What is its hold slack at 1 GHz, and at 100 MHz?

Show the answer

Answer: B. The clock period is not in the hold sum, so the slack is -0.04 ns at every frequency. Only the data path and the clock tree can change it.

5.4 Ten worked hold problems

Nine hold problems, then one that puts setup and hold side by side. Use the one-line formula: slack = clock-to-Q + logic - hold - skew - uncertainty, all with the fastest delays.

Practice 1

A plain path

Fastest clock-to-Q 0.10 ns, fastest logic 0.30 ns, hold time 0.05 ns. No skew, no uncertainty.

Show the solution

Arrival 0.10 + 0.30 = 0.40 ns. Required 0.05 ns. Hold slack = 0.35 ns, met.

Practice 2

Uncertainty joins in

Clock-to-Q 0.10 ns, logic 0.08 ns, hold 0.05 ns, hold uncertainty 0.05 ns.

Show the solution

Arrival 0.18 ns. Required 0.05 + 0.05 = 0.10 ns. Hold slack = 0.08 ns, met.

Practice 3

A late capture clock hurts

Clock-to-Q 0.12 ns, logic 0.10 ns, hold 0.04 ns. The clock reaches the launch flop after 0.50 ns and the capture flop after 0.70 ns.

Show the solution

Arrival 0.50 + 0.12 + 0.10 = 0.72 ns. Required 0.70 + 0.04 = 0.74 ns. Hold slack = -0.02 ns, violated. The skew of +0.20 ns did it.

Practice 4

An early capture clock helps

The same path, but the capture clock arrives after only 0.40 ns.

Show the solution

Arrival is still 0.72 ns. Required 0.40 + 0.04 = 0.44 ns. Hold slack = 0.28 ns, met.

Negative skew helps hold - and, as Volume 04 showed, costs setup the same amount.

Practice 5

How much delay to add?

Go back to the violating path of problem 3. A buffer adding 0.05 ns at its fastest is inserted in the data path. What is the hold slack now?

Show the solution

The fastest logic becomes 0.10 + 0.05 = 0.15 ns, so the arrival becomes 0.77 ns. Required is still 0.74 ns. Hold slack = 0.03 ns, met.

At least 0.02 ns had to be added; the buffer gave 0.05 ns. A tool picks the smallest delay cell that clears the violation without hurting setup.

Practice 6

No logic at all

One flip-flop drives another directly: no gates in between. Clock-to-Q 0.14 ns, hold 0.06 ns. The clock reaches them at 0.20 and 0.25 ns.

Show the solution

Arrival 0.20 + 0.14 = 0.34 ns. Required 0.25 + 0.06 = 0.31 ns. Hold slack = 0.03 ns, met - but only just. Shift registers are built exactly like this, which is why their clock trees are balanced carefully.

Practice 7

A negative hold time

Clock-to-Q 0.10 ns, logic 0.02 ns, and the library lists a hold time of -0.03 ns. No skew.

Show the solution

Arrival 0.12 ns. Required -0.03 ns. Hold slack = 0.12 - (-0.03) = 0.15 ns, met. A negative hold time counts in your favour.

Practice 8

Picoseconds

Clock-to-Q 95 ps, logic 40 ps, hold 30 ps, hold uncertainty 20 ps. The capture clock arrives 110 ps after the launch clock.

Show the solution

95 + 40 - 30 - 110 - 20 = -25 ps, violated.

Practice 9

Fix it in the clock tree

The same path, but the clock tree is rebalanced so the capture clock arrives only 60 ps late.

Show the solution

95 + 40 - 30 - 60 - 20 = +25 ps, met. Removing 50 ps of skew fixed hold without touching the data path - but check setup, which just lost those 50 ps.

Problem 10: setup and hold together

One path, both checks. T = 2.00 ns. Clock-to-Q 0.10 ns slowest and 0.08 ns fastest. Logic 1.70 ns slowest and 0.05 ns fastest. Setup 0.06 ns, hold 0.05 ns, and skew +0.10 ns.

  1. Setup: 2.00 + 0.10 - 0.10 - 1.70 - 0.06 = +0.24 ns, met.
  2. Hold: 0.08 + 0.05 - 0.05 - 0.10 = -0.02 ns, violated.
  3. The same skew that helps setup is what breaks hold.

So what skew would work? Setup needs 0.14 + skew to stay above zero, so skew must be at least -0.14 ns. Hold needs 0.08 - skew to stay above zero, so skew must be at most +0.08 ns.

Setup and hold slack against clock skew, showing the window of skew where both pass -0.3 -0.2 -0.1 0 0.1 0.2 0.3 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5 clock skew, capture minus launch (ns) slack (ns) zero -0.14 +0.08 setup slack hold slack
Figure 5.3 - As skew grows, setup slack (gold) rises and hold slack (cyan) falls by the same amount. Both are positive only between -0.14 ns and +0.08 ns: a window 0.22 ns wide. Clock tree design is the job of landing every pair of flip-flops inside its window.
Remember

Skew is not good or bad. Every pair of flip-flops has a window of skew in which both checks pass. A clock tree is good when every pair lands inside its own window.

Quick check

In problem 10, the skew is changed to +0.05 ns. Which checks pass?

Show the answer

Answer: D. +0.05 ns is inside the window from -0.14 to +0.08 ns. Setup slack becomes 0.14 + 0.05 = 0.19 ns and hold slack 0.08 - 0.05 = 0.03 ns. Both pass.

5.5 Reading a hold report

A hold report has the same shape as a setup report. Only three things differ: it says "min", the capture edge is the launch edge, and the last lines subtract the other way.


Startpoint: u_ff3
Endpoint:   u_ff4
Path Group: clk
Path Type:  min

  Point                                              Incr     Path
  ----------------------------------------------------------------
  clock clk (rise edge)                              0.00     0.00
  clock source latency                               0.50     0.50
  clock network delay (propagated)                   0.33     0.83
  u_ff3/CK                                           0.00     0.83
  u_ff3/Q (clock-to-Q)                               0.15     0.98
  u5/Y (BUF_X1)                                      0.05     1.03
  u_ff4/D                                            0.00     1.03
  data arrival time                                           1.03

  clock clk (rise edge)                              0.00     0.00
  clock source latency                               0.50     0.50
  clock network delay (propagated)                   0.47     0.97
  u_ff4/CK                                           0.00     0.97
  clock uncertainty                                  0.03     1.00
  library hold time                                  0.04     1.04
  data required time                                          1.04
  ----------------------------------------------------------------
  data arrival time                                           1.03
  data required time                                         -1.04
  ----------------------------------------------------------------
  slack (VIOLATED)                                           -0.01

The three differences from a setup report

  1. "Path Type: min". The fastest delays were used throughout. A setup report says "max".
  2. The second clock edge is at 0.00, not at 5.00. Same edge at both ends. No period appears anywhere.
  3. The uncertainty and the hold time are added, not subtracted. And the last lines take the required time away from the arrival, the reverse of setup.

Reading it for a fix

Look at the clock lines first. The clock network delay is 0.33 ns to u_ff3 but 0.47 ns to u_ff4: a skew of 0.14 ns. The whole path's data delay is only 0.20 ns. So there are two ways to fix it:

Fix Hold slack Setup slack at 5 ns
As it is -0.01 ns 4.69 ns
Add a delay cell (0.08 ns fastest, 0.12 ns slowest) +0.07 ns 4.57 ns
Rebalance the tree so u_ff4's clock arrives at 0.40 ns +0.06 ns 4.62 ns

Both fixes clear the violation, and both cost a little setup slack. With 4.6 ns of setup slack to spare, that costs nothing that matters here.

Common mistake

Fixing a hold violation that the report shows with a large clock uncertainty, before the clock tree is built. The uncertainty is standing in for skew nobody knows yet. Fix hold once the real clock tree exists, or the tool will pad hundreds of paths that never needed it.

Quick check

In the hold report above, which number would change if the chip ran at 100 MHz instead of 200 MHz?

Show the answer

Answer: A. Nothing in a hold report depends on the period. The second clock edge is the same edge as the first, at 0.00, at any frequency. The whole report would be identical.

What you learned

Key words from this volume

Every word below has a plain-English entry in the glossary.

Practice

Practice 10

Read the fix off the report

In the hold report, the clock reaches u_ff3 at 0.83 ns and u_ff4 at 0.97 ns. By how much would the capture clock have to arrive earlier to bring the hold slack exactly to zero?

Show the solution

The slack is -0.01 ns, and every picosecond taken off the capture clock latency adds a picosecond of hold slack. So the capture clock must arrive 0.01 ns earlier, at 0.96 ns.

Real flows aim for more margin than zero, which is why the rebalanced tree in 5.5 brought it down to 0.40 ns, giving +0.06 ns.

Practice 11

Why did hold appear after clock tree synthesis?

Before the clock tree was built, a design showed no hold violations with a hold uncertainty of 0.03 ns and an ideal clock. After the tree was built, the short path in this volume failed. What changed?

Show the solution

The skew. With an ideal clock both flip-flops see the edge at the same moment. So the short path had 0.15 + 0.05 - 0.04 - 0.03 = +0.13 ns of hold slack. The real tree delivers the capture clock 0.14 ns late, which takes that down to -0.01 ns.

This is normal. Hold is checked with an ideal clock for guidance only; the real answer comes after clock tree synthesis.

Practice 12

The skew window

A path has 0.35 ns of setup slack and 0.12 ns of hold slack with no skew. What range of skew keeps both checks passing?

Show the solution

Setup slack is 0.35 + skew, so skew must be at least -0.35 ns. Hold slack is 0.12 - skew, so skew must be at most +0.12 ns.

The window runs from -0.35 to +0.12 ns: 0.47 ns wide. The narrower the window, the harder that pair of flip-flops is for the clock tree.

Interview corner

Interview question 1

Setup versus hold

"Why is a hold violation considered worse than a setup violation?"

Show the solution

"Because the clock period is not in the hold equation. A setup violation depends on the period, so a failing chip can still run at a lower frequency and be sold as a slower part. A hold violation is a race between the data and the clock at the same edge; it fails at every frequency, including very low ones. Once the silicon is made there is nothing to adjust, so a hold failure means the chip is scrap. That is why hold is signed off at the fast corner with real clock-tree skew."

Interview question 2

Fixing hold

"You have a hold violation of 30 ps on a flop-to-flop path. How would you fix it, and what would you check afterwards?"

Show the solution

"First I would see whether it comes from skew or from a genuinely short data path. If the capture clock is unusually late, rebalancing the clock tree is the cleaner fix. Otherwise I would insert a delay cell or a buffer in the data path, at least 30 ps at the fast corner.

Afterwards I would re-check setup on that same path at the slow corner, because the added delay is larger there. And I would check other corners, since a hold fix sized at one corner can be too small at another."

Volume 06 turns to the clock itself. It covers the waveform and duty cycle, where latency comes from, skew in all its forms, jitter, and the difference between an ideal clock and a real one.