What does the Buffer Adjust step in the early CCD-iSMSCTS flow actually do, and why is it needed specifically for SMSCTS-built clocks?
From PDVerse PnR Interview Handbook · pdVerse Mentor Guide
Short Answer
In the early CCD-iSMSCTS flow, CCD runs during initial_opto on iSMSCTS-synthesized clocks, generating level-friendly useful-skew offsets. The Buffer Adjust step (buffer_adjust), introduced in final_place before placement, adds or removes repeaters to physically match those useful-skew offsets -- because on an SMSCTS structure, an abstract latency offset has to be realized as actual repeater insertion/removal, not just a number applied post-hoc the way it might be on a simpler traditional tree.
Technical Explanation
- In the early CCD-iSMSCTS flow, CCD runs during initial_opto on iSMSCTS-synthesized clocks, generating SMSCTS-aware, level-friendly useful-skew offsets earlier than a traditional CCD flow would.
- The Buffer Adjust step (buffer_adjust) is introduced before final_place placement -- it adds or removes repeaters to physically match those useful-skew offsets.
- The reason this is needed specifically for SMSCTS clocks: on a structural multisource tree, an abstract latency offset has to be realized as actual repeater insertion/removal, not applied as a pure post-hoc timing number the way it might be on a simpler traditional tree.
- The early-CCD-support option (cts.multisource.integrated_subtree_synthesis_early_ccd_support) must be retained through the ENTIRE flow, from compile_fusion initial_opto all the way through clock_opt build_clock -- dropping it partway through breaks the chain of offset consistency this flow depends on.
Formula Or Decision Rule
Requires enabling compile.flow.enable_ccd, place_opt.flow.enable_ccd, compile.flow.enable_multisource_clock_trees, place_opt.flow.enable_multisource_clock_trees, and cts.multisource.integrated_subtree_synthesis_early_ccd_support -- ALL retained through the full flow from compile_fusion initial_opto through clock_opt build_clock.
What To Check
- Warning sign: useful-skew offsets computed during initial_opto don't seem to be reflected in the final built clock tree.
- Inspect: check whether cts.multisource.integrated_subtree_synthesis_early_ccd_support was actually retained through every subsequent stage, or dropped partway through the flow.
- Correct: re-enable it consistently from compile_fusion initial_opto through clock_opt build_clock and re-run, since a partial application breaks the offset chain.
Command Checks & Actions
set_app_options -name compile.flow.enable_ccd -value trueEnables CCD in the compile_fusion flow.
set_app_options -name cts.multisource.integrated_subtree_synthesis_early_ccd_support -value trueMust be retained through the entire flow, not toggled per-stage.
set_app_options -name cts.multisource.subtree_preprocess_prefer_inverters -value trueUses inverters as repeaters during Buffer Adjust.
Healthy, Suspicious & Hard-stop Results
- Expected: useful-skew offsets computed early in the flow are still reflected in the final built tree structure at clock_opt build_clock.
- Investigate: offsets computed during initial_opto don't match what's observed in the final tree -- check every stage in between for whether early-CCD-support was actually retained continuously.
- Stop: the early-CCD-iSMSCTS options are enabled inconsistently (on for some stages, off for others) across a single flow run -- that's not a supported partial configuration, per the documented continuity requirement.
Common Mistake
The Trap: Enabling the early CCD-iSMSCTS options for just one stage of the flow and then dropping them, when the option must be retained continuously from compile_fusion initial_opto through clock_opt build_clock.
What The Interviewer Is Testing
Whether you know this flow requires multiple options enabled TOGETHER and RETAINED CONTINUOUSLY, not a single flag you can toggle on for one stage only.
Practical Example
Debug Scenario: Useful-skew offsets computed during initial_opto for an SMSCTS-built clock don't appear reflected in the tree after clock_opt build_clock. Auditing the flow script, cts.multisource.integrated_subtree_synthesis_early_ccd_support was enabled for initial_opto but never re-confirmed for the later stages -- breaking the continuity this flow's offset chain depends on.
Physical Design & Planning Handbook
Master ASIC Physical Design Planning & Floorplanning
Dive into 14 comprehensive chapters covering netlist sanity, FinFET grids, macro placement, power grids, CTS, and timing budgeting.
Continue practising