100% found this document useful (1 vote)
587 views84 pages

PD Comand Obul

Uploaded by

dinesh reddy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
587 views84 pages

PD Comand Obul

Uploaded by

dinesh reddy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 84

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.

#####################################################################################
######################################

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy