massive overhaul of fpga code
[fleet.git] / src / edu / berkeley / fleet / fpga / FunnelModule.java
index 3cc9256..49679a5 100644 (file)
@@ -1,6 +1,6 @@
 package edu.berkeley.fleet.fpga;
 import edu.berkeley.fleet.api.*;
-import edu.berkeley.fleet.ies44.*;
+import edu.berkeley.fleet.two.*;
 import edu.berkeley.fleet.*;
 import java.lang.reflect.*;
 import edu.berkeley.sbp.chr.*;
@@ -9,18 +9,22 @@ import edu.berkeley.sbp.meta.*;
 import edu.berkeley.sbp.util.*;
 import java.util.*;
 import java.io.*;
-import static edu.berkeley.fleet.ies44.InstructionEncoder.*;
+import static edu.berkeley.fleet.two.FleetTwoFleet.*;
 import static edu.berkeley.fleet.fpga.verilog.Verilog.*;
 
 
 public class FunnelModule extends Module {
 
+    private static final int WIDTH = WIDTH_PACKET;
+
     public FunnelModule() {
         super("funnel");
-        Module.SinkPort    outp = createOutputPort("out", WIDTH_PACKET, "");
+        Module.SinkPort    outp = createOutputPort("out", WIDTH, "");
         Module.SourcePort  in1p = createInputPort("in1", WIDTH_PACKET);
         Module.SourcePort  in2p = createInputPort("in2", WIDTH_PACKET);
-        new Event(new Object[] { in1p, outp },
+
+        // FIXME: biased towards in2p side
+        new Event(new Object[] { in1p, outp, "!"+in2p.getReq() },
                   new Action[] { in1p, outp,
                                  new AssignAction(outp, in1p) });
         new Event(new Object[] { in2p, outp },
@@ -32,12 +36,12 @@ public class FunnelModule extends Module {
         private FabricElement in1 = null;
         private FabricElement in2 = null;
         public FabricElement out = null;
-        public Module.Port getOutputPort() { return getOutputPort("out"); }
+        public Module.SourcePort getOutputPort() { return getOutputPort("out"); }
         public Module.Port getInputPort()  { throw new RuntimeException("funnel has multiple inputs"); }
-        public FunnelInstance(Module thisModule, Module.Port p1, Module.Port p2) {
+        public FunnelInstance(Module thisModule, Module.SourcePort p1, Module.SourcePort p2) {
             super(thisModule, new FunnelModule());
-            p1.connect(this.getInputPort("in1"));
-            p2.connect(this.getInputPort("in2"));
+            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());