Break Fpga.java into separate subclasses for ML509.Large, ML509.Small, and Bee2
authorAdam Megacz <adam@megacz.com>
Sun, 30 Aug 2009 04:00:40 +0000 (21:00 -0700)
committerAdam Megacz <adam@megacz.com>
Sun, 30 Aug 2009 04:00:40 +0000 (21:00 -0700)
Makefile
src/edu/berkeley/fleet/api/Fleet.java
src/edu/berkeley/fleet/dataflow/MemoryNode.java
src/edu/berkeley/fleet/fpga/Bee2.java [new file with mode: 0644]
src/edu/berkeley/fleet/fpga/Fpga.java
src/edu/berkeley/fleet/fpga/ML509.java [new file with mode: 0644]
src/edu/berkeley/fleet/fpga/verilog/Verilog.java
src/edu/berkeley/fleet/interpreter/Interpreter.java

index bcd8f97..e2f407b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2,14 +2,32 @@
 ## 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
 
@@ -30,7 +48,11 @@ fleet.jar: $(java_files) $(ship_files) src/edu/berkeley/fleet/assembler/fleet.g
        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
@@ -45,19 +67,10 @@ host = intel2950-5.eecs.berkeley.edu
 # 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/
@@ -94,7 +107,7 @@ board = ml505   # ??
 #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
@@ -102,7 +115,7 @@ upload: fleet.jar build/fpga/main.bit
        ${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
@@ -111,16 +124,12 @@ build/fpga/main.bit: $(java_files) $(ship_files)
          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/* .
@@ -240,6 +249,9 @@ test:     fleet.jar
        $(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)
@@ -370,11 +382,11 @@ testnum = 0
 
 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
index 0e9700c..480956c 100644 (file)
@@ -66,7 +66,9 @@ public abstract class Fleet implements Iterable<Ship> {
         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);
         }
index e72f1c1..b53e3bc 100644 (file)
@@ -164,7 +164,7 @@ public class MemoryNode extends Node {
     }
 
     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");
diff --git a/src/edu/berkeley/fleet/fpga/Bee2.java b/src/edu/berkeley/fleet/fpga/Bee2.java
new file mode 100644 (file)
index 0000000..701f262
--- /dev/null
@@ -0,0 +1,23 @@
+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();
+    }
+
+}
index 6a6734c..26bbc8f 100644 (file)
@@ -16,7 +16,7 @@ import static edu.berkeley.fleet.fpga.verilog.Verilog.*;
 import edu.berkeley.fleet.two.PercolatedPort;
 
 
-public class Fpga extends FleetTwoFleet {
+public abstract class Fpga extends FleetTwoFleet {
 
     public  Module top;
     Ship debugShip;
@@ -33,7 +33,7 @@ public class Fpga extends FleetTwoFleet {
     }
 
     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")));
@@ -73,41 +73,12 @@ public class Fpga extends FleetTwoFleet {
         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));
 
diff --git a/src/edu/berkeley/fleet/fpga/ML509.java b/src/edu/berkeley/fleet/fpga/ML509.java
new file mode 100644 (file)
index 0000000..abfba4c
--- /dev/null
@@ -0,0 +1,42 @@
+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();
+        }
+    }
+}
index de2bfba..31d96ab 100644 (file)
@@ -325,6 +325,9 @@ public class Verilog {
     // 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);
@@ -338,9 +341,6 @@ public class Verilog {
         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>();
 
index 7ff19cc..311a0aa 100644 (file)
@@ -70,7 +70,11 @@ public class Interpreter extends FleetTwoFleet {
         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++;
         }
     }
@@ -90,8 +94,7 @@ public class Interpreter extends FleetTwoFleet {
                 debugShip = ret;
             return ret;
         } catch (Exception e) {
-            e.printStackTrace();
-            return null;
+            throw new RuntimeException(e);
         }
     }