Import
source ../scripts/icc_setup.tcl
sh rm -rf ORCA_TOP_LIB
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set ADDITIONAL_SEARCH_PATH [join "
../libraries/SAED32_2012-12-25/lib/stdcell_lvt/db_nldm
../libraries/SAED32_2012-12-25/lib/stdcell_hvt/db_nldm
../libraries/SAED32_2012-12-25/lib/sram_lp/db_nldm
../design_data
"]
set TARGET_LIBRARY_FILES [join "
saed32lvt_ss0p75vn40c.db
saed32lvt_ss0p95vn40c.db
saed32lvt_ulvl_ss0p95vn40c_i0p75v.db
saed32lvt_dlvl_ss0p75vn40c_i0p95v.db
saed32hvt_ss0p75vn40c.db
saed32hvt_ss0p95vn40c.db
saed32hvt_ulvl_ss0p95vn40c_i0p75v.db
saed32hvt_dlvl_ss0p75vn40c_i0p95v.db
saed32lvt_ff0p95vn40c.db
saed32lvt_ff1p16vn40c.db
saed32lvt_ulvl_ff1p16vn40c_i0p95v.db
saed32lvt_dlvl_ff0p95vn40c_i1p16v.db
saed32hvt_ff0p95vn40c.db
saed32hvt_ff1p16vn40c.db
saed32hvt_ulvl_ff1p16vn40c_i0p95v.db
saed32hvt_dlvl_ff0p95vn40c_i1p16v.db
saed32lvt_ff0p95v125c.db
saed32lvt_ff1p16v125c.db
saed32lvt_ulvl_ff1p16v125c_i0p95v.db
saed32lvt_dlvl_ff0p95v125c_i1p16v.db
saed32hvt_ff0p95v125c.db
saed32hvt_ff1p16v125c.db
saed32hvt_ulvl_ff1p16v125c_i0p95v.db
saed32hvt_dlvl_ff0p95v125c_i1p16v.db
saed32lvt_ss0p75v125c.db
saed32lvt_ss0p95v125c.db
saed32lvt_ulvl_ss0p95v125c_i0p75v.db
saed32lvt_dlvl_ss0p75v125c_i0p95v.db
saed32hvt_ss0p75v125c.db
saed32hvt_ss0p95v125c.db
saed32hvt_ulvl_ss0p95v125c_i0p75v.db
saed32hvt_dlvl_ss0p75v125c_i0p95v.db
"]
set ADDITIONAL_LINK_LIB_FILES [join "
saed32sramlp_ss0p75vn40c_i0p75v.db
saed32sramlp_ss0p95vn40c_i0p95v.db
saed32sramlp_ff0p95vn40c_i0p95v.db
saed32sramlp_ff1p16vn40c_i1p16v.db
saed32sramlp_ff0p95v125c_i0p95v.db
saed32sramlp_ff1p16v125c_i1p16v.db
saed32sramlp_ss0p75v125c_i0p75v.db
saed32sramlp_ss0p95v125c_i0p95v.db
"]
set MW_REFERENCE_CONTROL_FILE "" ;
set TECH_FILE "../libraries/SAED32_2012-12-25/tech/milkyway/saed32nm_1p9m_mw.tf" ;
set MAP_FILE "../libraries/SAED32_2012-12-25/tech/star_rc/saed32nm_tf_itf_tluplus.map"
;
set TLUPLUS_MAX_FILE "../libraries/SAED32_2012-12-
25/tech/star_rc/saed32nm_1p9m_Cmax.tluplus" ;
set TLUPLUS_MIN_FILE "../libraries/SAED32_2012-12-
25/tech/star_rc/saed32nm_1p9m_Cmin.tluplus" ;
set_app_var search_path "$ADDITIONAL_SEARCH_PATH"
set_app_var target_library "$TARGET_LIBRARY_FILES"
set_app_var link_library "* $TARGET_LIBRARY_FILES $ADDITIONAL_LINK_LIB_FILES"
set_tlu_plus_files -max_tluplus $TLUPLUS_MAX_FILE -min_tluplus $TLUPLUS_MIN_FILE -tech2itf_map
$MAP_FILE
create_mw_lib \
-tech ../libraries/SAED32_2012-12-25/tech/milkyway/saed32nm_1p9m_mw.tf \
-bus_naming_style {[%d]} \
-mw_reference_library "../libraries/SAED32_2012-12-25/lib/stdcell_lvt/milkyway/saed32nm_lvt_1p9m
../libraries/SAED32_2012-12-25/lib/stdcell_hvt/milkyway/saed32nm_hvt_1p9m
../libraries/SAED32_2012-12-25/lib/sram_lp/milkyway/saed32sram_lp" \
ORCA_TOP_LIB
open_mw_lib ORCA_TOP_LIB
suppress_message "UID-3"
import_designs ../design_data/ORCA_TOP.ddc -format ddc -top ORCA_TOP -cel ORCA_TOP
unsuppress_message "UID-3"
#-- load_upf ../design_data/ORCA_TOP.upf
if {[get_scan_chain] != 0} {
redirect -file ../reports/check_scan_chain.rpt {check_scan_chain}
redirect -file ../reports/report_scan_chain.rpt {report_scan_chain}
remove_sdc
remove_scenario -all
suppress_message UID-401
create_scenario func_worst
read_sdc ../design_data/ORCA_TOP_func_worst.sdc
set_tlu_plus_files \
-max_tluplus ../libraries/SAED32_2012-12-25/tech/star_rc/saed32nm_1p9m_Cmax.tluplus \
-tech2itf_map ../libraries/SAED32_2012-12-25/tech/star_rc/saed32nm_tf_itf_tluplus.map
set_timing_derate -early 0.95
set_switching_activity -toggle_rate 0.07 [remove_from_collection [all_inputs] [get_ports *clk]]
set_app_var power_default_toggle_rate 0.005
set_scenario_options -setup true -hold false -leakage_power false -dynamic_power true
create_scenario test_worst
read_sdc ../design_data/ORCA_TOP_test_worst.sdc
set_tlu_plus_files \
-max_tluplus ../libraries/SAED32_2012-12-25/tech/star_rc/saed32nm_1p9m_Cmax.tluplus \
-tech2itf_map ../libraries/SAED32_2012-12-25/tech/star_rc/saed32nm_tf_itf_tluplus.map
set_timing_derate -early 0.95
set_scenario_options -setup true -hold false -leakage_power false
create_scenario func_best
read_sdc ../design_data/ORCA_TOP_func_best.sdc
set_tlu_plus_files \
-max_tluplus ../libraries/SAED32_2012-12-25/tech/star_rc/saed32nm_1p9m_Cmin.tluplus \
-tech2itf_map ../libraries/SAED32_2012-12-25/tech/star_rc/saed32nm_tf_itf_tluplus.map
set_timing_derate -late 1.05
set_scenario_options -setup false -hold true -leakage_power false
create_scenario test_best
read_sdc ../design_data/ORCA_TOP_test_best.sdc
set_tlu_plus_files \
-max_tluplus ../libraries/SAED32_2012-12-25/tech/star_rc/saed32nm_1p9m_Cmin.tluplus \
-tech2itf_map ../libraries/SAED32_2012-12-25/tech/star_rc/saed32nm_tf_itf_tluplus.map
set_timing_derate -late 1.05
set_scenario_options -setup false -hold true -leakage_power false
create_scenario leak
set_operating_conditions ff0p95v125c -analysis_type on_chip_variation
read_sdc ../design_data/ORCA_TOP_clocks_only.sdc
set_voltage 0 -object_list VSS
set_voltage 0.95 -object_list VDD
set_voltage 1.16 -object_list VDDH
set_tlu_plus_files \
-max_tluplus ../libraries/SAED32_2012-12-25/tech/star_rc/saed32nm_1p9m_Cmax.tluplus \
-tech2itf_map ../libraries/SAED32_2012-12-25/tech/star_rc/saed32nm_tf_itf_tluplus.map
set_scenario_options -setup false -hold false -leakage_power true
current_scenario func_worst
set cur_scenario [current_scenario]
foreach scenario [all_active_scenarios] {
current_scenario $scenario
remove_propagated_clock -all
current_scenario $cur_scenario
derive_pg_connection -create_net
read_def -verbose -no_incremental ../design_data/ORCA_TOP.def
#-- add_end_cap -respect_blockage -lib_cell $ICC_H_CAP_CEL
#-- add_end_cap -respect_blockage -lib_cell $ICC_H_CAP_CEL -vertical_cells $ICC_V_CAP_CEL -
fill_corner
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
if {[all_macro_cells] != "" } {
set_attribute [all_macro_cells] is_fixed true
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
remove_pnet_options
set_pnet_options -partial M2 -see_object {all_types}
report_pnet_options
set_app_var enable_recovery_removal_arcs true
report_power_domain > ../reports/report_power_domain.rpt
set bbox [join [get_attribute [get_voltage_area DEFAULT_VA] bbox]]
set lly [lindex $bbox 1]
set urx [lindex $bbox 2]
create_voltage_area -coordinate [list [expr $urx - 420.28] $lly $urx [expr $lly + 180.576]] -power_domain
PD_RISC_CORE \
-cycle_color -guard_band_x 10 -guard_band_y 10
#-- if {$PD1 != "" } {create_voltage_area -coordinate $VA1_COORDINATES -guard_band_x 1 -
guard_band_y 1 -power_domain $PD1}
#-- if {$PD2 != "" } {create_voltage_area -coordinate $VA2_COORDINATES -guard_band_x 1 -
guard_band_y 1 -power_domain $PD2}
#-- if {$PD3 != "" } {create_voltage_area -coordinate $VA3_COORDINATES -guard_band_x 1 -
guard_band_y 1 -power_domain $PD3}
#-- if {$PD4 != "" } {create_voltage_area -coordinate $VA4_COORDINATES -guard_band_x 1 -
guard_band_y 1 -power_domain $PD4}
#-- source -echo ../scripts/create_va_dp.tcl
report_voltage_area -all > ../reports/report_voltage_area.rpt
#-- set_always_on_strategy -object_list $ICC_AO_STRATEGY_SINGLE_POWER_POWER_DOMAIN_LIST -
cell_type "single_power"
derive_pg_connection
#-- derive_pg_connection -tie
redirect -file ../reports/check_mv_design.rpt {check_mv_design -verbose}
redirect -file ../reports/ao_nets.rpt {get_always_on_logic -nets}
redirect -file ../reports/ao_cells.rpt {get_always_on_logic -cells}
redirect -file ../reports/ao_all.rpt {get_always_on_logic}
redirect -file ../reports/ao_all_boundary.rpt {get_always_on_logic -boundary}
save_upf ../results/init_design.upf
save_mw_cel -as init_design
redirect -tee -file ../results/design_physical.rpt {report_design_physical -all -verbose}
set_zero_interconnect_delay_mode true
redirect -tee -file ../reports/qor.tcl {report_qor}
set_zero_interconnect_delay_mode false
set_check_library_options -all
redirect -file ../reports/check_library.rpt {check_library}
8*******************************
source -echo ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from init_design -to flat_dp
open_mw_cel flat_dp
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
remove_pnet_options
set_pnet_options -partial M2 -see_object {all_types}
report_pnet_options > ../reports/dp_pnet_options.rpt
set_app_var enable_recovery_removal_arcs true
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
set_ideal_network [all_fanout -flat -clock_tree]
check_design -summary > ../reports/dp.check_design.rpt
check_timing > ../reports/dp.check_timing.rpt
printvar * > ../reports/all_variables.rpt
report_net_fanout -nosplit -threshold 50 > ../results/dp.high_fanout.rpt
set_attribute [all_macro_cells] is_fixed false
set_fp_placement_strategy -macro_orientation automatic
set_fp_placement_strategy -auto_grouping high
set_fp_placement_strategy -macros_on_edge on
set_fp_placement_strategy -sliver_size 10
set_fp_placement_strategy -congestion_effort low
set_fp_placement_strategy -IO_net_weight 1
set_fp_placement_strategy -plan_group_interface_net_weight 1
set_fp_placement_strategy -legalizer_effort high
set_fp_placement_strategy -spread_spare_cells on
set hf_nets [all_high_fanout -nets -threshold 100]
set_load 0 -subtract_pin_load $hf_nets
set_ideal_network -no_propagate $hf_nets
create_fp_placement -effort high
create_fp_placement -effort high -no_hierarchy_gravity
create_fp_placement -effort high -no_legalize
create_fp_placement -effort high -congestion_driven
create_fp_placement -effort high -timing_driven
#-- create_fp_placement -effort high -incremental off -plan_groups $vfp_plan_groups
#-- create_fp_placement -effort high -incremental off -voltage_areas $vfp_voltage_areas
route_zrt_global -exploration true
set_attribute [all_macro_cells] is_fixed true
synthesize_fp_rail -power_budget 1000 -voltage_supply 1.5 -output_directory ../pna_output -nets {VDD
VSS} -synthesize_power_plan -target_voltage_drop 250 -synthesize_power_pad
commit_fp_rail
create_fp_virtual_pad -load_file ../pna_output/strap_end.VDD.vpad
create_fp_virtual_pad -load_file ../pna_output/strap_end.VSS.vpad
analyze_fp_rail -power_budget 1000 -voltage_supply 1.5 -output_directory ../pna_output -nets {VDD
VSS}
extract_rc
report_timing -nosplit -cap -tran -input -net -delay max > ../reports/dp_report_timing_max_1.rpt
set compile_instance_name_prefix dp_ipo
set_ahfs_options -remove_effort high
set_ahfs_options -hf_threshold 100
optimize_fp_timing -effort medium -fix_design_rule
route_zrt_global -exploration true
remove_route_by_type -signal_detail_route -clock_tie_off -pg_tie_off
extract_rc
report_timing -nosplit -cap -tran -input -net -delay max > ../reports/dp_report_timing_max_2.rpt
save_mw_cel -overwrite
write_floorplan -create_terminal -create_bound -row -track -preroute -placement {io hard_macro
soft_macro} ../results/flat_dp_dump.fp
write_floorplan -preroute ../results/flat_dp_dump.route
write_floorplan -all ../results/flat_dp_dump.complete_floorplan
write_pin_pad_physical_constraints -cel [get_object_name [current_mw_cel]] -constraint_type
side_order ../results/flat_dp_dump.tdf -io_only
write_def -version 5.7 -rows_tracks_gcells -macro -pins -blockages -specialnets -vias -regions_groups -
verbose -output ../results/flat_dp_dump.DCT.def
write_floorplan -create_terminal -create_bound -row -preroute -placement {io hard_macro soft_macro}
../results/flat_dp_dump.DCT.fp
save_mw_cel -as flat_dp
source ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from init_design -to place_opt_cel
open_mw_cel place_opt_cel
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
remove_pnet_options
set_pnet_options -partial M2 -see_object {all_types}
report_pnet_options
set_app_var enable_recovery_removal_arcs true
redirect -var x {report_routing_rules ../reports/routing_rules.rpt}
define_routing_rule clock_double_spacing -default_reference_rule -multiplier_spacing 2
set cur_scenario [current_scenario]
set cur_active_scenarios [all_active_scenarios]
set_active_scenarios -all
foreach scenario [all_active_scenarios] {
current_scenario $scenario
set_ideal_network [all_fanout -flat -clock_tree ]
set_active_scenarios $cur_active_scenarios
current_scenario $cur_scenario
set_app_var compile_instance_name_prefix icc_place
check_mv_design -verbose
set_active_scenarios [lminus [all_scenarios] [get_scenarios -setup false -hold false -cts_mode true]]
#-- magnet_placement -exclude_buffers -logical_level 2 [get_cells "INST_RAM1 INST_RAM2"]
#-- create_rp_group Lachd_Result_reg -design ORCA -columns 1 -rows 8 -utilization 1.000000
#add_to_rp_group ORCA::Lachd_Result_reg -leaf
I_ORCA_TOP/I_RISC_CORE/I_ALU/Lachd_Result_reg_0_ -column 0 -row 0
#add_to_rp_group ORCA::Lachd_Result_reg -leaf
I_ORCA_TOP/I_RISC_CORE/I_ALU/Lachd_Result_reg_1_ -column 0 -row 1
#add_to_rp_group ORCA::Lachd_Result_reg -leaf
I_ORCA_TOP/I_RISC_CORE/I_ALU/Lachd_Result_reg_2_ -column 0 -row 2
#add_to_rp_group ORCA::Lachd_Result_reg -leaf
I_ORCA_TOP/I_RISC_CORE/I_ALU/Lachd_Result_reg_3_ -column 0 -row 3
#add_to_rp_group ORCA::Lachd_Result_reg -leaf
I_ORCA_TOP/I_RISC_CORE/I_ALU/Lachd_Result_reg_4_ -column 0 -row 4
#add_to_rp_group ORCA::Lachd_Result_reg -leaf
I_ORCA_TOP/I_RISC_CORE/I_ALU/Lachd_Result_reg_5_ -column 0 -row 5
#add_to_rp_group ORCA::Lachd_Result_reg -leaf
I_ORCA_TOP/I_RISC_CORE/I_ALU/Lachd_Result_reg_6_ -column 0 -row 6
#add_to_rp_group ORCA::Lachd_Result_reg -leaf
I_ORCA_TOP/I_RISC_CORE/I_ALU/Lachd_Result_reg_7_ -column 0 -row 7
set_total_power_strategy -effort none
report_total_power_strategy
set_app_var icc_preroute_tradeoff_timing_for_power_area FALSE
set_optimization_strategy -tns_effort MEDIUM
set_place_opt_strategy -layer_optimization TRUE -layer_optimization_effort MEDIUM -consider_routing
FALSE
report_place_opt_strategy
place_opt -area_recovery -effort medium
place_opt -area_recovery -effort medium -congestion
place_opt -area_recovery -effort medium -optimize_dft
place_opt -area_recovery -effort medium -power
redirect -file ../reports/place_opt.mv {check_mv_design -verbose}
derive_pg_connection -verbose -tie
all_tieoff_cells
redirect -file ../reports/place_opt.power {report_power -nosplit -scenario [all_active_scenarios]}
save_mw_cel -as place_opt_cel
redirect -file ../reports/place_opt.placement_utilization.rpt {report_placement_utilization -verbose}
redirect -tee -file ../reports/place_opt.qor {report_qor}
redirect -tee -file ../reports/place_opt.qor -append {report_qor -summary}
redirect -tee -file ../reports/place_opt.qor -append {report_timing_histogram -range_maximum 0 -
scenario [all_active_scenarios]}
redirect -tee -file ../reports/place_opt.qor -append {report_timing_histogram -range_minimum 0 -
scenario [all_active_scenarios]}
redirect -file ../reports/place_opt.con {report_constraints}
source -echo ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from place_opt_cel -to clock_opt_cts_cel
open_mw_cel clock_opt_cts_cel
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
source -echo ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from place_opt_cel -to clock_opt_cts_cel
open_mw_cel clock_opt_cts_cel
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
remove_pnet_options
set_pnet_options -partial M2 -see_object {all_types}
report_pnet_options
set_app_var enable_recovery_removal_arcs true
define_routing_rule rule_clock_double_spacing -default_reference_rule -multiplier_spacing 2
set_clock_tree_options -routing_rule rule_clock_double_spacing -use_default_routing_for_sinks 1
set_app_var cts_instance_name_prefix CTS
check_mv_design -verbose
set prects_cur_scenario [current_scenario]
set prects_active_scenarios [all_active_scenarios]
set_active_scenarios [all_scenarios]
set cur_scenario [current_scenario]
current_scenario [lindex [get_scenarios -cts_mode true] 0]
current_scenario $cur_scenario
clock_opt -only_cts -no_clock_route
redirect -file ../reports/clock_opt_cts.mv {check_mv_design -verbose}
set_app_var timing_remove_clock_reconvergence_pessimism true
set cur_active_scenarios [all_active_scenarios]
set_active_scenarios -all
foreach scenario [all_active_scenarios] {
remove_ideal_network [all_fanout -flat -clock_tree]
}
set_active_scenarios $cur_active_scenarios
foreach scenario [all_active_scenarios] {
current_scenario $scenario
set_fix_hold [all_clocks]
current_scenario $prects_cur_scenario
redirect -file ../reports/clock_opt.clock_timing {report_clock_timing -nosplit -type skew }
redirect -tee -file ../reports/clock_opt.max.clock_tree {report_clock_tree -nosplit -summary }
if {[llength [get_scenarios -active true -hold true]]} {
redirect -tee -file ../reports/clock_opt.min.clock_tree {report_clock_tree -nosplit -summary -scenarios
[get_scenarios -active true -hold true]}
set_active_scenarios $prects_active_scenarios
unset prects_active_scenarios
redirect -file ../reports/clock_opt.max.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay max}
redirect -file ../reports/clock_opt.min.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay min}
redirect -tee -file ../reports/clock_opt.qor {report_qor}
redirect -tee -file ../reports/clock_opt.qor -append {report_qor -summary}
redirect -file ../reports/clock_opt.con {report_constraints}
save_mw_cel -as clock_opt_cts_cel
redirect -file ../reports/clock_opt.placement_utilization.rpt {report_placement_utilization -verbose}
redirect -file ../reports/clock_opt.qor_snapshot.rpt {report_qor_snapshot -no_display}
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
remove_pnet_options
set_pnet_options -partial M2 -see_object {all_types}
report_pnet_options
set_app_var enable_recovery_removal_arcs true
define_routing_rule rule_clock_double_spacing -default_reference_rule -multiplier_spacing 2
set_clock_tree_options -routing_rule rule_clock_double_spacing -use_default_routing_for_sinks 1
set_app_var cts_instance_name_prefix CTS
check_mv_design -verbose
set prects_cur_scenario [current_scenario]
set prects_active_scenarios [all_active_scenarios]
set_active_scenarios [all_scenarios]
set cur_scenario [current_scenario]
current_scenario [lindex [get_scenarios -cts_mode true] 0]
current_scenario $cur_scenario
clock_opt -only_cts -no_clock_route
redirect -file ../reports/clock_opt_cts.mv {check_mv_design -verbose}
set_app_var timing_remove_clock_reconvergence_pessimism true
set cur_active_scenarios [all_active_scenarios]
set_active_scenarios -all
foreach scenario [all_active_scenarios] {
remove_ideal_network [all_fanout -flat -clock_tree]
set_active_scenarios $cur_active_scenarios
foreach scenario [all_active_scenarios] {
current_scenario $scenario
set_fix_hold [all_clocks]
current_scenario $prects_cur_scenario
redirect -file ../reports/clock_opt.clock_timing {report_clock_timing -nosplit -type skew }
redirect -tee -file ../reports/clock_opt.max.clock_tree {report_clock_tree -nosplit -summary }
if {[llength [get_scenarios -active true -hold true]]} {
redirect -tee -file ../reports/clock_opt.min.clock_tree {report_clock_tree -nosplit -summary -scenarios
[get_scenarios -active true -hold true]}
}
set_active_scenarios $prects_active_scenarios
unset prects_active_scenarios
redirect -file ../reports/clock_opt.max.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay max}
redirect -file ../reports/clock_opt.min.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay min}
redirect -tee -file ../reports/clock_opt.qor {report_qor}
redirect -tee -file ../reports/clock_opt.qor -append {report_qor -summary}
redirect -file ../reports/clock_opt.con {report_constraints}
save_mw_cel -as clock_opt_cts_cel
redirect -file ../reports/clock_opt.placement_utilization.rpt {report_placement_utilization -verbose}
redirect -file ../reports/clock_opt.qor_snapshot.rpt {report_qor_snapshot -no_display}
source -echo ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from clock_opt_cts_cel -to clock_opt_psyn_cel
open_mw_cel clock_opt_psyn_cel
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
if {[all_macro_cells] != "" } {
set_attribute [all_macro_cells] is_fixed true
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
set_pnet_options -partial M2 -see_object {all_types}
set_app_var enable_recovery_removal_arcs true
define_routing_rule rule_clock_double_spacing -default_reference_rule -multiplier_spacing 2
set_clock_tree_options -routing_rule rule_clock_double_spacing -use_default_routing_for_sinks 1
set_app_var cts_instance_name_prefix CTS
set_app_var timing_remove_clock_reconvergence_pessimism true
set_app_var compile_instance_name_prefix icc_clock
source -echo ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from place_opt_cel -to clock_opt_cts_cel
open_mw_cel clock_opt_cts_cel
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
source -echo ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from place_opt_cel -to clock_opt_cts_cel
open_mw_cel clock_opt_cts_cel
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
remove_pnet_options
set_pnet_options -partial M2 -see_object {all_types}
report_pnet_options
set_app_var enable_recovery_removal_arcs true
define_routing_rule rule_clock_double_spacing -default_reference_rule -multiplier_spacing 2
set_clock_tree_options -routing_rule rule_clock_double_spacing -use_default_routing_for_sinks 1
set_app_var cts_instance_name_prefix CTS
check_mv_design -verbose
set prects_cur_scenario [current_scenario]
set prects_active_scenarios [all_active_scenarios]
set_active_scenarios [all_scenarios]
set cur_scenario [current_scenario]
current_scenario [lindex [get_scenarios -cts_mode true] 0]
current_scenario $cur_scenario
clock_opt -only_cts -no_clock_route
redirect -file ../reports/clock_opt_cts.mv {check_mv_design -verbose}
set_app_var timing_remove_clock_reconvergence_pessimism true
set cur_active_scenarios [all_active_scenarios]
set_active_scenarios -all
foreach scenario [all_active_scenarios] {
remove_ideal_network [all_fanout -flat -clock_tree]
set_active_scenarios $cur_active_scenarios
foreach scenario [all_active_scenarios] {
current_scenario $scenario
set_fix_hold [all_clocks]
current_scenario $prects_cur_scenario
redirect -file ../reports/clock_opt.clock_timing {report_clock_timing -nosplit -type skew }
redirect -tee -file ../reports/clock_opt.max.clock_tree {report_clock_tree -nosplit -summary }
if {[llength [get_scenarios -active true -hold true]]} {
redirect -tee -file ../reports/clock_opt.min.clock_tree {report_clock_tree -nosplit -summary -scenarios
[get_scenarios -active true -hold true]}
set_active_scenarios $prects_active_scenarios
unset prects_active_scenarios
redirect -file ../reports/clock_opt.max.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay max}
redirect -file ../reports/clock_opt.min.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay min}
redirect -tee -file ../reports/clock_opt.qor {report_qor}
redirect -tee -file ../reports/clock_opt.qor -append {report_qor -summary}
redirect -file ../reports/clock_opt.con {report_constraints}
save_mw_cel -as clock_opt_cts_cel
redirect -file ../reports/clock_opt.placement_utilization.rpt {report_placement_utilization -verbose}
redirect -file ../reports/clock_opt.qor_snapshot.rpt {report_qor_snapshot -no_display}
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
remove_pnet_options
set_pnet_options -partial M2 -see_object {all_types}
report_pnet_options
set_app_var enable_recovery_removal_arcs true
define_routing_rule rule_clock_double_spacing -default_reference_rule -multiplier_spacing 2
set_clock_tree_options -routing_rule rule_clock_double_spacing -use_default_routing_for_sinks 1
set_app_var cts_instance_name_prefix CTS
check_mv_design -verbose
set prects_cur_scenario [current_scenario]
set prects_active_scenarios [all_active_scenarios]
set_active_scenarios [all_scenarios]
set cur_scenario [current_scenario]
current_scenario [lindex [get_scenarios -cts_mode true] 0]
current_scenario $cur_scenario
clock_opt -only_cts -no_clock_route
redirect -file ../reports/clock_opt_cts.mv {check_mv_design -verbose}
set_app_var timing_remove_clock_reconvergence_pessimism true
set cur_active_scenarios [all_active_scenarios]
set_active_scenarios -all
foreach scenario [all_active_scenarios] {
remove_ideal_network [all_fanout -flat -clock_tree]
set_active_scenarios $cur_active_scenarios
foreach scenario [all_active_scenarios] {
current_scenario $scenario
set_fix_hold [all_clocks]
current_scenario $prects_cur_scenario
redirect -file ../reports/clock_opt.clock_timing {report_clock_timing -nosplit -type skew }
redirect -tee -file ../reports/clock_opt.max.clock_tree {report_clock_tree -nosplit -summary }
if {[llength [get_scenarios -active true -hold true]]} {
redirect -tee -file ../reports/clock_opt.min.clock_tree {report_clock_tree -nosplit -summary -scenarios
[get_scenarios -active true -hold true]}
set_active_scenarios $prects_active_scenarios
unset prects_active_scenarios
redirect -file ../reports/clock_opt.max.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay max}
redirect -file ../reports/clock_opt.min.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay min}
redirect -tee -file ../reports/clock_opt.qor {report_qor}
redirect -tee -file ../reports/clock_opt.qor -append {report_qor -summary}
redirect -file ../reports/clock_opt.con {report_constraints}
save_mw_cel -as clock_opt_cts_cel
redirect -file ../reports/clock_opt.placement_utilization.rpt {report_placement_utilization -verbose}
redirect -file ../reports/clock_opt.qor_snapshot.rpt {report_qor_snapshot -no_display}
set_active_scenarios [lminus [all_scenarios] [get_scenarios -setup false -hold false -cts_mode true]]
set_optimization_strategy -tns_effort medium
extract_rc
clock_opt -no_clock_route -only_psyn -area_recovery
clock_opt -congestion
clock_opt -continue_on_missing_scandef
clock_opt -power
route_zrt_group -all_clock_nets -reuse_existing_global_route true -stop_after_global_route true
#remove_attribute $ICC_PORT_PROTECTION_DIODE dont_use
#set ports [remove_from_collection [get_ports * -filter "direction==in"] [get_ports
$ICC_PORT_PROTECTION_DIODE_EXCLUDE_PORTS]]
#insert_port_protection_diodes -prefix port_protection_diode -diode_cell [get_lib_cells
$ICC_PORT_PROTECTION_DIODE] -port $ports -ignore_dont_touch
#legalize_placement
redirect -file ../reports/clock_opt_psyn.mv {check_mv_design -verbose}
save_mw_cel -as clock_opt_psyn_cel
redirect -tee -file ../reports/clock_opt_psyn.qor {report_qor}
redirect -tee -file ../reports/clock_opt_psyn.qor -append {report_qor -summary}
redirect -tee -file ../reports/clock_opt_psyn.qor -append {report_timing_histogram -range_maximum 0 -
scenario [all_active_scenarios]}
redirect -tee -file ../reports/clock_opt_psyn.qor -append {report_timing_histogram -range_minimum 0 -
scenario [all_active_scenarios]}
redirect -file ../reports/clock_opt_psyn.con {report_constraints}
if {[llength [get_scenarios -active true -setup true]]} {
redirect -file ../reports/clock_opt_psyn.clock_timing {report_clock_timing -nosplit -type skew -scenarios
[get_scenarios -active true -setup true]} ;
redirect -tee -file ../reports/clock_opt_psyn.max.clock_tree {report_clock_tree -nosplit -summary -
scenarios [get_scenarios -active true -setup true]}
if {[llength [get_scenarios -active true -hold true]]} {
redirect -tee -file ../reports/clock_opt_psyn.min.clock_tree {report_clock_tree -nosplit -
operating_condition min -summary -scenarios [get_scenarios -active true -hold true]}
redirect -file ../reports/clock_opt_psyn.max.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay max}
redirect -file ../reports/clock_opt_psyn.min.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay min}
redirect -file ../reports/clock_opt_psyn.power {report_power -nosplit -scenario [all_active_scenarios]}
redirect -file ../reports/clock_opt_psyn.placement_utilization.rpt {report_placement_utilization -
verbose}
redirect -file ../reports/clock_opt_psyn.qor_snapshot.rpt {report_qor_snapshot -no_display}
source -echo ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from clock_opt_psyn_cel -to clock_opt_route_cel
open_mw_cel clock_opt_route_cel
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
if {[all_macro_cells] != "" } {
set_attribute [all_macro_cells] is_fixed true
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
set_pnet_options -partial M2 -see_object {all_types}
set_app_var enable_recovery_removal_arcs true
#-- define_routing_rule rule_clock_double_spacing -default_reference_rule -multiplier_spacing 2
set_clock_tree_options -routing_rule rule_clock_double_spacing -use_default_routing_for_sinks 1
set_app_var cts_instance_name_prefix CTS
set_app_var timing_remove_clock_reconvergence_pessimism true
set_si_options -delta_delay true \
-route_xtalk_prevention true \
-route_xtalk_prevention_threshold 0.25 \
-analysis_effort medium
set_si_options -min_delta_delay true
set_app_var routeopt_skip_report_qor true
set_optimization_strategy -high_resistance false
#-- set_route_zrt_common_options -eco_route_concurrent_redundant_via_mode reserve_space
#-- set_route_zrt_common_options -eco_route_concurrent_redundant_via_effort_level low ;# default
is low
set_route_zrt_detail_options -antenna false
set_si_options -delta_delay false -min_delta_delay false -route_xtalk_prevention false
set_active_scenarios [lminus [all_scenarios] [get_scenarios -setup false -hold false -cts_mode true]]
route_zrt_group -all_clock_nets -reuse_existing_global_route true
redirect -file ../reports/clock_opt_route.mv {check_mv_design -verbose}
save_mw_cel -as clock_opt_route_cel
if {[llength [get_scenarios -active true -setup true]]} {source -echo ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from place_opt_cel -to clock_opt_cts_cel
open_mw_cel clock_opt_cts_cel
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
}
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
remove_pnet_options
set_pnet_options -partial M2 -see_object {all_types}
report_pnet_options
set_app_var enable_recovery_removal_arcs true
define_routing_rule rule_clock_double_spacing -default_reference_rule -multiplier_spacing 2
set_clock_tree_options -routing_rule rule_clock_double_spacing -use_default_routing_for_sinks 1
set_app_var cts_instance_name_prefix CTS
check_mv_design -verbose
set prects_cur_scenario [current_scenario]
set prects_active_scenarios [all_active_scenarios]
set_active_scenarios [all_scenarios]
set cur_scenario [current_scenario]
current_scenario [lindex [get_scenarios -cts_mode true] 0]
current_scenario $cur_scenario
clock_opt -only_cts -no_clock_route
redirect -file ../reports/clock_opt_cts.mv {check_mv_design -verbose}
set_app_var timing_remove_clock_reconvergence_pessimism true
set cur_active_scenarios [all_active_scenarios]
set_active_scenarios -all
foreach scenario [all_active_scenarios] {
remove_ideal_network [all_fanout -flat -clock_tree]
}
set_active_scenarios $cur_active_scenarios
foreach scenario [all_active_scenarios] {
current_scenario $scenario
set_fix_hold [all_clocks]
current_scenario $prects_cur_scenario
redirect -file ../reports/clock_opt.clock_timing {report_clock_timing -nosplit -type skew }
redirect -tee -file ../reports/clock_opt.max.clock_tree {report_clock_tree -nosplit -summary }
if {[llength [get_scenarios -active true -hold true]]} {
redirect -tee -file ../reports/clock_opt.min.clock_tree {report_clock_tree -nosplit -summary -scenarios
[get_scenarios -active true -hold true]}
set_active_scenarios $prects_active_scenarios
unset prects_active_scenarios
redirect -file ../reports/clock_opt.max.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay max}
redirect -file ../reports/clock_opt.min.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay min}
redirect -tee -file ../reports/clock_opt.qor {report_qor}
redirect -tee -file ../reports/clock_opt.qor -append {report_qor -summary}
redirect -file ../reports/clock_opt.con {report_constraints}
save_mw_cel -as clock_opt_cts_cel
redirect -file ../reports/clock_opt.placement_utilization.rpt {report_placement_utilization -verbose}
redirect -file ../reports/clock_opt.qor_snapshot.rpt {report_qor_snapshot -no_display}
redirect -file ../reports/clock_opt_route.clock_timing {report_clock_timing -nosplit -type skew -
scenarios [get_scenarios -active true -setup true]}
redirect -tee -file ../reports/clock_opt_route.max.clock_tree {report_clock_tree -nosplit -summary -
scenarios [get_scenarios -active true -setup true]}
if {[llength [get_scenarios -active true -hold true]]} {
redirect -tee -file ../reports/clock_opt_route.min.clock_tree {report_clock_tree -nosplit -
operating_condition min -summary -scenarios [get_scenarios -active true -hold true]}
redirect -file ../reports/clock_opt_route.max.tim {report_timing -nosplit -scenario [all_active_scenarios]
-capacitance -transition_time -input_pins -nets -delay max}
redirect -file ../reports/clock_opt_route.min.tim {report_timing -nosplit -scenario [all_active_scenarios]
-capacitance -transition_time -input_pins -nets -delay min}
redirect -tee -file ../reports/clock_opt_route.qor {report_qor}
redirect -tee -file ../reports/clock_opt_route.qor -append {report_qor -summary}
redirect -file ../reports/clock_opt_route.con {report_constraints}
redirect -file ../reports/clock_opt_route.qor_snapshot.rpt {report_qor_snapshot -no_display}
source -echo ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from place_opt_cel -to clock_opt_cts_cel
open_mw_cel clock_opt_cts_cel
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
remove_pnet_options
set_pnet_options -partial M2 -see_object {all_types}
report_pnet_options
set_app_var enable_recovery_removal_arcs true
define_routing_rule rule_clock_double_spacing -default_reference_rule -multiplier_spacing 2
set_clock_tree_options -routing_rule rule_clock_double_spacing -use_default_routing_for_sinks 1
set_app_var cts_instance_name_prefix CTS
check_mv_design -verbose
set prects_cur_scenario [current_scenario]
set prects_active_scenarios [all_active_scenarios]
set_active_scenarios [all_scenarios]
set cur_scenario [current_scenario]
current_scenario [lindex [get_scenarios -cts_mode true] 0]
current_scenario $cur_scenario
clock_opt -only_cts -no_clock_route
redirect -file ../reports/clock_opt_cts.mv {check_mv_design -verbose}
set_app_var timing_remove_clock_reconvergence_pessimism true
set cur_active_scenarios [all_active_scenarios]
set_active_scenarios -all
foreach scenario [all_active_scenarios] {
remove_ideal_network [all_fanout -flat -clock_tree]
set_active_scenarios $cur_active_scenarios
foreach scenario [all_active_scenarios] {
current_scenario $scenario
set_fix_hold [all_clocks]
current_scenario $prects_cur_scenario
redirect -file ../reports/clock_opt.clock_timing {report_clock_timing -nosplit -type skew }
redirect -tee -file ../reports/clock_opt.max.clock_tree {report_clock_tree -nosplit -summary }
if {[llength [get_scenarios -active true -hold true]]} {
redirect -tee -file ../reports/clock_opt.min.clock_tree {report_clock_tree -nosplit -summary -scenarios
[get_scenarios -active true -hold true]}
set_active_scenarios $prects_active_scenarios
unset prects_active_scenarios
redirect -file ../reports/clock_opt.max.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay max}
redirect -file ../reports/clock_opt.min.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay min}
redirect -tee -file ../reports/clock_opt.qor {report_qor}
redirect -tee -file ../reports/clock_opt.qor -append {report_qor -summary}
redirect -file ../reports/clock_opt.con {report_constraints}
save_mw_cel -as clock_opt_cts_cel
redirect -file ../reports/clock_opt.placement_utilization.rpt {report_placement_utilization -verbose}
redirect -file ../reports/clock_opt.qor_snapshot.rpt {report_qor_snapshot -no_display}
source -echo ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from clock_opt_route_cel -to route_cel
open_mw_cel route_cel
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
}
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
if {[all_macro_cells] != "" } {
set_attribute [all_macro_cells] is_fixed true
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
set_pnet_options -partial M2 -see_object {all_types}
set_app_var enable_recovery_removal_arcs true
set_app_var timing_remove_clock_reconvergence_pessimism true
set_si_options -delta_delay true \
-route_xtalk_prevention true \
-route_xtalk_prevention_threshold 0.25 \
-analysis_effort medium
set_si_options -min_delta_delay true
set_app_var routeopt_skip_report_qor true
set_optimization_strategy -high_resistance false
#-- set_route_zrt_common_options -eco_route_concurrent_redundant_via_mode reserve_space
#-- set_route_zrt_common_options -eco_route_concurrent_redundant_via_effort_level low ;# default
is low
set_route_zrt_detail_options -antenna false
if {[all_level_shifters] != ""} {
set LS_at_top_physical_hierarchy [filter_collection [all_level_shifters]
"within_block_abstraction==false"]
set_dont_touch $LS_at_top_physical_hierarchy
set_attribute $LS_at_top_physical_hierarchy is_fixed true
if {[all_ao_cells] != ""} {
set AO_at_top_physical_hierarchy [filter_collection [all_ao_cells] "within_block_abstraction==false"]
set_dont_touch $AO_at_top_physical_hierarchy
set_attribute $AO_at_top_physical_hierarchy is_fixed true
if {$RR_CELLS != ""} {
set RR [get_cells -hier -f "ref_name =~ ${RR_CELLS}*"]
set_dont_touch $RR
set_attribute $RR is_fixed true
set num_ideal [sizeof_collection [all_ideal_nets]]
if {$num_ideal >= 1} {echo "$num_ideal IDEAL NETS EXIST IN DESIGN"}
set hfn_threshold "41 101 501"
foreach threshold $hfn_threshold {
set num_hfn [sizeof_collection [all_high_fanout -nets -threshold $threshold]]
echo "RM-Info: Number of nets with fanout > $threshold = $num_hfn"
if {$threshold == 501 && $num_hfn >=1} {
echo "RM-Error: $num_hfn Nets with fanout > 500 exist prior to route_opt - Please check if marked
ideal - possibly add buffer tree"
set_active_scenarios [lminus [all_scenarios] [get_scenarios -setup false -hold false -cts_mode true]]
set_route_zrt_common_options -post_detail_route_redundant_via_insertion medium
set_route_zrt_detail_options -optimize_wire_via_effort_level high
set_route_zrt_common_options -concurrent_redundant_via_mode reserve_space
set_route_zrt_common_options -concurrent_redundant_via_effort_level medium
report_preferred_routing_direction
report_tlu_plus_files -scenario [all_scenarios]
route_opt -initial_route_only
redirect -file ../reports/route.mv {check_mv_design -verbose}
save_mw_cel -as route_cel
redirect -file ../reports/route_opt.clock_timing {report_clock_timing -nosplit -type skew -scenarios
[get_scenarios -active true -setup true]}
redirect -tee -file ../reports/route_opt.max.clock_tree {report_clock_tree -nosplit -summary -scenarios
[get_scenarios -active true -setup true]}
if {[llength [get_scenarios -active true -hold true]]} {
redirect -tee -file ../reports/route_opt.min.clock_tree {report_clock_tree -nosplit -operating_condition
min -summary -scenarios [get_scenarios -active true -hold true]}
redirect -tee -file ../reports/.qor {report_qor}
redirect -tee -file ../reports/.qor -append {report_qor -summary}
redirect -file ../reports/route_opt.con {report_constraints}
redirect -file ../reports/route_opt.max.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay max}
redirect -file ../reports/route_opt.min.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay min}
redirect -file ../reports/route.qor_snapshot.rpt {report_qor_snapshot -no_display}
return
gui_set_setting -window [gui_get_current_window -types Layout -mru] -setting showRoute -value false
gui_execute_events
# show congestion overlay
gui_set_setting -window [gui_get_current_window -types Layout -mru] -setting mmName -value
AREAPARTITION
gui_zoom -window [gui_get_current_window -view] -full
gui_execute_events
# save snapshots
gui_write_window_image -window [gui_get_current_window -view -mru] -file
../reports/route_opt.GR.png
source -echo ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from route_cel -to route_opt_cel
open_mw_cel route_opt_cel
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
remove_attribute [get_lib_cells -quiet */CGL*] dont_usesource -echo ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from clock_opt_route_cel -to route_cel
open_mw_cel route_cel
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
if {[all_macro_cells] != "" } {
set_attribute [all_macro_cells] is_fixed true
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
set_pnet_options -partial M2 -see_object {all_types}
set_app_var enable_recovery_removal_arcs true
set_app_var timing_remove_clock_reconvergence_pessimism true
set_si_options -delta_delay true \
-route_xtalk_prevention true \
-route_xtalk_prevention_threshold 0.25 \
-analysis_effort medium
set_si_options -min_delta_delay true
set_app_var routeopt_skip_report_qor true
set_optimization_strategy -high_resistance false
#-- set_route_zrt_common_options -eco_route_concurrent_redundant_via_mode reserve_space
#-- set_route_zrt_common_options -eco_route_concurrent_redundant_via_effort_level low ;# default
is low
set_route_zrt_detail_options -antenna false
if {[all_level_shifters] != ""} {
set LS_at_top_physical_hierarchy [filter_collection [all_level_shifters]
"within_block_abstraction==false"]
set_dont_touch $LS_at_top_physical_hierarchy
set_attribute $LS_at_top_physical_hierarchy is_fixed true
if {[all_ao_cells] != ""} {
set AO_at_top_physical_hierarchy [filter_collection [all_ao_cells] "within_block_abstraction==false"]
set_dont_touch $AO_at_top_physical_hierarchy
set_attribute $AO_at_top_physical_hierarchy is_fixed true
if {$RR_CELLS != ""} {
set RR [get_cells -hier -f "ref_name =~ ${RR_CELLS}*"]
set_dont_touch $RR
set_attribute $RR is_fixed true
set num_ideal [sizeof_collection [all_ideal_nets]]
if {$num_ideal >= 1} {echo "$num_ideal IDEAL NETS EXIST IN DESIGN"}
set hfn_threshold "41 101 501"
foreach threshold $hfn_threshold {
set num_hfn [sizeof_collection [all_high_fanout -nets -threshold $threshold]]
echo "RM-Info: Number of nets with fanout > $threshold = $num_hfn"
if {$threshold == 501 && $num_hfn >=1} {
echo "RM-Error: $num_hfn Nets with fanout > 500 exist prior to route_opt - Please check if marked
ideal - possibly add buffer tree"
set_active_scenarios [lminus [all_scenarios] [get_scenarios -setup false -hold false -cts_mode true]]
set_route_zrt_common_options -post_detail_route_redundant_via_insertion medium
set_route_zrt_detail_options -optimize_wire_via_effort_level high
set_route_zrt_common_options -concurrent_redundant_via_mode reserve_space
set_route_zrt_common_options -concurrent_redundant_via_effort_level medium
report_preferred_routing_direction
report_tlu_plus_files -scenario [all_scenarios]
route_opt -initial_route_only
redirect -file ../reports/route.mv {check_mv_design -verbose}
save_mw_cel -as route_cel
redirect -file ../reports/route_opt.clock_timing {report_clock_timing -nosplit -type skew -scenarios
[get_scenarios -active true -setup true]}
redirect -tee -file ../reports/route_opt.max.clock_tree {report_clock_tree -nosplit -summary -scenarios
[get_scenarios -active true -setup true]}
if {[llength [get_scenarios -active true -hold true]]} {
redirect -tee -file ../reports/route_opt.min.clock_tree {report_clock_tree -nosplit -operating_condition
min -summary -scenarios [get_scenarios -active true -hold true]}
redirect -tee -file ../reports/.qor {report_qor}
redirect -tee -file ../reports/.qor -append {report_qor -summary}
redirect -file ../reports/route_opt.con {report_constraints}
redirect -file ../reports/route_opt.max.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay max}
redirect -file ../reports/route_opt.min.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay min}
redirect -file ../reports/route.qor_snapshot.rpt {report_qor_snapshot -no_display}
return
gui_set_setting -window [gui_get_current_window -types Layout -mru] -setting showRoute -value false
gui_execute_events
# show congestion overlay
gui_set_setting -window [gui_get_current_window -types Layout -mru] -setting mmName -value
AREAPARTITION
gui_zoom -window [gui_get_current_window -view] -full
gui_execute_events
# save snapshots
gui_write_window_image -window [gui_get_current_window -view -mru] -file
../reports/route_opt.GR.png
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
if {[all_macro_cells] != "" } {
set_attribute [all_macro_cells] is_fixed true
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
set_pnet_options -partial M2 -see_object {all_types}
set_app_var enable_recovery_removal_arcs true
set_app_var timing_remove_clock_reconvergence_pessimism true
set_si_options -delta_delay true \
-route_xtalk_prevention true \
-route_xtalk_prevention_threshold 0.25 \
-analysis_effort medium
set_si_options -min_delta_delay true
set_app_var routeopt_skip_report_qor true
set_optimization_strategy -high_resistance false
#-- set_route_zrt_common_options -eco_route_concurrent_redundant_via_mode reserve_space
#-- set_route_zrt_common_options -eco_route_concurrent_redundant_via_effort_level low ;# default
is low
set_route_zrt_detail_options -antenna false
set_active_scenarios [lminus [all_scenarios] [get_scenarios -setup false -hold false -cts_mode true]]
set_app_var compile_instance_name_prefix route_opt
set_optimization_strategy -tns_effort medium
route_opt -skip_initial_route -effort medium -xtalk_reduction -power
redirect -file ../reports/route_opt.mv {check_mv_design -verbose}
save_mw_cel -as route_opt_cel
redirect -tee -file ../reports/route_opt.qor {report_qor}
redirect -tee -file ../reports/route_opt.qor -append {report_qor -summary}
redirect -tee -file ../reports/route_opt.qor -append {report_timing_histogram -range_maximum 0 -
scenario [all_active_scenarios]}
redirect -tee -file ../reports/route_opt.qor -append {report_timing_histogram -range_minimum 0 -
scenario [all_active_scenarios]}
redirect -file ../reports/route_opt.con {report_constraints}
if {[llength [get_scenarios -active true -setup true]]} {
redirect -file ../reports/route_opt.clock_timing {report_clock_timing -nosplit -type skew -scenarios
[get_scenarios -active true -setup true]}
redirect -tee -file ../reports/route_opt.max.clock_tree {report_clock_tree -nosplit -summary -scenarios
[get_scenarios -active true -setup true]}
if {[llength [get_scenarios -active true -hold true]]} {
redirect -tee -file ../reports/route_opt.min.clock_tree {report_clock_tree -nosplit -operating_condition
min -summary -scenarios [get_scenarios -active true -hold true]}
redirect -file ../reports/route_opt.max.tim {report_timing -nosplit -crosstalk_delta -scenario
[all_active_scenarios] -capacitance -transition_time -input_pins -nets -delay max}
redirect -file ../reports/route_opt.min.tim {report_timing -nosplit -crosstalk_delta -scenario
[all_active_scenarios] -capacitance -transition_time -input_pins -nets -delay min}
redirect -file ../reports/route_opt.power {report_power -nosplit -scenario [all_active_scenarios]}
************8
source -echo ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from route_opt_cel -to chip_finish_cel
open_mw_cel chip_finish_cel
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
if {[all_macro_cells] != "" } {
set_attribute [all_macro_cells] is_fixed true
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
set_pnet_options -partial M2 -see_object {all_types}
source -echo ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from clock_opt_route_cel -to route_cel
open_mw_cel route_cel
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
if {[all_macro_cells] != "" } {
set_attribute [all_macro_cells] is_fixed true
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
set_pnet_options -partial M2 -see_object {all_types}
set_app_var enable_recovery_removal_arcs true
set_app_var timing_remove_clock_reconvergence_pessimism true
set_si_options -delta_delay true \
-route_xtalk_prevention true \
-route_xtalk_prevention_threshold 0.25 \
-analysis_effort medium
set_si_options -min_delta_delay true
set_app_var routeopt_skip_report_qor true
set_optimization_strategy -high_resistance false
#-- set_route_zrt_common_options -eco_route_concurrent_redundant_via_mode reserve_space
#-- set_route_zrt_common_options -eco_route_concurrent_redundant_via_effort_level low ;# default
is low
set_route_zrt_detail_options -antenna false
if {[all_level_shifters] != ""} {
set LS_at_top_physical_hierarchy [filter_collection [all_level_shifters]
"within_block_abstraction==false"]
set_dont_touch $LS_at_top_physical_hierarchy
set_attribute $LS_at_top_physical_hierarchy is_fixed true
if {[all_ao_cells] != ""} {
set AO_at_top_physical_hierarchy [filter_collection [all_ao_cells] "within_block_abstraction==false"]
set_dont_touch $AO_at_top_physical_hierarchy
set_attribute $AO_at_top_physical_hierarchy is_fixed true
if {$RR_CELLS != ""} {
set RR [get_cells -hier -f "ref_name =~ ${RR_CELLS}*"]
set_dont_touch $RR
set_attribute $RR is_fixed true
set num_ideal [sizeof_collection [all_ideal_nets]]
if {$num_ideal >= 1} {echo "$num_ideal IDEAL NETS EXIST IN DESIGN"}
set hfn_threshold "41 101 501"
foreach threshold $hfn_threshold {
set num_hfn [sizeof_collection [all_high_fanout -nets -threshold $threshold]]
echo "RM-Info: Number of nets with fanout > $threshold = $num_hfn"
if {$threshold == 501 && $num_hfn >=1} {
echo "RM-Error: $num_hfn Nets with fanout > 500 exist prior to route_opt - Please check if marked
ideal - possibly add buffer tree"
set_active_scenarios [lminus [all_scenarios] [get_scenarios -setup false -hold false -cts_mode true]]
set_route_zrt_common_options -post_detail_route_redundant_via_insertion medium
set_route_zrt_detail_options -optimize_wire_via_effort_level high
set_route_zrt_common_options -concurrent_redundant_via_mode reserve_space
set_route_zrt_common_options -concurrent_redundant_via_effort_level medium
report_preferred_routing_direction
report_tlu_plus_files -scenario [all_scenarios]
route_opt -initial_route_only
redirect -file ../reports/route.mv {check_mv_design -verbose}
save_mw_cel -as route_cel
redirect -file ../reports/route_opt.clock_timing {report_clock_timing -nosplit -type skew -scenarios
[get_scenarios -active true -setup true]}
redirect -tee -file ../reports/route_opt.max.clock_tree {report_clock_tree -nosplit -summary -scenarios
[get_scenarios -active true -setup true]}
if {[llength [get_scenarios -active true -hold true]]} {
redirect -tee -file ../reports/route_opt.min.clock_tree {report_clock_tree -nosplit -operating_condition
min -summary -scenarios [get_scenarios -active true -hold true]}
redirect -tee -file ../reports/.qor {report_qor}
redirect -tee -file ../reports/.qor -append {report_qor -summary}
redirect -file ../reports/route_opt.con {report_constraints}
redirect -file ../reports/route_opt.max.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay max}
redirect -file ../reports/route_opt.min.tim {report_timing -nosplit -scenario [all_active_scenarios] -
capacitance -transition_time -input_pins -nets -delay min}
redirect -file ../reports/route.qor_snapshot.rpt {report_qor_snapshot -no_display}
return
gui_set_setting -window [gui_get_current_window -types Layout -mru] -setting showRoute -value false
gui_execute_events
# show congestion overlay
gui_set_setting -window [gui_get_current_window -types Layout -mru] -setting mmName -value
AREAPARTITION
gui_zoom -window [gui_get_current_window -view] -full
gui_execute_events
# save snapshots
gui_write_window_image -window [gui_get_current_window -view -mru] -file
../reports/route_opt.GR.png
set_app_var enable_recovery_removal_arcs true
set_app_var timing_remove_clock_reconvergence_pessimism true
set_si_options -delta_delay true \
-route_xtalk_prevention true \
-route_xtalk_prevention_threshold 0.25 \
-analysis_effort medium
set_si_options -min_delta_delay true
set_app_var routeopt_skip_report_qor true
set_optimization_strategy -high_resistance false
#-- set_route_zrt_common_options -eco_route_concurrent_redundant_via_mode reserve_space
#-- set_route_zrt_common_options -eco_route_concurrent_redundant_via_effort_level low ;# default
is low
set_route_zrt_detail_options -antenna false
set_route_zrt_detail_options -eco_route_use_soft_spacing_for_timing_optimization false
set_active_scenarios [lminus [all_scenarios] [get_scenarios -setup false -hold false -cts_mode true]]
spread_zrt_wires -timing_preserve_setup_slack_threshold 0.1 -timing_preserve_hold_slack_threshold 0
widen_zrt_wires -timing_preserve_setup_slack_threshold 0.1 -timing_preserve_hold_slack_threshold 0
#-- set_route_zrt_detail_options -antenna true -diode_libcell_names $ICC_ROUTING_DIODES -
insert_diodes_during_routing true
#-- route_zrt_detail -incremental true
#-- create_zrt_shield
#-- set_route_zrt_common_options -reshield_modified_nets reshield
#-- set_extraction_options -virtual_shield_extraction false
route_opt -incremental -size_only
insert_zrt_redundant_vias -effort medium \
-timing_preserve_setup_slack_threshold 0.1 \
-timing_preserve_hold_slack_threshold 0
set_route_zrt_global_options -timing_driven false -crosstalk_driven false
set_route_zrt_track_options -timing_driven false -crosstalk_driven false
set_route_zrt_detail_options -timing_driven false
route_zrt_eco
save_mw_cel -as chip_finish_cel
redirect -file ../reports/chip_finish.mv {check_mv_design -verbose}
save_upf ../results/chip_finish.upf
redirect -tee -file ../reports/chip_finish.qor {report_qor}
redirect -tee -file ../reports/chip_finish.qor -append {report_qor -summary}
redirect -file ../reports/chip_finish.con {report_constraints}
if {[llength [get_scenarios -active true -setup true]]} {
redirect -file ../reports/chip_finish.clock_timing {report_clock_timing -nosplit -type skew -scenarios
[get_scenarios -active true -setup true]}
redirect -tee -file ../reports/chip_finish.max.clock_tree {report_clock_tree -nosplit -summary -scenarios
[get_scenarios -active true -setup true]}
if {[llength [get_scenarios -active true -hold true]]} {
redirect -tee -file ../reports/chip_finish.min.clock_tree {report_clock_tree -nosplit -operating_condition
min -summary -scenarios [get_scenarios -active true -hold true]}
redirect -file ../reports/chip_finish.max.tim {report_timing -nosplit -crosstalk_delta -scenario
[all_active_scenarios] -capacitance -transition_time -input_pins -nets -delay max}
redirect -file ../reports/chip_finish.min.tim {report_timing -nosplit -crosstalk_delta -scenario
[all_active_scenarios] -capacitance -transition_time -input_pins -nets -delay min}
redirect -tee -file ../reports/chip_finish.sum {report_design_physical -all -verbose}
source -echo ../scripts/icc_setup.tcl
open_mw_lib ORCA_TOP_LIB
copy_mw_cel -from chip_finish_cel -to metal_fill_cel
open_mw_cel metal_fill_cel
link
set_app_var enable_page_mode false
set_app_var sh_enable_page_mode false
set_delay_calculation_options -preroute elmore
set_delay_calculation_options -postroute arnoldi -arnoldi_effort medium
set_app_var timing_enable_multiple_clocks_per_reg true
set_fix_multiple_port_nets -all -buffer_constants
set_auto_disable_drc_nets -constant false
suppress_message MWUI-031
suppress_message MWUI-032
foreach_in_collection tie_cell [get_lib_cells -quiet */TIE*_HVT] {
set_attribute $tie_cell dont_use false
set_attribute $tie_cell dont_touch false
set_attribute [get_lib_pins -of_objects $tie_cell] max_fanout 10 -type float
remove_attribute [get_lib_cells -quiet */CGL*] dont_use
remove_attribute [get_lib_cells -quiet */CGL*] dont_touch
set_dont_use [get_lib_cells -quiet */RSDFF*]
set_dont_use [get_lib_cells -quiet */AOINV*]
set_dont_use [get_lib_cells -quiet */AOBUF*]
set_dont_use [get_lib_cells -quiet */PMT*]
set_dont_use [get_lib_cells -quiet */NMT*]
remove_attribute [get_lib_cells -quiet */SRAM*] dont_use
unsuppress_message MWUI-031
unsuppress_message MWUI-032
if {[all_macro_cells] != "" } {
set_attribute [all_macro_cells] is_fixed true
set_ignored_layers -max_routing_layer M5
set_ignored_layers -min_routing_layer M1
set_pnet_options -partial M2 -see_object {all_types}
set_app_var enable_recovery_removal_arcs true
set_app_var timing_remove_clock_reconvergence_pessimism true
set_si_options -delta_delay true \
-route_xtalk_prevention true \
-route_xtalk_prevention_threshold 0.25 \
-analysis_effort medium
set_si_options -min_delta_delay true
set_app_var routeopt_skip_report_qor true
set_optimization_strategy -high_resistance false
#-- set_route_zrt_common_options -eco_route_concurrent_redundant_via_mode reserve_space
#-- set_route_zrt_common_options -eco_route_concurrent_redundant_via_effort_level low ;# default
is low
set_route_zrt_detail_options -antenna false
set_active_scenarios [lminus [all_scenarios] [get_scenarios -setup false -hold false -cts_mode true]]
set_extraction_options -real_metalfill_extraction NONE
insert_metal_filler -routing_space 2 -timing_driven
set_extraction_options -real_metalfill_extraction FLOATING
save_mw_cel -as metal_fill_cel
redirect -file ../reports/metal_fill.mv {check_mv_design -verbose}
save_upf ../results/metal_fill.upf
redirect -tee -file ../reports/metal_fill.qor {report_qor}
redirect -tee -file ../reports/metal_fill.qor -append {report_qor -summary}
redirect -file ../reports/metal_fill.con {report_constraints}
if {[llength [get_scenarios -active true -setup true]]} {
redirect -file ../reports/metal_fill.clock_timing {report_clock_timing -nosplit -type skew -scenarios
[get_scenarios -active true -setup true]}
redirect -tee -file ../reports/metal_fill.max.clock_tree {report_clock_tree -nosplit -summary -scenarios
[get_scenarios -active true -setup true]}
if {[llength [get_scenarios -active true -hold true]]} {
redirect -tee -file ../reports/metal_fill.min.clock_tree {report_clock_tree -nosplit -operating_condition
min -summary -scenarios [get_scenarios -active true -hold true]}
redirect -file ../reports/metal_fill.max.tim {report_timing -nosplit -crosstalk_delta -scenario
[all_active_scenarios] -capacitance -transition_time -input_pins -nets -delay max}
redirect -file ../reports/metal_fill.min.tim {report_timing -nosplit -crosstalk_delta -scenario
[all_active_scenarios] -capacitance -transition_time -input_pins -nets -delay min}
redirect -tee -file ../reports/metal_fill.sum {report_design_physical -all -verbose}
#####################################################################################
####
# ICC Design Planning RM
# Version: J-2014.09-SP2 (January 12, 2015)
# Copyright (C) 2010-2015 Synopsys, Inc. All rights reserved.
#####################################################################################
####
# Variable defaults and legal values based on ICC D-2010.03-SP4
# N/A means not a create_fp_placement option or parameter
# "Brief_Description" column below intends to give you quick reference of what the option does.
# Please refer to man page of create_fp_placement or set_fp_placement_strategy for more details.
# Legend Default <Range> (Correspondent command) Brief_Description
# A run number N/A <integer> for tracking purpose
# B objective N/A <string> for tracking purpose
# C macros on edge auto <auto,on,off> (set_fp_placement_strategy -macros_on_edge)
place macros on the edges of chip or plan group
# D auto grouping low <none,user_only,low,high> (set_fp_placement_strategy -
auto_grouping) controls amount of macro array packing
# none: no grping | user_only: only user defined ones
created | low: array for small macros | high: array for all macros
# E hierarchy gravity on <on,off> (create_fp_placement -no_hierarchy_gravity) on :
with hier gravity on
# F congestion driven off <on,off> (create_fp_placement -congestion_driven)
# G timing driven off <on,off> (create_fp_placement -timing_driven)
# H set_ideal_network on hfn N/A <on,off> runs set_ideal_network on high fanout nets before
fp_create_placement
# use "I" to configure high fanout net threshold
# I high fanout net threshold 100 <integer> placement ignores nets with fanout more than
threshold
# also used to define high fanout nets for "H" and high
fanout net threshold for "W"
# J effort low <low,high>(create_fp_placement -effort)
# K incremental off <off,all,top_level_cells,plan_groups,voltage_areas>
(create_fp_placement -incremental)
# all: whole design | top_level_cells: all cells don't belong to
plan groups or voltage areas
# plan_groups: only on specified plan groups from "L" |
voltage_areas: only on specified voltage areas from "M"
# L plan group name for "K" "" <string> if plan_groups is specified in K,pls specify the name of
plan group
# M voltage area names for "K" "" <string> if voltage_areas is specified in K,pls specify the name
of voltage area
# N macro orientation automatic <automatic,all,N> (set_fp_placement_strategy -
macro_orientation)
# O sliver size 10 <a positive number> (set_fp_placement_strategy -slive_size)
# minimum channel size allowing std cells to be placed,
tool default is 0
# P congestion effort low <low,high>(set_fp_placement_strategy -congestion_effort)
# Q io net weight 1 <a positive number btw 0-10> (set_fp_placement_strategy -
IO_net_weight) net weight on nets connected to IOs
# R plangroup interface net wt 1 <a positive number btw 0-10> (set_fp_placement_strategy -
plan_group_interface_net_weight) net weight on interface nets of exclusive plan groups
# S spread spare cells on <on,off> (set_fp_placement_strategy -spread_spare_cells)
# T legalizer effort high <low,high>(set_fp_placement_strategy -legalizer_effort)
# U ipo ahfs off <on,off> allow ahfs buffer removal and change of high fanout
threshold
# V ipo ahfs remove effort none <none,medium,high> (set_ahfs_options -remove_effort
$ipo_ahfs_remove_effort)
# W ipo effort medium <medium,high> (optimize_fp_timing -effort)
# X ipo fix drc off <on,off> (optimize_fp_timing -fix_design_rule)
# Y ipo area recovery off <on,off> (optimize_fp_timing_cmd -area_recovery)
# A run number
# B objective
# C macros on edge (moe)
# D auto grouping
# E hierarchy gravity
# F congestion driven
# G timing driven
# H set_ideal_net_work on hfn
# I hfn threshold
# J effort
# K incremental
# L plan group name for K
# M voltage area name for K
# N macro orientation
# O sliver size
# P congestion effort
# Q io net weight
# R plangroup interface net weight
# S spread spare cells
# T legalizer effort
# U ipo ahfs
# V ipo ahfs remove effort
# W ipo effort
# X ipo fix drc
# Y ipo area recovery
# A B C D E F G H I J K L M N O P QRS T U V W X
Y
dp_explore run0 default auto low on off off off 100 low off "" "" automatic 10 low 1 1 on
high off none medium off off
dp_explore run1 default+moe_off+cong off low on on off off 100 low off "" "" automatic 10 low
1 1 on high off none medium off off
dp_explore run2 default+moe_off+cong+timing off low on on on off 100 low off "" "" automatic 10
low 1 1 on high off none medium off off
dp_explore run3 default+moe_on on low on off off off 100 low off "" "" automatic 10 low 1 1
on high off none medium off off
dp_explore run4 default+moe_on+timing on low on off on off 100 low off "" "" automatic 10 low
1 1 on high off none medium off off
dp_explore run5 default+moe_on+cong+timing on low on on on off 100 low off "" "" automatic 10
low 1 1 on high off none medium off off
dp_explore run6 default+hier_off+moe_off off low off off off off 100 low off "" "" automatic 10 low
1 1 on high off none medium off off
dp_explore run7 default+hier_off+moe_off+cong off low off on off off 100 low off "" "" automatic 10
low 1 1 on high off none medium off off
dp_explore run8 default+hier_off+moe_on+group on high off off off off 100 low off "" "" automatic 10
low 1 1 on high off none medium off off
dp_explore run9 default+high_effort_ipo off low on off off on 40 low off "" "" automatic 10 low 1
1 on high on high medium on off
#moe: macros on edge
#####################################################################################
######################################
# Tips
# The above predefined runs are only switching C,D,E,F,and G options which should give you good
sarting point.
# Feel free to customize other options. Option B is only for tracking purpose. You can rename it
whatever you want.
# Use # to comment out runs you don't want or simply remove them. Each run is independent like a tcl
command.
# You can create your own runs and simply append them to the above runs.
#####################################################################################
######################################