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 {
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("Timer");
createShip("DDR2");
+ createShip("Dvi");
+
} else {
+
+ for(int i=0; i<2; 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<11; i++) createShip("Counter");
+
+ /*
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");
// "really big" configuration: 138 docks
for(int i=0; i<4; i++) createShip("Alu");
+ */
+
//createShip("CarrySaveAdder");
//createShip("Rotator");
//createShip("Lut3");
+ createShip("Timer");
createShip("DDR2");
- //createShip("Video");
+ createShip("Dvi");
}
// for FifoShip
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");