## Fleeterpreter ##############################################################################
ifeq ($(impl),ml509)
-java = java -Xmx500m -Dfleet.impl=edu.berkeley.fleet.fpga.Fpga
+java = java -Xmx500m -Dfleet.impl='edu.berkeley.fleet.fpga.ML509$$Large'
+effort = high
+opt_for = area
+xil_ver=10.1
+else
+ifeq ($(impl),bee2)
+java = java -Xmx500m -Dfleet.impl=edu.berkeley.fleet.fpga.Bee2
+# BEE2 does not work with ISE 10.1
+xil_ver=9.1i
+effort = high
+opt_for = area
else
ifeq ($(impl),java)
java = java -Xmx500m -Dfleet.impl=edu.berkeley.fleet.interpreter.Interpreter
else
+ifeq ($(impl),small)
+java = java -Xmx500m -Dfleet.impl='edu.berkeley.fleet.fpga.ML509$$Small'
+effort = std
+opt_for = area
+xil_ver=10.1
+else
java = java -Xmx500m
endif
endif
+endif
+endif
cp = -cp fleet.jar:lib/RXTXcomm.jar
cd build/class/; jar xf ../../lib/edu.berkeley.sbp.jar
cd build/class/; jar xf ../../lib/ibex.jar
for A in `find ships -name \*.ship`;\
- do $(java) -cp fleet.jar:build/class edu.berkeley.fleet.Main expand $$A;\
+ do java \
+ -cp fleet.jar:build/class \
+ -Dfleet.impl=edu.berkeley.fleet.interpreter.Interpreter \
+ edu.berkeley.fleet.Main \
+ expand $$A;\
done
javac -classpath lib/com.sun.async.test.jar:lib/ibex.jar:lib/RXTXcomm.jar:build/class${ps}lib/edu.berkeley.sbp.jar -d build/class/ `find build/java -name \*.java`
echo 'Main-Class: edu.berkeley.fleet.Main' > build/class/manifest
# 128Gb ram, 2x4-core. small-config:1189s large-config:3065s
#host = amdr905-1.eecs.berkeley.edu
-# BEE2 does not work with ISE 10.1
-#remote_ise = /tools/xilinx/10.1/ISE
-#remote_edk = /tools/xilinx/10.1/EDK
-
-remote_ise = /tools/xilinx/ISE9.1i_lin
-remote_edk = /tools/xilinx/EDK9.1i
-
-#remote_dir = /vol/hitz/home/megacz/fleet/
-#remote_dir = /tmp/megacz/fleet/
-
remote_dir = /scratch/megacz/fleet/
-#remote_ise = /scratch/megacz/xilinx/10.1/ISE
-#remote_edk = /scratch/megacz/xilinx/10.1/EDK
+remote_ise = /tools/xilinx/${xil_ver}/ISE
+remote_edk = /tools/xilinx/${xil_ver}/EDK
+
#host = mm2.millennium.berkeley.edu
#remote_ise = /scratch/megacz/xilinx/ise/
#package = 7ff1704
device = ${part}${package}-${speed_grade}
-rsync = rsync --exclude=chips/marina/images -zare ssh --progress --verbose
+rsync = rsync --exclude=.git --exclude=chips/marina/images -zare ssh --progress --verbose
upload: fleet.jar build/fpga/main.bit
mkdir -p build
${rsync} ./ root@goliath:fleet/
build/fpga/main.bit: $(java_files) $(ship_files)
- make fleet.jar
+ make fleet.jar impl=${impl}
mkdir -p build/fpga
$(java) $(cp) edu.berkeley.fleet.fpga.Fpga build/fpga/
cp src/edu/berkeley/fleet/fpga/* build/fpga || true
done
ssh ${host} 'mkdir -p ${remote_dir}'
${rsync} --delete ./ ${host}:${remote_dir}
- time ssh ${host} 'make -C ${remote_dir} synth XILINX=${remote_ise} remote_ise=${remote_ise} remote_edk=${remote_edk}'
+ time ssh ${host} 'make -C ${remote_dir} synth XILINX=${remote_ise} remote_ise=${remote_ise} remote_edk=${remote_edk} impl=${impl}'
scp ${host}:${remote_dir}/build/fpga/main.bit build/fpga/
scp ${host}:${remote_dir}/build/fpga/main.ace build/fpga/
pcore = ${remote_edk}/hw/XilinxProcessorIPLib/pcores
intstyle = -intstyle xflow
-effort = std
-#effort = high
-opt_for = area
-#opt_for = speed
synth:
cd build/fpga; ln -sf ../../src/edu/berkeley/fleet/fpga/* .
cd build/fpga; ln -sf ../../src/edu/berkeley/fleet/fpga/mem/* .
$(java) -jar fleet.jar test ships/*.ship tests
$(java) -cp fleet.jar edu.berkeley.fleet.dataflow.MergeSort Memory 0 256
+demo: fleet.jar
+ $(java) -cp fleet.jar edu.berkeley.fleet.dataflow.SortingDemo
+
## Manual ####################################################################################
svgs = $(shell find doc -name \*.svg)
runtest: fleet.jar chips/marina/testCode/marina.xml chips/marina/testCode/marina.v chips/marina/testCode/marina.schematic-parasitics.spi
${rsync} --delete ./ ${sun_server}:~/fleet/
- time ssh -t -Y ${sun_server} 'cd ~/fleet/; make testlocal'
+ time ssh -t -Y ${sun_server} 'cd ~/fleet/; make testlocal impl=${impl}'
silicon: fleet.jar chips/marina/testCode/marina.xml
${rsync} --delete ./ ${sun_server}:~/fleet/
- time ssh -t -Y ${sun_server} 'cd ~/fleet/; make siliconlocal'
+ time ssh -t -Y ${sun_server} 'cd ~/fleet/; make siliconlocal impl=${impl}'
spice: fleet.jar
cp ~/omegaCounter.spi chips/marina/testCode/omegaCounter.spi
String impl = System.getProperty("fleet.impl");
if (impl==null) throw new RuntimeException("You must invoke the JVM with -Dfleet.impl=<impl>");
try {
- return (Fleet)Class.forName(impl).newInstance();
+ Class c = Class.forName(impl);
+ if (c==null) throw new RuntimeException("Fleet implementation class " + impl + " not found");
+ return (Fleet)c.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void main(String[] s) throws Exception {
- Fleet fleet = new Fpga();
+ Fleet fleet = Fleet.getDefaultImpl();
FleetProcess fp;
ShipPool pool = new ShipPool(fleet);
Ship mem1 = pool.allocateShip("Memory");
--- /dev/null
+package edu.berkeley.fleet.fpga;
+import edu.berkeley.fleet.fpga.*;
+import edu.berkeley.fleet.api.*;
+import java.io.*;
+
+public class Bee2 extends Fpga {
+
+ public Bee2() throws IOException {
+ for(int i=0; i<2; i++) createShip("Memory");
+ for(int i=0; i<8; i++) createShip("Alu");
+ for(int i=0; i<1; i++) createShip("Fifo");
+ for(int i=0; i<12; i++) createShip("Counter");
+
+ //createShip("CarrySaveAdder");
+ //createShip("Rotator");
+ createShip("Random");
+ createShip("Button");
+ createShip("Timer");
+
+ init();
+ }
+
+}
import edu.berkeley.fleet.two.PercolatedPort;
-public class Fpga extends FleetTwoFleet {
+public abstract class Fpga extends FleetTwoFleet {
public Module top;
Ship debugShip;
}
public static void main(String[] s) throws Exception {
- new Fpga(new Module("main")).top.dump(s[0]);
+ ((Fpga)Fleet.getDefaultImpl()).top.dump(s[0]);
PrintWriter pw;
pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(s[0]+"/timescale.v")));
return ship;
}
- public Fpga() throws Exception { this(new Module("main")); }
- public Fpga(Module top) throws Exception {
- this.top = top;
- debugShip = createShip("Debug");
-
- //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");
- createShip("Counter");
- createShip("CarrySaveAdder");
- createShip("Rotator");
- createShip("Lut3");
-
- } else {
-
- for(int i=0; i<2; i++) createShip("Memory");
- for(int i=0; i<8; i++) createShip("Alu");
- for(int i=0; i<1; i++) createShip("Fifo");
- for(int i=0; i<12; i++) createShip("Counter");
-
- //createShip("CarrySaveAdder");
- //createShip("Rotator");
- createShip("Random");
- createShip("Button");
-
- }
-
- createShip("Timer");
- createShip("DDR2");
- createShip("Dvi");
+ protected Fpga() throws IOException {
+ this.top = new Module("main");
+ this.debugShip = createShip("Debug");
+ }
+ protected void init() throws IOException {
// for FifoShip
new Module.InstantiatedModule(top, new FifoModule(8, WIDTH_WORD));
--- /dev/null
+package edu.berkeley.fleet.fpga;
+import edu.berkeley.fleet.fpga.*;
+import edu.berkeley.fleet.api.*;
+import java.io.*;
+
+public abstract class ML509 extends Fpga {
+
+ public ML509() throws IOException {
+ createShip("Timer");
+ }
+
+ public static class Large extends ML509 {
+ public Large() throws IOException {
+ for(int i=0; i<1; i++) createShip("Memory");
+ //for(int i=0; i<8; i++) createShip("Alu");
+ for(int i=0; i<4; i++) createShip("Alu");
+ for(int i=0; i<1; i++) createShip("Fifo");
+ for(int i=0; i<12; i++) createShip("Counter");
+ createShip("Random");
+ createShip("Button");
+ createShip("DDR2");
+ createShip("Dvi");
+
+ init();
+ }
+ }
+
+ public static class Small extends ML509 {
+ public Small() throws IOException {
+ 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");
+ createShip("Random");
+ createShip("Counter");
+ //createShip("CarrySaveAdder");
+ createShip("Rotator");
+ createShip("Lut3");
+
+ init();
+ }
+ }
+}
// Module Internals //////////////////////////////////////////////////////////////////////////////
public static class Module {
+ // order matters here
+ public LinkedHashMap<String,InstantiatedModule> instantiatedModules = new LinkedHashMap<String,InstantiatedModule>();
+
public void dump(String prefix) throws IOException {
PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(prefix+"/"+name+".v")));
dump(pw, true);
public Port getPort(String name) { return ports.get(name); }
// order matters here
- public LinkedHashMap<String,InstantiatedModule> instantiatedModules = new LinkedHashMap<String,InstantiatedModule>();
-
- // order matters here
public LinkedList<PercolatedPort> percolatedPorts = new LinkedList<PercolatedPort>();
public final ArrayList<Event> events = new ArrayList<Event>();
int i=0;
Log.quiet = !logging;
for(String s : ships) {
- createShip(ships[i], ships[i]+"_"+i);
+ try {
+ createShip(ships[i], ships[i]+"_"+i);
+ } catch (Exception e) {
+ System.err.println(e);
+ }
i++;
}
}
debugShip = ret;
return ret;
} catch (Exception e) {
- e.printStackTrace();
- return null;
+ throw new RuntimeException(e);
}
}