diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2007-02-16 08:01:00 -0800 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2007-02-16 08:01:00 -0800 |
commit | 607c253cd2712bacce21ca9b98a848f331ea03a9 (patch) | |
tree | f1189c20d24fec46f4fef155de11d347144c59f3 /src/phys/place/hpwl | |
parent | 5f3e4c0fe21ba5e24db0c187a616a28afc0dabae (diff) | |
download | abc-607c253cd2712bacce21ca9b98a848f331ea03a9.tar.gz abc-607c253cd2712bacce21ca9b98a848f331ea03a9.tar.bz2 abc-607c253cd2712bacce21ca9b98a848f331ea03a9.zip |
Version abc70216
Diffstat (limited to 'src/phys/place/hpwl')
-rw-r--r-- | src/phys/place/hpwl | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/phys/place/hpwl b/src/phys/place/hpwl new file mode 100644 index 00000000..f69a1d05 --- /dev/null +++ b/src/phys/place/hpwl @@ -0,0 +1,57 @@ +#! /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"; |