From 28e41c98c299d834bb5ec9a749126d858dc81bf0 Mon Sep 17 00:00:00 2001 From: Adam Megacz Date: Sat, 29 Aug 2009 21:00:40 -0700 Subject: [PATCH] Break Fpga.java into separate subclasses for ML509.Large, ML509.Small, and Bee2 --- Makefile | 58 ++++++++++++-------- src/edu/berkeley/fleet/api/Fleet.java | 4 +- src/edu/berkeley/fleet/dataflow/MemoryNode.java | 2 +- src/edu/berkeley/fleet/fpga/Bee2.java | 23 ++++++++ src/edu/berkeley/fleet/fpga/Fpga.java | 43 +++------------ src/edu/berkeley/fleet/fpga/ML509.java | 42 ++++++++++++++ src/edu/berkeley/fleet/fpga/verilog/Verilog.java | 6 +- .../berkeley/fleet/interpreter/Interpreter.java | 9 ++- 8 files changed, 120 insertions(+), 67 deletions(-) create mode 100644 src/edu/berkeley/fleet/fpga/Bee2.java create mode 100644 src/edu/berkeley/fleet/fpga/ML509.java diff --git a/Makefile b/Makefile index bcd8f97..e2f407b 100644 --- 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 diff --git a/src/edu/berkeley/fleet/api/Fleet.java b/src/edu/berkeley/fleet/api/Fleet.java index 0e9700c..480956c 100644 --- a/src/edu/berkeley/fleet/api/Fleet.java +++ b/src/edu/berkeley/fleet/api/Fleet.java @@ -66,7 +66,9 @@ public abstract class Fleet implements Iterable { String impl = System.getProperty("fleet.impl"); if (impl==null) throw new RuntimeException("You must invoke the JVM with -Dfleet.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); } diff --git a/src/edu/berkeley/fleet/dataflow/MemoryNode.java b/src/edu/berkeley/fleet/dataflow/MemoryNode.java index e72f1c1..b53e3bc 100644 --- a/src/edu/berkeley/fleet/dataflow/MemoryNode.java +++ b/src/edu/berkeley/fleet/dataflow/MemoryNode.java @@ -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 index 0000000..701f262 --- /dev/null +++ b/src/edu/berkeley/fleet/fpga/Bee2.java @@ -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(); + } + +} diff --git a/src/edu/berkeley/fleet/fpga/Fpga.java b/src/edu/berkeley/fleet/fpga/Fpga.java index 6a6734c..26bbc8f 100644 --- a/src/edu/berkeley/fleet/fpga/Fpga.java +++ b/src/edu/berkeley/fleet/fpga/Fpga.java @@ -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 index 0000000..abfba4c --- /dev/null +++ b/src/edu/berkeley/fleet/fpga/ML509.java @@ -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(); + } + } +} diff --git a/src/edu/berkeley/fleet/fpga/verilog/Verilog.java b/src/edu/berkeley/fleet/fpga/verilog/Verilog.java index de2bfba..31d96ab 100644 --- a/src/edu/berkeley/fleet/fpga/verilog/Verilog.java +++ b/src/edu/berkeley/fleet/fpga/verilog/Verilog.java @@ -325,6 +325,9 @@ public class Verilog { // Module Internals ////////////////////////////////////////////////////////////////////////////// public static class Module { + // order matters here + public LinkedHashMap instantiatedModules = new LinkedHashMap(); + 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 instantiatedModules = new LinkedHashMap(); - - // order matters here public LinkedList percolatedPorts = new LinkedList(); public final ArrayList events = new ArrayList(); diff --git a/src/edu/berkeley/fleet/interpreter/Interpreter.java b/src/edu/berkeley/fleet/interpreter/Interpreter.java index 7ff19cc..311a0aa 100644 --- a/src/edu/berkeley/fleet/interpreter/Interpreter.java +++ b/src/edu/berkeley/fleet/interpreter/Interpreter.java @@ -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); } } -- 1.7.10.4