布局布线和时序分析
笔记本


2019-08-26 13:35:38手动修transition的办法:找到driver->size up,如果线太长,则加buffer走来走去202.101.58.98

####
# 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

回到首页时钟 , 联系信箱:yzbox#163.com(把#换成@) 粤ICP备18155639号