Explain why set_aocvm_table_group / read_ocvm after a timing update triggers a full update, and the flow implication.
From PDVerse STA Mentor Guide, part of the pdVerse Mentor Guide
Short Answer
Derating factors (multipliers applied to a cell's delay to model variation) are an input to delay calculation itself, so changing which tables apply alters delays on a broad set of arcs at once. Because arrival times propagate transitively across the whole graph, the tool can't patch just a few endpoints - it forces a full recomputation. Set all variation data before the first update.
Technical Explanation
- Derating sits upstream of delay, not downstream. AOCV (advanced on-chip variation) and POCV derating factors multiply - or for POCV, statistically parameterize - the delay and sigma of every arc they cover, and those arc values are exactly what feeds arrival-time propagation across the whole timing graph.
- What triggers the full update. Changing the active table group with
set_aocvm_table_group(PT), loading new tables withread_ocvm(PT), or removing a group changes the derate applied to a wide set of arcs simultaneously - not one arc, a whole swath of the design. - Why the tool can't patch incrementally. Because arrival times propagate transitively - each stage's output feeds the next stage's input - the tool has no way to know which handful of endpoints moved as a result. The change ripples design-wide, so PrimeTime invalidates and recomputes full timing rather than attempting a targeted, incremental update.
- The flow implication. Set all variation data and grouping once, up front, before the first
update_timingorreport_timing(PT) call, so the full-update cost is paid exactly once. - The anti-pattern to avoid. Interleaving
read_ocvmorset_aocvm_table_groupcalls between reporting commands forces a repeated full update every time - the same class of mistake as running a global parasitic re-scaling in the middle of a report loop. - If iteration is genuinely required. Tuning the derate on a reused block might mean deliberately repeating this step - if so, expect a full-update cost each time and either script around it or do the iteration in a dedicated setup phase, not mixed into signoff reporting.
- The general principle. Anything that changes derating broadly is a full-update operation by nature; plan the script so those land at deliberate checkpoints, not scattered through a report loop.
Common Mistake
- Calling
set_aocvm_table_groupon a hierarchical cell inside a loop that also callsreport_timingafter each change, paying for a full update on every single iteration. - Assuming variation setup is cheap to adjust "on the fly" the way a single exception edit is, when a derate-table change has design-wide reach, not point-to-point reach.
- Cost: a signoff script whose runtime scales with the number of table-group edits instead of running once, turning a job that should take one full update into several.
Follow-up Question & Model Response
If a script must tune the AOCV table group on one reused IP block across five different instantiation contexts, what's the least wasteful way to structure that, given that each change forces a full update?
Candidate Model Response: The least wasteful structure is to batch all five set_aocvm_table_group assignments together, one per context, before running a single update_timing and a single round of reports - rather than alternating a table-group change with a report call five separate times. If the five contexts genuinely need to be evaluated and compared one at a time, accept that each comparison costs one full update and budget the runtime accordingly, rather than trying to avoid it through incremental tricks that the tool doesn't support for this kind of change. The only real lever is reducing how many separate full updates the workflow triggers, not making any individual update itself faster.
Practical Example
A design instantiates the same memory-controller IP in three power domains, each needing a different AOCV table group tuned for its local voltage. A script that calls set_aocvm_table_group for one instance, immediately runs report_timing, then repeats for the next two instances pays for three separate full-design updates, each taking around 8 minutes on a 2-million-instance design - 24 minutes total. Restructuring the script to set all three set_aocvm_table_group assignments first, then calling update_timing once followed by three separate report_timing calls, drops the total to one 9-minute full update plus near-instant reporting.
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.
Offline PDF Bundle
Want all 1109 questions offline?
Get the complete 4-book PDF bundle (PnR, STA, MMMC, Low Power) with a clickable table of contents - no ads, no internet needed.

Continue practising