⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 place_opt_icc.tcl

📁 synopsys icc 使用参考脚本
💻 TCL
字号:
## ICC RM Version: B-2008.09        ############################################################################################ place_opt_icc: Placement and Placement Optimizations##########################################################################################source -echo icc_setup.tcl open_mw_lib $MW_DESIGN_LIBRARYredirect /dev/null "remove_mw_cel -version_kept 0 ${ICC_PLACE_OPT_CEL}" copy_mw_cel -from $ICC_FLOORPLAN_CEL -to $ICC_PLACE_OPT_CELopen_mw_cel $ICC_PLACE_OPT_CELlink ## Optimization Common Session Options - set in all sessionssource -echo common_optimization_settings_icc.tcl source -echo common_placement_settings_icc.tcl ## Source CTS Options CTS can be run during place_opt source -echo common_cts_settings_icc.tcl ## Set Ideal Network so place_opt handles data/clock mixing with high fanout## Remove before clock_opt ctsif {!$MCMM_MODE } {  set_ideal_network [all_fanout -flat -clock_tree ]} else {   set_active_scenarios [lminus [all_scenarios] $ICC_MCMM_CTS_SCENARIO]   foreach scenario [all_active_scenarios] {     current_scenario $scenario     set_ideal_network [all_fanout -flat -clock_tree ]   };  }set_app_var compile_instance_name_prefix icc_place  if {$MV_MODE == "UPF"} {  derive_pg_connection -create_net -verbose    derive_pg_connection -reconnect -verbose   check_mv_design -power_nets -verbose }if {$MV_MODE != "NONE"} {## Recommended to ensure a gap between the Level shifters and the std cells#   set_keepout_margin -outer {-0.1 0 0.1 0} [get_cells -hier -f "ref_name =~ ${LS_CELLS}*"]}if {$MV_MODE == "NONUPF" && $AO_MODE} { ## Remove the dont_touch on the AO-nets prior to place_opt. Will be put again later on. set_dont_touch [get_always_on -nets] false}if {$MCMM_MODE } { set_active_scenarios [lminus [all_scenarios] $ICC_MCMM_CTS_SCENARIO]}######################### MAGNET PLACEMENT  ## ######################### Define e.g. a ram as a magnet and the command will pull the cells connected to this instance## closer to the magnet, depending on the -logical_level amount you provide. ## When adding the -exclude_buffers option, you instruct the tool to pull buffers as well, but do not consider them in the## logical levels calculation#magnet_placement -exclude_buffers -logical_level 2 [get_cells "INST_RAM1 INST_RAM2"]################################ RP : Relative Placement  ## ################################ Create RP constraints as shown below#create_rp_group Lachd_Result_reg -design ORCA -columns 1 -rows 16 -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## Other commands that can be used for RP group creation are : extract_rp_group and order_rp_groups#extract_rp_group -group_name Lachd_Result_reg -objects [get_cells -hier Lachd_Result_reg*] -col 1 -apply#extract_rp_group -group_name Oprnd_A_reg -objects [get_cells -hier Oprnd_A_reg*] -col 1 -apply#extract_rp_group -group_name Oprnd_B_reg -objects [get_cells -hier Oprnd_B_reg*] -col 1 -apply#order_rp_group -group_name Oprnd_reg {ORCA::Oprnd_A_reg ORCA::Oprnd_B_reg} -applyif {$DYNAMIC_POWER } {  if {$ICC_IN_SAIF_FILE != ""} {read_saif -input $ICC_IN_SAIF_FILE -instance_name $ICC_SAIF_INSTANCE_NAME} }if {$DFT} {  ##Read Scan Chain Information from DEF  if {[file exists $ICC_IN_SCAN_DEF_FILE] } {        read_def $ICC_IN_SCAN_DEF_FILE       } else {        echo "SCRIPT-Error: Scan Def file $ICC_IN_SCAN_DEF_FILE is not found, but DFT is enabled. Please investigate"        exit    }  redirect -file $REPORTS_DIR/scan_chain_pre_ordering.rpt {report_scan_chain}  check_scan_chain   }if { [check_error -verbose] != 0} { echo "SCRIPT-Error, flagging ..." }if {$DFT} { if {$LEAKAGE_POWER || $DYNAMIC_POWER} {    ##Optimize DFT and Power    if {$ICC_STRATEGY == "TTR" } {        place_opt -effort low -optimize_dft -power -num_cpus $ICC_NUM_CPUS     }    if {$ICC_STRATEGY == "QOR" } {        place_opt -congestion -area_recovery -effort medium -optimize_dft -power -num_cpus $ICC_NUM_CPUS     }  } else {    ##Optimize DFT     if {$ICC_STRATEGY == "TTR" } {        place_opt -effort low -optimize_dft -num_cpus $ICC_NUM_CPUS     }    if {$ICC_STRATEGY == "QOR" } {        place_opt -congestion -area_recovery -effort medium -optimize_dft -num_cpus $ICC_NUM_CPUS     }  }} else {  if {$LEAKAGE_POWER || $DYNAMIC_POWER } {    ##Optimize Power     if {$ICC_STRATEGY == "TTR" } {       place_opt -effort low -power -num_cpus $ICC_NUM_CPUS     }    if {$ICC_STRATEGY == "QOR" } {       place_opt -congestion -area_recovery -effort medium -power -num_cpus $ICC_NUM_CPUS     }  } else {    ##Default place_opt    if {$ICC_STRATEGY == "TTR" } {       place_opt -effort low -num_cpus $ICC_NUM_CPUS     }    if {$ICC_STRATEGY == "QOR" } {       place_opt -congestion -area_recovery -effort medium -num_cpus $ICC_NUM_CPUS     }  }}if { [check_error -verbose] != 0} { echo "SCRIPT-Error, flagging ..." }############################################################################################################# ADDING ADDITIONAL FEATURES TO THE DEFAULT PLACE_OPT COMMAND################################################################################################################ When you want to add area recovery, execute : ##   place_opt -area_recovery -effort low -num_cpus $ICC_NUM_CPUS### When the design has congestion issues, you have following choices :##   place_opt -congestion -area_recovery -effort low -num_cpus $ICC_NUM_CPUS ; # for medium effort congestion removal#   place_opt -effort high -congestion -area_recovery -num_cpus $ICC_NUM_CPUS ; # for high eff cong removal## What commands do you need when you want to optimize SCAN ?#   read_def $ICC_IN_SCAN_DEF_FILE#   check_scan_chain > $REPORTS_DIR/scan_chain_pre_ordering.rpt#   report_scan_chain >>  $REPORTS_DIR/scan_chain_pre_ordering.rpt#   place_opt -effort low -optimize_dft -num_cpus $ICC_NUM_CPUS## What commands do you need when you want to reduce leakage power ?#   set_power_options -leakage true #   place_opt -effort low -area_recovery -power -num_cpus $ICC_NUM_CPUS## What commands do you need when you want to reduce dynamic power ?#   set_power_options -dynamic true -low_power_placement true#   read_saif -input $ICC_IN_SAIF_FILE#   place_opt -effort low -area_recovery -power -num_cpus $ICC_NUM_CPUS#          Note : option -low_power_placement enables the register clumping algorithm in #                 place_opt, whereas the option -dynamic enables the #                 Gate Level Power Optimization (GLPO)## When you want to do scan opto, leakage opto, dynamic opto, and you have congestion issues, ## use all options together :#   read_def $ICC_IN_SCAN_DEF_FILE#   set_power_options -leakage true -dynamic true -low_power_placement true#   place_opt -effort low -congestion -area_recovery -optimize_dft -power -num_cpus $ICC_NUM_CPUS################################ RP : Relative Placement  ## ################################ Checking any RP violations.## It is recommended to open up the GUI and bring up the RP hierarchical browser and ## RP visual mode to see if RP groups were created correctly#check_rp_groups -all if {$MV_MODE == "NONUPF"} {  ## in case new nets are created that go from one VA to another, level shifters need to be inserted on these nets   # insert_level_shifters -all_clock_nets -verbose  ## optionally insert isolation cells   # insert_isolation_cell -reference $lib_cell -enable [find net $enable_net] -object_list [get_net $nets_missing_isolation_cells]  redirect -file $REPORTS_DIR/place_opt.mv {check_mv_design -power_nets -verbose}}if {$MV_MODE == "NONUPF" && $AO_MODE} {## Putting the dont_touch on the AO-nets after place_opt.  set_dont_touch [get_always_on -nets] true }#########################################           CONNECT P/G                ########################################### Connect Power & Ground for non-MV and MV-modeif { $CUSTOM_CONNECT_PG_NETS_SCRIPT != ""} {  if {[file exists [which $CUSTOM_CONNECT_PG_NETS_SCRIPT]]} {    source -echo $CUSTOM_CONNECT_PG_NETS_SCRIPT   }} else { if {$MV_MODE == "NONE"} {  derive_pg_connection -create_net  derive_pg_connection -reconnect } if {$MV_MODE == "NONUPF"} {  source -echo mv_pg_connect.tcl  } if {$MV_MODE == "UPF"} {  derive_pg_connection -create_net -verbose  derive_pg_connection -reconnect -verbose  redirect -file $REPORTS_DIR/place_opt.mv {check_mv_design -power_nets -verbose}  save_upf $RESULTS_DIR/$ICC_PLACE_OPT_CEL.upf }}if {$MCMM_MODE } {    set_active_scenarios [lminus [all_scenarios] $ICC_MCMM_CTS_SCENARIO]    redirect -file $REPORTS_DIR/$ICC_PLACE_OPT_CEL.max.tim {report_timing -scenario [all_scenarios] -capacitance -transition_time -input_pins -nets -delay max}   redirect -file $REPORTS_DIR/$ICC_PLACE_OPT_CEL.min.tim {report_timing -scenario [all_scenarios] -capacitance -transition_time -input_pins -nets -delay min}} else {   redirect -file $REPORTS_DIR/$ICC_PLACE_OPT_CEL.max.tim {report_timing -capacitance -transition_time -input_pins -nets -delay max}   redirect -file $REPORTS_DIR/$ICC_PLACE_OPT_CEL.min.tim {report_timing -capacitance -transition_time -input_pins -nets -delay min}}## Create Snapshot and Savecreate_qor_snapshot -timing -constraint -congestion -name $ICC_PLACE_OPT_CEL  save_mw_cel -as $ICC_PLACE_OPT_CEL  redirect -file $REPORTS_DIR/$ICC_PLACE_OPT_CEL.qor_snapshot.rpt {report_qor_snapshot} redirect -file $REPORTS_DIR/$ICC_PLACE_OPT_CEL.qor {report_qor}redirect -file $REPORTS_DIR/$ICC_PLACE_OPT_CEL.con {report_constraints}exit

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -