1 package edu.berkeley.slipway.mpar;
2 import byucc.edif.tools.merge.*;
6 import edu.berkeley.slipway.*;
7 import static edu.berkeley.slipway.mpar.MPARDemo.*;
9 public abstract class PhysicalDevice implements Iterable<PhysicalDevice.PhysicalNet> {
11 public abstract PhysicalCell getCell(int col, int row);
12 public abstract PhysicalCell randomCell(Random rand);
14 private HashSet<PhysicalNet> allPhysicalNets = new HashSet<PhysicalNet>();
15 public Iterator<PhysicalNet> iterator() { return allPhysicalNets.iterator(); }
17 public abstract class PhysicalCell {
18 public abstract PhysicalNet getNet(String name);
19 public abstract void setFunction(String type);
20 public abstract void place(NetList.Node n);
21 public abstract PhysicalCell randomCellWithin(Random rand, double percentOfDevice);
24 private int master_idx = 0;
26 public int getNumPhysicalNets() { return master_idx; }
27 public class PhysicalNet implements Iterable<PhysicalPip>, Comparable<PhysicalNet> {
29 public final int idx = master_idx++;
31 // temporary variables used during route searches
32 double distance = Double.MAX_VALUE;
33 double delay = Double.MAX_VALUE;
34 PhysicalNet backpointer = null;
37 boolean remaining = false;
40 public final HashSet<PhysicalPip> pips = new HashSet<PhysicalPip>();
44 /** ordering is based on distance so we can use the Java PriorityQueue class */
45 public int compareTo(PhysicalNet pn) {
46 double x = distance - pn.distance;
54 public Iterator<PhysicalPip> iterator() { return pips.iterator(); }
55 public PhysicalNet(String name) {
57 allPhysicalNets.add(this);
59 public String toString() { return name; }
60 private void addPip(PhysicalPip pip) { pips.add(pip); }
61 public PhysicalPip getPipFrom(PhysicalNet pn) {
62 for(PhysicalPip pip : pn)
63 for(PhysicalNet pn2 : pip.getDrivenNets())
70 public abstract class PhysicalPip {
71 public PhysicalNet driver;
72 public PhysicalNet[] driven;
75 double defaultDelay = 1;
76 public abstract boolean prohibited();
77 public String toString() { return name; }
78 public PhysicalNet getDriverNet() { return driver; }
79 public PhysicalNet[] getDrivenNets() { return driven; }
80 public double getDelay(PhysicalNet in, PhysicalNet out) { return defaultDelay; }
81 public double getCost(PhysicalNet in, PhysicalNet out) { return defaultCost; }
82 public abstract int getX();
83 public abstract int getY();
84 public PhysicalPip(String name, PhysicalNet driver, PhysicalNet[] driven) { this(name, driver, driven, wireCost); }
85 public PhysicalPip(String name, PhysicalNet driver, PhysicalNet[] driven, double defaultCost) {
90 if (driver != null) driver.addPip(this);
91 for(PhysicalNet pn : driven) pn.addPip(this);
93 public abstract void set(boolean connected);