summaryrefslogtreecommitdiffstats
path: root/src/phys/place/hpwl
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2007-02-16 08:01:00 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2007-02-16 08:01:00 -0800
commit607c253cd2712bacce21ca9b98a848f331ea03a9 (patch)
treef1189c20d24fec46f4fef155de11d347144c59f3 /src/phys/place/hpwl
parent5f3e4c0fe21ba5e24db0c187a616a28afc0dabae (diff)
downloadabc-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/hpwl57
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";