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.*;
12 import static edu.berkeley.fleet.two.FleetTwoFleet.*;
13 import static edu.berkeley.fleet.fpga.verilog.Verilog.*;
15 public class FifoModule extends Module {
16 public FifoModule(int 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];
22 new Event(new Object[] { in, out },
23 new Action[] { in, out, new AssignAction(out, in) });
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);