3cb6bc58d7844fa9d59da5d999a84f073901c8a3
[fleet.git] / src / edu / berkeley / fleet / fpga / FifoModule.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 FifoModule extends Module {
16     public FifoModule(int len) {
17         super("fifo"+len);
18         Module.SourcePort  in  = createInputPort("in", WIDTH_PACKET);
19         Module.SinkPort    out = createOutputPort("out", WIDTH_PACKET, "");
20         Module.InstantiatedModule[] stages = new Module.InstantiatedModule[len];
21         if (len==0) {
22             new Event(new Object[] { in, out },
23                       new Action[] { in, out, new AssignAction(out, in) });
24         } else {
25             Module fifo0 = new FifoModule(0);
26             for(int i=0; i<=len; i++) {
27                 if (i<len) stages[i] = new Module.InstantiatedModule(this, fifo0);
28                 Module.SourcePort driver = i==0 ? in : stages[i-1].getOutputPort("out");
29                 Module.SinkPort   driven = i==len ? out : stages[i].getInputPort("in");
30                 driver.connect(driven);
31             }
32         }
33     }
34 }