# Target skew
set_ccopt_property target_skew $vars(cts,target_skew)
# 1. CLOCK ROUTING RULES
create_route_type -name top -non_default_rule $vars(clock_ndr) -top_preferred_layer $vars(clock_layer,top_top) -bottom_preferred_layer $vars(clock_layer,top_bottom) \
-preferred_routing_layer_effort high
create_route_type -name trunk -non_default_rule $vars(clock_ndr) -top_preferred_layer $vars(clock_layer,trunk_top) -bottom_preferred_layer $vars(clock_layer,trunk_bottom) \
-preferred_routing_layer_effort high
create_route_type -name leaf -non_default_rule CLOCK_1W_2S -top_preferred_layer $vars(clock_layer,leaf_top) -bottom_preferred_layer $vars(clock_layer,leaf_bottom) \
-preferred_routing_layer_effort high
set_ccopt_property route_type -net_type top top
set_ccopt_property route_type -net_type leaf leaf
set_ccopt_property route_type -net_type trunk trunk
# 2. SET CCOPT_PROPERTIES:
# CLOCK CELL TYPE
set_ccopt_property inverter_cells $vars(cts,inverter)
set_ccopt_property buffer_cells $vars(cts,buffer)
set_ccopt_property clock_gating_cells $vars(cts,clockgating)
set_ccopt_property add_driver_cell $vars(cts,buffer)
setUsefulSkewMode -noBoundary true -useCells $vars(cts,inverter)
# TARGET MAX TRANSITION
set_ccopt_property target_max_trans -net_type top 150ps
set_ccopt_property target_max_trans -net_type trunk 150ps
set_ccopt_property target_max_trans -net_type leaf 110ps
# ETC CCOPT PROPERTIES FROM CDNS
set_ccopt_property use_inverters true
set_ccopt_property cell_density 0.80
set_ccopt_property routing_top_min_fanout 2000
set_ccopt_property extract_network_latency true
set_ccopt_property max_fanout 32
set_ccopt_property auto_limit_insertion_delay_factor 1.4 ; # e.g. 1.4
set_ccopt_property pro_can_move_datapath_insts true
set_ccopt_property pro_skew_safe_drv_buffering true;
set_ccopt_property post_conditioning_enable_drv_fixing_by_rebuffering true; # default false
set_ccopt_property post_conditioning_enable_routing_eco true; # default false
set_ccopt_property post_conditioning_enable_skew_fixing true; # default false
set_ccopt_property post_conditioning_enable_skew_fixing_by_rebuffering true; # default false
foreach ct [get_ccopt_clock_trees *] {
Puts " INFO >> setting max length constraints for clock tree : $ct"
set_ccopt_property max_source_to_sink_net_length -clock_tree $ct -net_type top 200um; # limit the top net length - confirmed value for this technology and library
set_ccopt_property max_source_to_sink_net_length -clock_tree $ct -net_type trunk 200um; # limit the trunk net length - confirmed value for this technology and library
set_ccopt_property max_source_to_sink_net_length -clock_tree $ct -net_type leaf 120um; # limit the leaf net length - confirmed value for this technology and library
}
# Extra log output
ccopt_internal_messages -on
# Speed up AAE
setAaeTmpFile -directory ./aae_tmp
# For early clock flow in place_opt
if { $vars(Early_clock_flow) == 1 } {
setOptMode -usefulSkewTNSPreCTS true
setVar LS_PLACEOPT::poEarlyClockFlowWNSOptSlackBandMultipler 4.0 ; # If you want more aggresive optimize, increase this value.
}
#3. create/source clock tree spec:
create_ccopt_clock_tree_spec -keep_all_sdc_clocks -filename ./ccopt.spec
source ./ccopt.spec
|