import edu.berkeley.fleet.two.*;
import static edu.berkeley.fleet.two.FleetTwoFleet.*;
import static edu.berkeley.fleet.fpga.verilog.Verilog.*;
-import static edu.berkeley.fleet.fpga.verilog.Verilog.PercolatedPort;
+import edu.berkeley.fleet.two.PercolatedPort;
public class Fpga extends FleetTwoFleet {
// Setup //////////////////////////////////////////////////////////////////////////////
Ship createShip(String type) throws IOException {
- ShipDescription sd = new ShipDescription(type, new BufferedReader(new InputStreamReader(new FileInputStream("ships/"+type+".ship"))));
+ ShipDescription sd = new ShipDescription(this, type, new BufferedReader(new InputStreamReader(new FileInputStream("ships/"+type+".ship"))));
int count = 0;
for(Ship ship : ships.values()) if (ship.getType().equals(type)) count++;
String name = type+count;
this.top = top;
debugShip = createShip("Debug");
- boolean small = true;
- //boolean small = false;
+ //boolean small = true;
+ boolean small = false;
if (small) {
+ for(int i=0; i<2; i++) createShip("Alu");
for(int i=0; i<1; i++) createShip("Memory");
for(int i=0; i<2; i++) createShip("Fifo");
- for(int i=0; i<2; i++) createShip("Alu");
createShip("Counter");
createShip("CarrySaveAdder");
createShip("Rotator");
createShip("Lut3");
- createShip("DDR2");
+
} else {
- for(int i=0; i<3; i++) createShip("Memory");
- for(int i=0; i<3; i++) createShip("Alu");
- for(int i=0; i<2; i++) createShip("Fifo");
- for(int i=0; i<14; i++) createShip("Counter");
- // "really big" configuration: 138 docks
- for(int i=0; i<4; i++) createShip("Alu");
+ for(int i=0; i<2; i++) createShip("Memory");
+ for(int i=0; i<6; i++) createShip("Alu");
+ //for(int i=0; i<2; i++) createShip("Fifo");
+ for(int i=0; i<12; i++) createShip("Counter");
+ //for(int i=0; i<2; i++) createShip("Null");
+
//createShip("CarrySaveAdder");
//createShip("Rotator");
- //createShip("Lut3");
+ createShip("Random");
+ createShip("Button");
- createShip("DDR2");
- //createShip("Video");
}
+ createShip("Timer");
+ createShip("DDR2");
+ createShip("Dvi");
+
// for FifoShip
new Module.InstantiatedModule(top, new FifoModule(8, WIDTH_WORD));
final Module.SourcePort sp = sp0;
sources.add(new FabricElement.AbstractFabricElement() {
private FabricElement upstream;
+ public int getPathLength(FpgaDestination dest) { return upstream.getPathLength(dest); }
public FpgaPath getPath(FpgaDestination dest, BitVector signal) { return upstream.getPath(dest, signal); }
public void addOutput(FabricElement out, Module.Port outPort) {
this.upstream = out;
try {
if (sd.getSection("fpga")==null) return;
String filename = sd.getName().toLowerCase();
+
+ if (sd.getSection("ucf") != null) {
+ File outf = new File("build/fpga/"+filename+".ucf");
+ FileOutputStream out = new FileOutputStream(outf);
+ PrintWriter pw = new PrintWriter(out);
+ pw.println(sd.getSection("ucf"));
+ pw.flush();
+ pw.close();
+ }
+
File outf = new File("build/fpga/"+filename+".v");
new File(outf.getParent()).mkdirs();
System.err.println("writing to " + outf);
pw.println("`define "+name+"_full ("+name+"_r && !"+name+"_a)");
pw.println("`define "+name+"_empty (!"+name+"_r && !"+name+"_a)");
if (dd.isInputDock()) {
+ // gets stuck on colliding-tokens
//pw.println("`define drain_"+name+" if ("+name+"_r && !"+name+"_a) "+name+"_a <= 1;");
+
+ // gets stuck on colliding-tokens
+ //pw.println("`define drain_"+name+" if ("+name+"_r) "+name+"_a <= 1;");
+
+ // also gets stuck
+ //pw.println("`define drain_"+name+" if (!"+name+"_a) "+name+"_a <= 1;");
pw.println("`define drain_"+name+" "+name+"_a <= 1;");
} else {
pw.println("`define fill_"+name+" "+name+"_r <= 1;");
pw.println(" in_r, in_a__, in_d,");
pw.println(" out_r__, out_a, out_d_);");
pw.println(" always @(posedge clk) begin");
- pw.println(" if (!rst) begin");
+ pw.println(" if (rst) begin");
pw.println(" `reset");
pw.println(" end else begin");
pw.println(" `cleanup");