ExpertQuestion 284 of 111Source PDF page undefined

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 Reference DiagramWhat does the Buffer Adjust step in the early CCD-iSMSCTS flow actually do, and why is it needed specifically for SMSCTS-built clocks?
What does the Buffer Adjust step in the early CCD-iSMSCTS flow actually do, and why is it needed specifically for SMSCTS-built clocks?, illustrating the physical design concept.

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

ICC2set_app_options -name compile.flow.enable_ccd -value true

Enables CCD in the compile_fusion flow.

ICC2set_app_options -name cts.multisource.integrated_subtree_synthesis_early_ccd_support -value true

Must be retained through the entire flow, not toggled per-stage.

ICC2set_app_options -name cts.multisource.subtree_preprocess_prefer_inverters -value true

Uses 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

Dive into 14 comprehensive chapters covering netlist sanity, FinFET grids, macro placement, power grids, CTS, and timing budgeting.