summaryrefslogtreecommitdiffstats
path: root/src/phys/place/hpwl
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2008-01-30 20:01:00 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2008-01-30 20:01:00 -0800
commit0c6505a26a537dc911b6566f82d759521e527c08 (patch)
treef2687995efd4943fe3b1307fce7ef5942d0a57b3 /src/phys/place/hpwl
parent4d30a1e4f1edecff86d5066ce4653a370e59e5e1 (diff)
downloadabc-0c6505a26a537dc911b6566f82d759521e527c08.tar.gz
abc-0c6505a26a537dc911b6566f82d759521e527c08.tar.bz2
abc-0c6505a26a537dc911b6566f82d759521e527c08.zip
Version abc80130_2
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";