1 package edu.berkeley.fleet.fpga;
2 import edu.berkeley.fleet.api.*;
5 import edu.berkeley.fleet.two.*;
6 import static edu.berkeley.fleet.two.FleetTwoFleet.*;
7 import static edu.berkeley.fleet.fpga.verilog.Verilog.*;
9 /** a ship, which belongs to a fleet and which may have many ports */
10 public class FpgaShip extends FleetTwoShip {
12 private Module module;
13 private Module.InstantiatedModule instance;
14 private LinkedHashMap<String,FpgaDock> ports = new LinkedHashMap<String,FpgaDock>();
16 /** You should instantiate a bunch of Inboxes and Outboxes in your constructor */
17 public FpgaShip(Fpga fleet, ShipDescription sd) {
19 this.module = new Module(getType().toLowerCase());
20 this.instance = new Module.InstantiatedModule(fleet.getVerilogModule(), module);
21 for(DockDescription sdbb : sd) {
22 if (sdbb.isInputDock()) module.createInputPort(sdbb.getName(), getFleet().getWordWidth()+1);
23 else module.createOutputPort(sdbb.getName(), getFleet().getWordWidth()+1, "");
24 ports.put(sdbb.getName(), new FpgaDock(this, sdbb));
26 if (getType().toLowerCase().equals("debug"))
27 module.createOutputPort("debug_out", getFleet().getWordWidth(), "");
28 for(PercolatedPort pp : sd.percolatedPorts)
29 this.module.percolatedPorts.add(pp);
32 public Iterator<Dock> iterator() { return (Iterator<Dock>)(Object)ports.values().iterator(); }
34 public Module.InstantiatedModule getVerilogModule() { return instance; }