常用到mmmc的情况下通过synopsys的prime time的multisceanrio 模式提高fix 效率
以下内容仅供学习参考
bash
##start job:dsubjob + pt_shell -multi_scenario -f setup_size_vt.tcl
set date [exec date +%m%d%H%M]
set work_path setup_fixvt_${date}
sh rm -rf ./$work/*
set_host_options -num_processes 4 -max_cores 32;##num_processes bigger than scenario
start_hosts
###loading session
create_scenario -name fun_0p6_wcz -image location_of_session_1
create_scenario -name fun_0p7_wc -image location_of_session_2
current_session -all
current_scenario -all
##user var setting
set fixsetup 1
remote_execute {
if {1} {
set_false_path -from [all_inputs]
set_false_path -to [all_inputs]
}
set_false_path -through $pin;
set_false_path -from moduleA/pin1;
set_false_path -to moduleB/pin2;
}
##tools_setting
remote_execute {
set eco_alternative_area_ratio_threshold 1
set_app_var timing_save_pin_arrival_and_slack true
set_app_var read_parasitics_load_location true
set_app_var eco_enable_more_scenarios_than_hosts true
set_app_var eco_power_exclude_unconstrained_cells true;#unconstraint path is treated as dont touch
set eco_strict_pin_name_equivalence true
}
###dont use
remote_excute {
define_user_attribute pt_dont_use -quiet -type boolean -class lib_cell
set vars(edi,dont_use) "mesh_* *D36* *SVT"
foreach item $vars(edi,dont_use) {
set_user_attribute -class lib_cell [get_lib_cells -quiet */$item] pt_dont_use true
}
set_dont_use [get_lib_cells -quiet */*ULVT] true
}
##dont touch setting
remote_execute {
set_dont_touch [get_cells -filter "ref_name =~ DCCK*" -hierarchical] true
set_dont_touch [get_cells -filter "ref_name =~ CK*" -hierarchical] true
set_dont_touch [get_cells -filter "ref_name =~ ISO*" -hierarchical] true
set_dont_touch [get_cells -filter "ref_name =~ LVU*" -hierarchical] true
set_dont_touch [get_cells -filter "ref_name =~ PT*" -hierarchical] true
set_dont_touch [get_cells -filter "ref_name =~ AP*" -hierarchical] true
set_dont_touch [get_cells -filter "ref_name =~ SYNC*" -hierarchical] true #同步
set ck_cell [get_attribute [get_cells -filter "is_clock_network_cell == true" -hierarchical] full_name]
foreach cell $ck_cell {
set_dont_touch [get_cells $cell]
}
}
###setting for size vt
remote_execute {
my_set_lib_cell_vt_pattern_and_base_ref_name -pattern {SVT LVT ULVT}; vt pattern
set_app_vareco_alternative_area_ratio_threshold 1 ;##fix timing only by size vt
}
##main proc for size vt
if {$fix_setup} {
set pins {1 2 3} #define violation endpoint
fix_eco_timing -type setup -verbose -cell_type combinational -methods size_cell -setup_margin 0.00 -verbose -to $pins -pba_mode ex;#fix_timing only size combinational cell
fix_eco_timing -type setup -verbose -cell_type sequential -methods size_cell -setup_margin 0.00 -verbose -to $pins -pba_mode ex;#fix_timing only size sequential cell
#fix_eco_timing -type setup -verbose -cell_type combinational -methods size_cell -setup_margin 0.00 -verbose
#fix_eco_timing -type setup -verbose -cell_type sequential -methods size_cell -setup_margin 0.00 -verbose
remote_execute {
set date [exec date +%m%d]
write_changes -format icctcl -output pt_${date}.icc.tcl
write_changes -format ptsh -output pt_${date}.pt.tcl
write_changes -format text -output pt_${date}.text.tcl
}
}