之前说multisource时 (Multi-Source Clock Tree Synthesis (MSCTS)简介),挖过要整理CCD的坑,现在填坑。理解的比较浅请指正~
根据字面意思可知CCD 技术包含两层含义:
1,CUS: useful skew computation,通过调整到各个sinks 的latency来达到最优的WNS/TNS
2,NPO: data-path opt,优化data path提高timing picture,便于更好的利用useful skew
几个关键的参数与设置:
1,Primary corner: 所有corners 的代表,一般指定的是最差的corner,该corner 下的worst cell/wire delay across all the corners
2,Prepone &Postpone value:指的是往前推和往后推的skew 值,一般会使用ccd.max_prepone & ccd.max_postpone来指定(相当于useful skew limits);primary corner不会超过设定的limits,同时非primary corners会根据实际场景调整对应的limits (scalingFactor <=1),如下图所示:

3,分别针对setup/hold设置effort : ccd.timing_effort & ccd.hold_control_effort,这两种一般是优化TNS为主
4,优化setup 的WNS(应用于clock_opt & route_opt): ccd_fmax_optimization_effort
5,针对某些pins 设置limits:
set attribute [get_pins *] ccd_max_prepone/ccd_min_preponr 0.1
6,不让某些pins使用CCD opt 引擎:
This app option is used to exclude the sink pins with attribute ccd_respect_cts_fixed_balance_pin during CCD opt and the tool will not adjust the latencies of these pins
ccd_respect_cts_fixed_balance_pin -value [false|true|upstream]
set_attribute [get_pins *] ccd_respect_cts_fixed_balance_pin true
7,CCD skewing on I/Os

8,不对某个path group使用CCD OPT,或者不对某个scn使用

ccd.ignore.scenarios
9,Target CCD :

通过哪些方法可以得到skew值?
1,before_cts之前使用report_timing
2,做过时钟之后使用report_clock_balance_points
3,一般log中都会有显示,如果是user自己设置的会体现在 -delay 后面,如果是工具自行derived的会体现在-offset 后面。
eg: set_clock_balance_points -balances xx -delay 0.300 -offset 0.010
以FC为例,CCD何时被唤起?
default 情况下,inital opt 一般会进行三轮CCD,先low effort 然后medium 最后是high effort,每一轮都是先进行CCD然后进行NPO。
final opt 一般会有两轮CCD,先medium然后high,同样是先进行CCD然后进行NPO。
如何debug CCD?:
1,使用report_ccd_timing

2,get_clock_tree_pins

