eliminate direct access to handshake signals in FanoutModule
[fleet.git] / src / edu / berkeley / fleet / fpga / FanoutModule.java
1 package edu.berkeley.fleet.fpga;
2 import edu.berkeley.fleet.api.*;
3 import edu.berkeley.fleet.two.*;
4 import edu.berkeley.fleet.*;
5 import java.lang.reflect.*;
6 import edu.berkeley.sbp.chr.*;
7 import edu.berkeley.sbp.misc.*;
8 import edu.berkeley.sbp.meta.*;
9 import edu.berkeley.sbp.util.*;
10 import java.util.*;
11 import java.io.*;
12 import static edu.berkeley.fleet.two.FleetTwoFleet.*;
13 import static edu.berkeley.fleet.fpga.verilog.Verilog.*;
14
15 public class FanoutModule extends Module {
16     public FanoutModule(int width) {
17         super("fanout"+width);
18         Module.SourcePort in   = createInputPort ("in",   width);
19         Module.SinkPort   out0 = createOutputPort("out0", width, "");
20         Module.SinkPort   out1 = createOutputPort("out1", width, "");
21         in.hasLatch = false;
22         out0.hasLatch = false;
23         out0.forceNoLatch = true;
24         out1.hasLatch = false;
25         out1.forceNoLatch = true;
26
27         out0.latchDriver = in;
28         out1.latchDriver = in;
29
30         Module.StateWire  busy    = new StateWire("busy", false);
31         new Event(new Object[] { in, out0, out1, busy.isEmpty() },
32                   new Action[] {     out0, out1, busy.doFill() });
33         new Event(new Object[] { in, out0, out1, busy.isFull() },
34                   new Action[] { in,             busy.doDrain() });
35     }
36 }