How do you reconcile a bottom-up block's budgeted constraints against the top level's flat timing run?
From PDVerse STA Mentor Guide · pdVerse Mentor Guide
Short Answer
A block closed bottom-up against budgeted constraints, assumed boundary timing rather than real top-level values, needs to be checked against a flat, full-chip run once the top level exists, because the budget was always an estimate. Reconciliation compares the block's assumed boundary arrival and required times to what the flat run actually computes at those same pins, and treats any gap as a signal that the budget, the block, or both need another pass.
Technical Explanation
- Bottom-up closure lets a block team start timing work before the full top-level netlist exists, by sourcing a budgeted-constraints file that stands in for the real top-level environment.
- A flat timing run analyzes the entire chip's netlist together, computing real boundary arrival and required times instead of the assumed ones the budget used.
- Reconciliation compares the two side by side at every block boundary pin: if the flat run's real arrival time is later than the budget assumed, the block effectively has less time than it thought it did, and vice versa.
- Because the budget was set before layout details were final, some mismatch is expected; the practical question is whether the mismatch is small enough to absorb in margin or large enough to require re-closing part of the block.
- The tool does not automatically know which number to trust; the flat run is the ground truth once it exists, so a mismatch is resolved by updating the block's constraints to match reality, not by editing the flat run's numbers to match the budget.
- Because rerunning the full block flow for every small mismatch is expensive, teams usually set a threshold, similar to context refresh for HyperScale, past which a mismatch triggers real rework rather than being absorbed into existing margin.
- Reconciliation is usually easiest to run pin by pin at the block boundary, since a mismatch buried inside an aggregate slack summary is much harder to trace back to which specific budget assumption was wrong.
- Once reconciliation is done for a milestone, the corrected numbers typically replace the original budget file for that block, so the next design pass starts from the reconciled values instead of repeating the same comparison against the original guess.
Common Mistake
The Trap: assuming that because a block passed cleanly against its own budgeted constraints, it will automatically pass once the real top-level flat run replaces those numbers.
- A budget that turned out optimistic can leave a block passing on paper but failing once real boundary timing replaces the assumed numbers.
- Skipping the flat-run comparison and only checking the block in isolation misses cases where the top level's real skew or loading is worse than what was budgeted.
Follow-up Question & Model Response
If the flat run shows a large mismatch on one boundary pin, do you always have to re-implement the block?
Candidate Model Response: Not always; the first step is checking whether the block has spare margin elsewhere on the affected path that can absorb the difference, similar to reallocating budget between blocks. If the block genuinely has no slack to give, then part of the block, usually just the logic near that boundary pin, needs another implementation pass with the corrected constraint. Treating every mismatch as an automatic re-implementation wastes schedule on cases the existing margin could have covered, so reconciliation always starts with a slack check before deciding whether real rework is needed.
Practical Example
A block was budgeted with a 200ps required time at its output pin data_out[3], closed cleanly with 40ps of margin against that number. Once the top level exists, the flat timing run shows the real required time at that same pin is 160ps, 40ps tighter than budgeted, because a downstream block's logic turned out deeper than assumed. Comparing the two shows the block's 40ps of existing margin exactly cancels the 40ps gap, so the block passes the flat run with zero slack, borderline but not a rework trigger; the team flags it for a closer watch on the next ECO pass rather than reopening the block immediately, and adds a note to the shared budget file explaining why that pin now runs with no spare margin.
Complete STA Handbook
Master Signoff-Ready Static Timing Analysis
Get the complete 10-chapter STA handbook covering setup/hold margins, clock modeling, OCV/POCV, crosstalk noise, and PrimeTime closure.

Continue practising