芯片的PPA追求是无止境的,因而在修时序的过程中我们需要对设计修复leakage,降低芯片的静态功耗。
以下分享一个典型的leakage脚本
set design 1
set version "V1"
set date [exec date +%m%d%H%M]
set working_directory ${design}_${version}_${date}##host option
set_host_options -num_process 4 -max_cores 16
report_host_usage
start_hosts
##create_sceanario
create_scenario -name func.wcz -image loc1
create_scenario -name func.wc -image loc2
create_scenario -name func.wcl -image loc3current_session -all
current_scenario -allremote_execute {set_app_var eco_enable_mim trueset_app_var timing_save_pin_arrival_and_slack trueset_app_var read_parasitics_load_location trueset_app_var eco_enable_more_scenarios_than_hosts trueset_app_var eco_power_exclude_unconstrained_cells trueset eco_strict_pin_name_equivalence truemy_set_lib_cell_vt_pattern_and_base_ref_name -pattern {H11P63CPDULVT LVT SVT}set_app_var eco_alternative_cell_attribute_restrictions "area base_ref_name"
}remote_execute {
write_changes -reset
}remote_execute {define_user_attribute pt_dont_use -quiet -type boolean -class lib_cellset i {CK* DCCK*}foreach ii $i {set_user_attribute -class lib_cell [get_lib_cells */$ii -quiet] pt_dont_use trueecho "$ii already is setted dont use"}set_dont_touch [get_cells moduleA]##设置模块不被fixset_dont_touch [get_cells -filter "full_name =~ **xtop || full_name =~ fixHold" -hier]set_dont_touch [get_lib_cells */DCCK*] trueset_dont_touch [get_lib_cells */AP*] true
}remote_execute {set_max_transition 0.25 [current design]
}remote_execute {set pattern {ULVT LVT SVT}report_global_timing > pre_global_timing.rptreport_constraint -all -max_cap -max_transition > pre_constraint.rptreport_cell_usage -pattern_priority $pattern > pre_cell_usage.rptreport_threshold_voltage_group -pattern_priority $pattern > pre_cell_usage_detail.rpt
}if {1} {set pattern {}fix_eco_leakagew -pattern_priority $pattern -verbose -setup_margin 0.03
}remote_execute {write_changes -format text -output pt_text.tclwrite_changes -format ptsh -output pt_ptsh.tcl
}
##再使用脚本转化将ptsh文件变成innovus文件