What is the difference between 'union' and 'every-group' TNS computation in report_global_timing, and why does this matter for DMSA (multi-scenario) results?
From PDVerse STA Mentor Guide, part of the pdVerse Mentor Guide
Short Answer
Total negative slack (TNS) sums up how much every violating endpoint is behind schedule. In union mode (the default), each endpoint contributes only its single worst negative slack value to the total, even if it belongs to more than one path group or scenario. In every-group mode, an endpoint contributes separately for every path group it is negative in, so the same physical flop can be counted more than once. The tool selects the mode with the timing_report_union_tns variable, and the choice changes the reported TNS magnitude significantly once distributed multi-scenario analysis (DMSA) combines several scenarios together.
Technical Explanation
- TNS is one of the standard signoff quality-of-results metrics reported by
report_qor(PT) andreport_global_timing(PT): it sums the magnitude of negative slack across all violating endpoints, giving a sense of how much total timing work remains, beyond just the single worst-path number (WNS, worst negative slack). - A single endpoint (a specific flop's data pin, for example) can appear in more than one path group โ for instance, if two different clocks both reach it, or if it is checked under more than one path group classification โ and can have negative slack in more than one of those groups simultaneously.
- Union TNS mode (default,
timing_report_union_tns= true) takes, for each endpoint, only the single worst negative slack value across every path group and scenario that endpoint appears in, and adds that one number into the total โ so each physical endpoint contributes at most once. - Every-group TNS mode (
timing_report_union_tns= false) instead adds up the negative slack separately for every path group in which that endpoint is negative โ the same endpoint contributes multiple times if it violates in multiple groups, since each group's violation is treated as a separate reportable failure. - In distributed multi-scenario analysis (DMSA), where many scenarios (mode/corner combinations) are analyzed and their results merged, both modes still operate per endpoint across all scenarios: union mode takes the single worst slack for that endpoint across every scenario and every group, while every-group mode sums the endpoint's negative slack in every group in every scenario where it is negative.
- Because every-group mode can count the same physical endpoint's violation multiple times, its TNS number is always greater than or equal to the union mode number for the same design and the same set of scenarios โ the gap grows with however many endpoints have negative slack in more than one group or scenario simultaneously.
- What breaks: comparing TNS numbers across two signoff runs, or across two different tool configurations, without confirming both used the same
timing_report_union_tnssetting produces a misleading trend โ an apparent TNS "improvement" between runs can simply be an artifact of switching from every-group to union mode, not real timing closure progress.
Common Mistake
The Trap: comparing a TNS number from one report against a TNS number from another without checking that both used the same union-tns setting.
- A design's TNS can look like it "improved" purely because a later report switched to union mode (the tool default) after an earlier report had explicitly set every-group mode, with no actual timing fix having occurred in between.
- Assuming union mode is always the "correct" or more meaningful number ignores that every-group mode is genuinely useful when the review specifically wants to know how many separate group-level violations exist, since union mode's endpoint-level collapsing can hide that an endpoint is actually failing in more than one path group at once.
Follow-up Question & Model Response
"If two DMSA signoff runs report very different TNS values for what should be nearly identical designs, what is the first configuration setting you would check before assuming a real regression?"
Candidate Model Response: I would check timing_report_union_tns first in both runs' setup scripts, since a mismatched setting alone can produce a large apparent difference in TNS with no real timing change behind it. I would also confirm both runs merged the same set of scenarios under DMSA, since a run missing a scenario, or including an extra one, changes which endpoints even have negative slack to sum in the first place, independent of the union-versus-every-group choice.
Practical Example
Worked case: two path groups exist at one endpoint: Group1 with -6 ns slack and Group2 with -4 ns slack at Endpoint1, and Group1 with -5 ns and Group2 with -8 ns at Endpoint2. With timing_report_union_tns false (every-group), TNS sums all four values: -(6+4+5+8) = -23, with 4 violating paths counted. With timing_report_union_tns true (union, the default), each endpoint contributes only its own worst value: Endpoint1's worst is -6, Endpoint2's worst is -8, giving TNS = -(6+8) = -14, with only 2 violating paths counted โ the same underlying violations, reported as a TNS more than 60 percent larger under every-group mode.
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