From: adam Date: Mon, 10 Nov 2008 11:26:14 +0000 (+0100) Subject: eliminate direct access to handshake signals in FanoutModule X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=541d3e4c5063a9a1c53a1b8e2954270c698ef3a7;p=fleet.git eliminate direct access to handshake signals in FanoutModule --- diff --git a/src/edu/berkeley/fleet/fpga/FanoutModule.java b/src/edu/berkeley/fleet/fpga/FanoutModule.java index 360da16..250f536 100644 --- a/src/edu/berkeley/fleet/fpga/FanoutModule.java +++ b/src/edu/berkeley/fleet/fpga/FanoutModule.java @@ -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() }); } }