####
# procs
####
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
}
####
# body
####
set j_violation_list_f /path/to/the/max/transition/violation/file/tran
set j_f [open $j_violation_list_f r ]
while { [gets $j_f line ] != -1 } {
set j_violated_pin [lindex [regsub -all " +" $line " " ] 0 ]
set j_driver [get_flat_cells -of [get_flat_pins -hier -of [get_flat_nets -of $j_violated_pin ] -filter "direction == out" ] ]
set j_driver_name [get_object_name $j_driver ]
set j_driver_ref_name [get_attr $j_driver ref_name ]
set j_net_name [get_object_name [get_nets -of $j_violated_pin ] ]
if { [regexp IVX $j_driver_ref_name ] } {
puts "size_cell $j_driver_name C8T28SOI_LL_IVX43_P0"
} elseif { [regexp BFX $j_driver_ref_name ] } {
puts "size_cell $j_driver_name C8T28SOI_LL_BFX48_P0"
} else {
puts "size_cell $j_driver_name $j_driver_ref_name"
}
# output length more than 150um load pin
if { [get_attr [get_pins $j_violated_pin ] direction ] == "in" } {
if { [j_get_route_length $j_violated_pin ] > 150 } {
puts "add_buffer_on_route $j_net_name -cell_prefix TRAN0826 -repeater_distance 100 -lib_cell C8T28SOI_LL_BFX29_P0"
}
}
}
close $j_f
|