芯片的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 loc3
current_session -all
current_scenario -all
remote_execute {
set_app_var eco_enable_mim true
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
set eco_strict_pin_name_equivalence true
my_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_cell
set i {CK* DCCK*}
foreach ii $i {
set_user_attribute -class lib_cell [get_lib_cells */$ii -quiet] pt_dont_use true
echo "$ii already is setted dont use"
}
set_dont_touch [get_cells moduleA]
##设置模块不被fix
set_dont_touch [get_cells -filter "full_name =~ **xtop || full_name =~ fixHold" -hier]
set_dont_touch [get_lib_cells */DCCK*] true
set_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.rpt
report_constraint -all -max_cap -max_transition > pre_constraint.rpt
report_cell_usage -pattern_priority $pattern > pre_cell_usage.rpt
report_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.tcl
write_changes -format ptsh -output pt_ptsh.tcl
}
##再使用脚本转化将ptsh文件变成innovus文件