Clocking
Each card shows a command to explain. A missed card returns later in the round and starts the schedule over. A card answered correctly moves up the schedule and next appears after 1, 3, 7, then 21 days. Keys 1 to 4 choose an option, h shows a hint, and Enter moves on. A hint keeps the card where it is on the schedule. An ordering card is answered by clicking its items in order, and one wrong click ends it. Time values are in nanoseconds. Progress is stored in this browser.
All 11 cards in this section, with answers
-
latency against skewLatency is the delay to a register; skew is the difference between two.
Hint: One is an absolute delay, the other a difference. Ask which hurts a check.
Equal latency at both ends cancels in a same-clock check, so a deep clock tree is not itself a timing problem. The difference between the two ends does not cancel, which is why the tree is balanced rather than merely made short.
report_clock_skewshows the difference. the open flow reference -
skew that delays the capture clockIt helps setup, by giving the data more time, and hurts hold.
Hint: Work through both checks: the late capture edge helps one and hurts the other.
A late capture edge extends the setup window and shortens the hold window by the same amount. This is why fixing hold by adding buffers can be cheaper than rebalancing a tree, and why useful skew is deliberately unbalanced rather than skew being minimized everywhere. the open flow reference
-
jitter against skewSkew is a difference between registers; jitter is a variation over time.
Hint: One varies between places, the other between cycles.
Jitter comes from the clock generator and from supply noise, so it cannot be designed out of the tree. It enters analysis as part of
set_clock_uncertainty, along with a margin for skew before the tree exists. the open flow reference -
useful skewDeliberate skew that moves slack from a path with margin to one without.
Hint: Ask what deliberately unbalancing the tree can buy.
Delaying a register's clock gives the path into it more time and the path out of it less. Where the outgoing path has margin, that is free speed. It costs hold margin and makes the design more sensitive to variation, so it is used deliberately and sparingly. the open flow reference
-
a clock domain crossingThe two clocks have no fixed phase, so no margin guarantees it.
Hint: Ask why timing analysis cannot close such a path, however much margin it has.
No margin closes it. With no fixed relationship, an edge can land arbitrarily close to the data change, and the receiving register can go metastable. The fix is a synchronizer, and timing declares the crossing false with
set_clock_groups -asynchronous. Verifying the synchronizers is a separate check. the open flow reference -
why a clock gate needs its own checkA late enable can cut a clock pulse short, producing a runt edge.
Hint: Ask what a late enable would do to the shape of the gated clock.
The check constrains the enable against the clock so the gate only ever produces whole pulses. The integrated cell latches the enable to make that possible, and
set_clock_gating_checksets the margins. the open flow reference -
an H-tree, a mesh, and a spineIncreasingly expensive ways to buy lower skew, from tree to grid.
Hint: Order them by how much metal and power they spend on skew.
An H-tree balances by construction and is cheap, but its skew depends on the loads matching. A mesh shorts the leaves together, so skew is very low and the power very high. A spine is the middle: a strong backbone with trees hanging off it. The choice follows the skew budget. the open flow reference
-
why a shallower clock tree is not automatically betterA shallow tree needs bigger buffers and matches loads less easily.
Hint: Ask what a deep tree costs, and what shallowness costs in return.
Latency itself cancels within a clock, so depth is not the enemy; what matters is skew, power, and how sensitive the tree is to variation. Deep trees accumulate variation, and shallow ones need strong drivers and long wires. Insertion delay also matters at a block's boundary, where it does not cancel. the open flow reference
-
what clock gating actually savesThe switching power of the clock branch below the gate.
Hint: Ask how far down the tree the saving reaches.
Everything below a disabled gate stops toggling, including the register clock pins, which is where most clock power sits. The costs are the gate's own area, a timing check on its enable, and a tree that is harder to balance because branches switch independently. the open flow reference
-
duty cycle distortion along a clock pathEach unbalanced stage shifts one edge relative to the other, shrinking a pulse.
Hint: Ask what happens if a buffer's rise delay differs from its fall delay.
A pulse that starts at half the period can arrive much narrower, and a register needs a minimum high and low time to work. This is why clock cells are drawn with matched edges and why
set_min_pulse_widthis checked at the leaves. the open flow reference -
a reset domain crossingA register reset by one reset feeds one reset by another.
Hint: The clock domains can be the same. Ask what differs instead.
If one register is released from reset while its neighbour is still held, the released one can capture a value that the other is about to change, which is the same hazard as a clock crossing. Reset domain crossing checks are a separate verification step, distinct from clock domain crossing. the open flow reference