make HornModule and FunnelModule take an Fpga argument
authoradam <adam@megacz.com>
Mon, 3 Nov 2008 09:45:19 +0000 (10:45 +0100)
committeradam <adam@megacz.com>
Mon, 3 Nov 2008 09:45:19 +0000 (10:45 +0100)
src/edu/berkeley/fleet/fpga/Fpga.java
src/edu/berkeley/fleet/fpga/FunnelModule.java
src/edu/berkeley/fleet/fpga/HornModule.java

index bc0aca5..36c2024 100644 (file)
@@ -142,7 +142,7 @@ public class Fpga extends FleetTwoFleet {
         dests.addAll(outbox_dests);
         top_horn = mkNode((FabricElement[])dests.toArray(new FabricElement[0]), true);
         FabricElement   source  = mkNode((FabricElement[])sources.toArray(new FabricElement[0]), false);
-        FunnelModule.FunnelInstance top_funnel = new FunnelModule.FunnelInstance(top, null, source.getOutputPort());
+        FunnelModule.FunnelInstance top_funnel = new FunnelModule.FunnelInstance(this, top, null, source.getOutputPort());
         ((FunnelModule.FunnelInstance)source).out = top_funnel;
         //top_horn.addInput(top_funnel, top_funnel.getOutputPort());
         top_funnel.addOutput(top_horn, top_horn.getInputPort());
@@ -178,8 +178,8 @@ public class Fpga extends FleetTwoFleet {
                 FabricElement leftPort  = mkNode(ports, is_horn,  start,         (end+start)/2);
                 FabricElement rightPort = mkNode(ports, is_horn,  (end+start)/2, end);
                 return is_horn
-                    ? new HornModule.HornInstance(top,     leftPort, rightPort)
-                    : new FunnelModule.FunnelInstance(top, leftPort, rightPort);
+                    ? new HornModule.HornInstance(this, top,     leftPort, rightPort)
+                    : new FunnelModule.FunnelInstance(this, top, leftPort, rightPort);
             }
         }
     }
index 49679a5..7003a54 100644 (file)
@@ -15,13 +15,11 @@ import static edu.berkeley.fleet.fpga.verilog.Verilog.*;
 
 public class FunnelModule extends Module {
 
-    private static final int WIDTH = WIDTH_PACKET;
-
-    public FunnelModule() {
+    public FunnelModule(Fpga fpga) {
         super("funnel");
-        Module.SinkPort    outp = createOutputPort("out", WIDTH, "");
-        Module.SourcePort  in1p = createInputPort("in1", WIDTH_PACKET);
-        Module.SourcePort  in2p = createInputPort("in2", WIDTH_PACKET);
+        Module.SinkPort    outp = createOutputPort("out", fpga.WIDTH_PACKET, "");
+        Module.SourcePort  in1p = createInputPort("in1", fpga.WIDTH_PACKET);
+        Module.SourcePort  in2p = createInputPort("in2", fpga.WIDTH_PACKET);
 
         // FIXME: biased towards in2p side
         new Event(new Object[] { in1p, outp, "!"+in2p.getReq() },
@@ -38,13 +36,13 @@ public class FunnelModule extends Module {
         public FabricElement out = null;
         public Module.SourcePort getOutputPort() { return getOutputPort("out"); }
         public Module.Port getInputPort()  { throw new RuntimeException("funnel has multiple inputs"); }
-        public FunnelInstance(Module thisModule, Module.SourcePort p1, Module.SourcePort p2) {
-            super(thisModule, new FunnelModule());
+        public FunnelInstance(Fpga fpga, Module thisModule, Module.SourcePort p1, Module.SourcePort p2) {
+            super(thisModule, new FunnelModule(fpga));
             if (p1 != null) p1.connect(this.getInputPort("in1"));
             if (p2 != null) p2.connect(this.getInputPort("in2"));
         }
-        public FunnelInstance(Module thisModule, FabricElement in1, FabricElement in2) {
-            super(thisModule, new FunnelModule());
+        public FunnelInstance(Fpga fpga, Module thisModule, FabricElement in1, FabricElement in2) {
+            super(thisModule, new FunnelModule(fpga));
             this.in1 = in1;
             this.in2 = in2;
             in1.addOutput(this, this.getInputPort("in1"));
index 0b3c73a..83b91e2 100644 (file)
@@ -15,10 +15,10 @@ import static edu.berkeley.fleet.fpga.verilog.Verilog.*;
 
 public class HornModule extends Module {
 
-    public HornModule() {
-        this(PACKET_DEST.width-1,
-             PACKET_DEST.valmaskmax,
-             PACKET_DEST.valmaskmin,
+    public HornModule(Fpga fpga) {
+        this(fpga.PACKET_DEST.width-1,
+             fpga.PACKET_DEST.valmaskmax,
+             fpga.PACKET_DEST.valmaskmin,
              0);
     }
     private HornModule(int top,
@@ -53,8 +53,8 @@ public class HornModule extends Module {
         public void addInput(FabricElement in, Module.Port source) { source.connect(getInputPort("in")); }
         public Module.SourcePort getOutputPort() { throw new RuntimeException("horn has multiple outputs"); }
         public Module.Port getInputPort()  { return getInputPort("in"); }
-        public HornInstance(Module thisModule, FabricElement out0, FabricElement out1) {
-            super(thisModule, new HornModule());
+        public HornInstance(Fpga fpga, Module thisModule, FabricElement out0, FabricElement out1) {
+            super(thisModule, new HornModule(fpga));
             this.out0 = out0;
             this.out1 = out1;
             out0.addInput(this, getOutputPort("out0"));