+++ /dev/null
-package edu.berkeley.fleet.ships;
-import edu.berkeley.fleet.interpreter.*;
-import edu.berkeley.fleet.*;
-
-import java.util.*;
-import java.io.*;
-
-/**
- * @author Adam Megacz <megacz@cs.berkeley.edu>
- */
-public class Adder extends InterpreterShip {
-
- private int link;
-
- DataInbox a = new DataInbox(this, "a");
- DataInbox b = new DataInbox(this, "b");
- DataOutbox out = new DataOutbox(this, "out");
-
- public String getBalsaName() { return "adder"; }
-
- public Adder(Interpreter fleet, String name) {
- super(fleet, name);
- }
-
- public void service() {
- if (!out.readyForDataFromShip()) return;
- if (!a.dataReadyForShip()) return;
- if (!b.dataReadyForShip()) return;
-
- int inA = a.removeDataForShip();
- int inB = b.removeDataForShip();
- int result = inA + inB;
-
- out.addDataFromShip(result);
- }
-}
+++ /dev/null
-package edu.berkeley.fleet.ships;
-import edu.berkeley.fleet.interpreter.*;
-import edu.berkeley.fleet.*;
-
-import java.util.*;
-import java.io.*;
-
-public class Alu1 extends InterpreterShip {
-
- DataInbox in = new DataInbox(this, "in");
- DataInbox op = new DataInbox(this, "op");
- DataOutbox out = new DataOutbox(this, "out");
-
- public Alu1(Interpreter fleet, String name) { super(fleet, name); }
-
- public String getBalsaName() { return "alu1"; }
-
- public void service() {
- if (in.dataReadyForShip() && op.dataReadyForShip()) {
- int data = in.removeDataForShip();
- int opcode = in.removeDataForShip();
- switch(opcode) {
- case 0: out.addDataFromShip(-1 * data); // NEG
- break;
- case 1: out.addDataFromShip(data+1); // INC
- break;
- case 2: out.addDataFromShip(data-1); // DEC
- break;
- case 3: out.addDataFromShip(Math.abs(data)); // ABS
- break;
- default: out.addDataFromShip(0);
- break;
- }
- }
- }
-
-}
+++ /dev/null
-package edu.berkeley.fleet.ships;
-import edu.berkeley.fleet.interpreter.*;
-import edu.berkeley.fleet.*;
-
-import java.util.*;
-import java.io.*;
-
-public class Alu2 extends InterpreterShip {
-
- DataInbox ap = new DataInbox(this, "a");
- DataInbox bp = new DataInbox(this, "b");
- DataInbox opp = new DataInbox(this, "op");
- DataOutbox out = new DataOutbox(this, "out");
-
- public Alu2(Interpreter fleet, String name) { super(fleet, name); }
-
- public String getBalsaName() { return "alu2"; }
-
- public void service() {
- if (ap.dataReadyForShip() && bp.dataReadyForShip() && opp.dataReadyForShip() && out.readyForItemFromShip()) {
- int a = ap.removeDataForShip();
- int b = bp.removeDataForShip();
- int op = opp.removeDataForShip();
- switch(op) {
- case 0: out.addDataFromShip(a+b); // ADD
- break;
- case 1: out.addDataFromShip(a-b); // SUB
- break;
- case 2: out.addDataFromShip(a*b); // MUL
- break;
- case 3: out.addDataFromShip(a/b); // DIV
- break;
- case 4: out.addDataFromShip(a%b); // REM
- break;
- default: out.addDataFromShip(0);
- break;
- }
- }
- }
-
-}
+++ /dev/null
-package edu.berkeley.fleet.ships;
-import edu.berkeley.fleet.interpreter.*;
-import edu.berkeley.fleet.*;
-
-import java.util.*;
-import java.io.*;
-
-public class Dcache extends InterpreterShip {
-
- DataInbox read_addr = new DataInbox(this, "read_addr");
- DataOutbox read_data = new DataOutbox(this, "read_data");
- DataInbox write_addr = new DataInbox(this, "write_addr");
- DataInbox write_data = new DataInbox(this, "write_data");
- TokenOutbox write_done = new TokenOutbox(this, "write_done");
-
- public Dcache(Interpreter fleet, String name) { super(fleet, name); }
-
- public String getBalsaName() { return "dcache"; }
-
- private long[] mem = new long[0];
- public long readMem(int addr) { return mem[addr]; }
- public void writeMem(int addr, long val) {
- if (addr >= mem.length) {
- long[] newmem = new long[addr * 2 + 1];
- System.arraycopy(mem, 0, newmem, 0, mem.length);
- mem = newmem;
- }
- mem[addr] = val;
- }
-
- public void service() {
- if (read_addr.dataReadyForShip() &&
- read_data.readyForItemFromShip()) {
- read_data.addDataFromShip((int)readMem(read_addr.removeDataForShip()));
- }
-
- if (write_addr.dataReadyForShip() &&
- write_data.dataReadyForShip() &&
- write_done.readyForItemFromShip()) {
- writeMem(write_addr.removeDataForShip(),
- write_data.removeDataForShip());
- write_done.addTokenFromShip();
- }
- }
-}
+++ /dev/null
-package edu.berkeley.fleet.ships;
-import edu.berkeley.fleet.interpreter.*;
-import edu.berkeley.fleet.*;
-
-import java.util.*;
-import java.io.*;
-
-public class Debug extends InterpreterShip {
-
- DataInbox data = new DataInbox(this, "data");
- DataOutbox out = new DataOutbox(this, "out", true);
-
- public String getBalsaName() { return "debug"; }
-
- public Debug(Interpreter fleet, String name) {
- super(fleet, name);
- }
-
- public void service() {
- if (data.dataReadyForShip())
- Log.println(Log.invert(" DEBUG: got a datum: " + data.removeDataForShip()+Log.clreol()));
- }
-
-}
+++ /dev/null
-package edu.berkeley.fleet.ships;
-import edu.berkeley.fleet.interpreter.*;
-import edu.berkeley.fleet.*;
-
-import java.util.*;
-import java.io.*;
-
-public class Execute extends InterpreterShip {
-
- DataInbox in = new DataInbox(this, "in", true);
- DataOutbox ihorn = new DataOutbox(this, "ihorn", true, true, false);
- DataOutbox dhorn = new DataOutbox(this, "dhorn", true, false, true);
-
- public String getBalsaName() { return "execute"; }
-
- public Execute(Interpreter fleet, String name) {
- super(fleet, name);
- }
-
- public void service() {
- //throw new Error("the Execute ship is only for FPGA simulations");
- }
-
-}
+++ /dev/null
-package edu.berkeley.fleet.ships;
-import edu.berkeley.fleet.interpreter.*;
-import edu.berkeley.fleet.*;
-
-import java.util.*;
-import java.io.*;
-
-public class FetchShip extends InterpreterShip {
-
- DataInbox codebag = new DataInbox(this, "codebag");
- TokenInbox release = new TokenInbox(this, "release");
- TokenInbox revoke = new TokenInbox(this, "revoke");
- TokenOutbox done = new TokenOutbox(this, "done");
-
- public FetchShip(Interpreter fleet, String name) {
- super(fleet, name);
- }
-
- public void service() {
- if (!codebag.dataReadyForShip()) return;
- if (!release.tokenReadyForShip() && !revoke.tokenReadyForShip()) return;
- if (!done.readyForTokenFromShip()) return;
- int cbd = codebag.removeDataForShip();
-
- CodeBag cb = CodeBag.getCodeBagByDescriptor(cbd);
- if (revoke.tokenReadyForShip()) {
- revoke.removeTokenForShip();
- Log.print("revoking codebag: " + cb + "\n");
- } else {
- release.removeTokenForShip();
- if (cb==null)
- throw new RuntimeException("bogus codebag -- this should not happen");
- cb.dispatch(getInterpreter());
- }
-
- done.addTokenFromShip();
- }
-
-}
+++ /dev/null
-package edu.berkeley.fleet.ships;
-import edu.berkeley.fleet.interpreter.*;
-import edu.berkeley.fleet.*;
-
-import java.util.*;
-import java.io.*;
-
-public class Fifo extends InterpreterShip {
-
- DataInbox in = new DataInbox(this, "in");
- DataOutbox out = new DataOutbox(this, "out");
-
- public String getBalsaName() { return "fifo"; }
-
- private Queue<Integer> fifo = new LinkedList<Integer>();
-
- public Fifo(Interpreter fleet, String name) {
- super(fleet, name);
- }
-
- public void service() {
- if (in.dataReadyForShip()) {
- fifo.add(in.removeDataForShip());
- //Log.println(name + ": fifo occupancy is now " + fifo.size() + " items");
- }
- if (out.readyForDataFromShip() && fifo.size() > 0) {
- out.addDataFromShip(fifo.remove());
- //Log.println(name + ": fifo occupancy is now " + fifo.size() + " items");
- }
- }
-
-}
+++ /dev/null
-package edu.berkeley.fleet.ships;
-import edu.berkeley.fleet.interpreter.*;
-import edu.berkeley.fleet.*;
-
-import java.util.*;
-import java.io.*;
-
-public class HaltShip extends InterpreterShip {
-
- TokenInbox in = new TokenInbox(this, "in");
-
- public HaltShip(Interpreter fleet, String name) {
- super(fleet, name);
- }
-
- public void service() {
- if (!in.tokenReadyForShip()) return;
- in.removeTokenForShip();
- ((Interpreter)getInterpreter()).halt = true;
- Log.println(Log.yellow(" HALT: ====== halt ship got a token; halting the fleet ======"));
- }
-
-}
+++ /dev/null
-package edu.berkeley.fleet.ships;
-import edu.berkeley.fleet.interpreter.*;
-import edu.berkeley.fleet.*;
-import edu.berkeley.fleet.api.*;
-
-import java.util.*;
-import java.io.*;
-
-public class Icache extends InterpreterShip {
-
- DataInbox write_addr = new DataInbox(this, "write_addr");
- DataInbox write_data = new DataInbox(this, "write_data");
- TokenOutbox write_done = new TokenOutbox(this, "write_done");
-
- DataInbox cbd = new DataInbox(this, "cbd");
-
- // only for hardware fleet
- DataInbox command = new DataInbox(this, "command", true);
- DataOutbox ihorn = new DataOutbox(this, "ihorn", true, true, false);
- DataOutbox dhorn = new DataOutbox(this, "dhorn", true, false, true);
-
- public Icache(Interpreter fleet, String name) { super(fleet, name); }
-
- public String getBalsaName() { return "icache"; }
-
- private long[] mem = new long[0];
- public long readMem(int addr) { return mem[addr]; }
- public void writeMem(int addr, long val) {
- if (addr >= mem.length) {
- long[] newmem = new long[addr * 2 + 1];
- System.arraycopy(mem, 0, newmem, 0, mem.length);
- mem = newmem;
- }
- mem[addr] = val;
- }
-
- public void dispatch(int addr, int size) {
- for(int i=addr; i<addr+size; i++) {
- Instruction instr = ((Interpreter)getFleet()).readInstruction(readMem(i));
- ((Interpreter)getFleet()).dispatch(instr, i);
- }
- }
-
- public void service() {
- if (cbd.dataReadyForShip()) {
- int val = cbd.removeDataForShip();
- int addr = val >> 6;
- int size = val & 0x3f;
- dispatch(addr, size);
- }
-
- if (write_addr.dataReadyForShip() &&
- write_data.dataReadyForShip() &&
- write_done.readyForItemFromShip()) {
- Interpreter f = (Interpreter)getFleet();
- f.writeMem(write_addr.removeDataForShip(),
- write_data.removeDataForShip());
- write_done.addTokenFromShip();
- }
- }
-
-}
+++ /dev/null
-package edu.berkeley.fleet.ships;
-import edu.berkeley.fleet.interpreter.*;
-import edu.berkeley.fleet.*;
-
-import java.util.*;
-import java.io.*;
-
-public class Lut extends InterpreterShip {
-
- DataInbox ap = new DataInbox(this, "a");
- DataInbox bp = new DataInbox(this, "b");
- DataInbox lutp = new DataInbox(this, "lut");
- DataOutbox out = new DataOutbox(this, "out");
-
- public Lut(Interpreter fleet, String name) { super(fleet, name); }
-
- public String getBalsaName() { return "lut"; }
-
- public void service() {
- if (ap.dataReadyForShip() && bp.dataReadyForShip() && lutp.dataReadyForShip()) {
- int a = ap.removeDataForShip();
- int b = bp.removeDataForShip();
- int lut = lutp.removeDataForShip();
- int ret = 0;
- if ((lut & 1) != 0) ret |= (~a) & (~b);
- if ((lut & 2) != 0) ret |= (a) & (~b);
- if ((lut & 4) != 0) ret |= (~a) & (b);
- if ((lut & 8) != 0) ret |= a & b;
- out.addDataFromShip(ret);
- }
- }
-
-}
+++ /dev/null
-package edu.berkeley.fleet.ships;
-import edu.berkeley.fleet.interpreter.*;
-import edu.berkeley.fleet.*;
-
-import java.util.*;
-import java.io.*;
-
-public class Shifter extends InterpreterShip {
-
- private int count = 0;
-
- DataInbox valp = new DataInbox(this, "val");
- DataInbox shamtp = new DataInbox(this, "shamt");
- DataOutbox out = new DataOutbox(this, "out");
-
- public Shifter(Interpreter fleet, String name) {
- super(fleet, name);
- }
-
- public String getBalsaName() { return "shift"; }
-
- public void service() {
- if (valp.dataReadyForShip() && shamtp.dataReadyForShip()) {
- int val = valp.removeDataForShip();
- int shamt = shamtp.removeDataForShip();
- if (shamt < 0) val = val >> (-1 * shamt);
- else val = val << shamt;
- out.addDataFromShip(val);
- }
- }
-
-}