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>();
15 LinkedHashMap<String,Module.SourcePort> docklessPorts = new LinkedHashMap<String,Module.SourcePort>();
17 /** You should instantiate a bunch of Inboxes and Outboxes in your constructor */
18 public FpgaShip(Fpga fleet, ShipDescription sd) {
20 this.module = new Module(getType().toLowerCase());
21 this.instance = new Module.InstantiatedModule(fleet.getVerilogModule(), module);
22 for(DockDescription sdbb : sd.ports()) {
23 if (sdbb.isDockless()) {
24 module.createOutputPort(sdbb.getName(), fleet.WIDTH_PACKET);
25 docklessPorts.put(sdbb.getName(), instance.getOutputPort(sdbb.getName()));
27 if (sdbb.isInputDock()) module.createInputPort(sdbb.getName(), getFleet().getWordWidth()+1);
28 else module.createOutputPort(sdbb.getName(), getFleet().getWordWidth()+1);
29 ports.put(sdbb.getName(), new FpgaDock(this, sdbb));
32 for(PercolatedPort pp : sd.percolatedPorts)
33 this.module.percolatedPorts.add(pp);
36 public Iterator<Dock> iterator() { return (Iterator<Dock>)(Object)ports.values().iterator(); }
38 public Module.InstantiatedModule getVerilogModule() { return instance; }