首先,编写一个计算单根net长度的函数get_net_lenght。用dbGet把wires的每一段长度加起来。
proc get_net_length {net_name} {
set len_list [dbGet [dbGet -p1 top.nets.name ${net_name}].wires.length]
set sum 0
foreach num ${len_list} {
set sum [expr {$sum + $num}]
}
return $sum
}
再用dbGet取出所有的net,foreach遍历每一根net计算长度,并将结果puts到report文件里,如下。
set mylog [open "longnets.rpt" w]
set nets [dbGet top.nets.name]
foreach net $nets {
puts $mylog "${net},[get_net_length $net]"
}
close $mylog
longnets.rpt其实是一个csv(逗号分隔)文件,后续分析的话,可以用excel或者soffice打开,进行排序或者直方图统计。