blob: f69a1d0540fda48ac3d0012528177ac2850f4538 [file] [log] [blame]
#! /usr/bin/perl
$netsfile = shift;
$plfile = shift;
# ------------------------------ read placement
open FILE, $plfile;
while (<FILE>) {
chop;
if (/(\w+)\s+([\-\d\.]+)\s+([\-\d\.]+)\s+\:/) {
$loc{$1} = "$2 $3";
}
}
close FILE;
open FILE, $netsfile;
while (<FILE>) {
chop;
$net = $2 if /NetDegree\s+\:\s+(\d+)\s+(\w+)/;
if (/(\w+)\s+(\w+)\s+\:/) {
$netconn{$net} .= "$1 ";
$cellconn{$1} .= "$net ";
}
}
close FILE;
# ----------------------------- compute HPWL
$hpwl = 0;
foreach $net (keys %netconn) {
@conns = split ' ',$netconn{$net};
$min_x = $min_y = 1e12;
$max_x = $max_y = -1e12;
foreach $cell (@conns) {
if (!exists $loc{$cell}) {
print "WARNING: Unknown cell location: $cell\n";
} else {
($x, $y) = split ' ',$loc{$cell};
$min_x = $x if $x < $min_x;
$min_y = $y if $y < $min_y;
$max_x = $x if $x > $max_x;
$max_y = $y if $y > $max_y;
}
}
if ($min_x eq 1e12 or $min_y eq 1e12 or
$max_x eq -1e12 or $max_y eq -1e12) {
print "WARNING: Unbounded box\n";
} else {
$hpwl = $hpwl + $max_x - $min_x + $max_y - $min_y;
}
}
print "HPWL = ";
printf "%e",$hpwl;
print "\n";