eliminate direct access to handshake signals in FanoutModule
authoradam <adam@megacz.com>
Mon, 10 Nov 2008 11:26:14 +0000 (12:26 +0100)
committeradam <adam@megacz.com>
Mon, 10 Nov 2008 11:26:14 +0000 (12:26 +0100)
src/edu/berkeley/fleet/fpga/FanoutModule.java

index 360da16..250f536 100644 (file)
@@ -20,13 +20,17 @@ public class FanoutModule extends Module {
         Module.SinkPort   out1 = createOutputPort("out1", width, "");
         in.hasLatch = false;
         out0.hasLatch = false;
+        out0.forceNoLatch = true;
         out1.hasLatch = false;
-        addPreCrap("assign out0 = in;");
-        addPreCrap("assign out1 = in;");
-        addPreCrap("assign out0_r = in_r;");
-        addPreCrap("assign out1_r = in_r;");
-        addPreCrap("reg in_a__;");
-        addPreCrap("assign in_a = in_a__;");
-        addPreCrap("always @(posedge clk) begin if (out0_a && out1_a) in_a__ <= 1; if (!out0_a && !out1_a) in_a__ <= 0; end");
+        out1.forceNoLatch = true;
+
+        out0.latchDriver = in;
+        out1.latchDriver = in;
+
+        Module.StateWire  busy    = new StateWire("busy", false);
+        new Event(new Object[] { in, out0, out1, busy.isEmpty() },
+                  new Action[] {     out0, out1, busy.doFill() });
+        new Event(new Object[] { in, out0, out1, busy.isFull() },
+                  new Action[] { in,             busy.doDrain() });
     }
 }