set j_pin_list /path/to/max_transition.rpt
set j_f [open $j_pin_list r]
proc j_get_route_length { j_args } {
set j_route_length 0
if { [get_attr [get_nets -of $j_args ] route_length ] == 0 } { return 0 }
foreach obj [get_attr [get_nets -of $j_args ] route_length ] {
set j_route_length [expr $j_route_length + [lindex $obj 1 ] ]
}
return $j_route_length
}
while { [gets $j_f line ] != -1 } {
set j_violated_pin [lindex [regsub -all " +" $line " " ] 0 ]
if { $synopsys_program_name == "icc2_shell" } {
set j_net_length [ j_get_route_length $j_violated_pin ]
set j_net_name [get_object_name [get_nets -of $j_violated_pin ] ]
set j_driver_inst_name [get_object_name [get_flat_cells -hier -of [get_flat_pins -of $j_net_name -filter "direction == out" ] ] ]
set j_driver_cell [get_attr $j_driver_inst_name ref_name ]
if { ! [regexp X16 $j_driver_cell ] && ! [regexp MACRO_CELL_NAME $j_driver_cell ] } {
if { [regexp INV $j_driver_cell ] } {
puts "size_cell $j_driver_inst_name INV_REF_CELL_NAME"
} elseif { [regexp BUF $j_driver_cell ] } {
puts "size_cell $j_driver_inst_name BUF_REF_CELL_NAME"
} else {
puts "size_cell $j_driver_inst_name $j_driver_cell"
}
}
if { $j_net_length > 250 } {
puts "add_buffer_on_route $j_net_name -cell_prefix ECO0402XTALK -repeater_distance 200 -lib_cell BUF_REF_CELL_NAME"
}
}
if { $synopsys_program_name == "pt_shell" } {
set j_pin_slack [get_attr [get_timing_path -pba_mode path -through $j_violated_pin ] slack ]
if { $j_pin_slack < 0 } {
puts "$j_violated_pin slack is : $j_pin_slack"
}
}
}
|