add port percolation, use it for DRAM.ship
[fleet.git] / src / edu / berkeley / fleet / fpga / FpgaShip.java
1 package edu.berkeley.fleet.fpga;
2 import edu.berkeley.fleet.api.*;
3 import java.util.*;
4 import java.io.*;
5 import edu.berkeley.fleet.two.*;
6 import static edu.berkeley.fleet.two.FleetTwoFleet.*;
7 import static edu.berkeley.fleet.fpga.verilog.Verilog.*;
8
9 /** a ship, which belongs to a fleet and which may have many ports */
10 public class FpgaShip extends FleetTwoShip {
11         
12     private Module module;
13     private Module.InstantiatedModule instance;
14     private LinkedHashMap<String,FpgaDock> ports = new LinkedHashMap<String,FpgaDock>();
15
16     /** You should instantiate a bunch of Inboxes and Outboxes in your constructor */
17     public FpgaShip(Fpga fleet, ShipDescription sd) {
18         super(fleet, 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));
25         }
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);
30     }
31
32     public Iterator<Dock> iterator() { return (Iterator<Dock>)(Object)ports.values().iterator(); }
33
34     public Module.InstantiatedModule getVerilogModule() { return instance; }
35 }