From: adam Date: Mon, 3 Nov 2008 10:19:00 +0000 (+0100) Subject: add ir.Counter X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=d6e657721bb9b828e2c942519c519cdbb3df862c;p=fleet.git add ir.Counter --- diff --git a/src/edu/berkeley/fleet/ir/Counter.java b/src/edu/berkeley/fleet/ir/Counter.java new file mode 100644 index 0000000..e6ea2ab --- /dev/null +++ b/src/edu/berkeley/fleet/ir/Counter.java @@ -0,0 +1,329 @@ +package edu.berkeley.fleet.ir; +import java.util.concurrent.Semaphore; +import java.util.*; +import java.net.*; +import edu.berkeley.fleet.two.*; +import edu.berkeley.fleet.fpga.*; +import edu.berkeley.fleet.api.*; +import edu.berkeley.fleet.api.Instruction.*; +import edu.berkeley.fleet.api.Instruction.Set; +import edu.berkeley.fleet.api.Instruction.Set.*; +import edu.berkeley.fleet.ir.Context.LoopFactory; +import static edu.berkeley.fleet.util.BitManipulations.*; +import edu.berkeley.fleet.api.Instruction.Set.FlagFunction; +import edu.berkeley.fleet.api.Instruction.Set; +import edu.berkeley.fleet.api.Instruction.Set.SetDest; +import edu.berkeley.fleet.api.Instruction.Set.FlagFunction; +import static edu.berkeley.fleet.api.Predicate.*; +import edu.berkeley.fleet.ir.Context.LoopFactory; + +public class Counter { + + + /** + * Merge two sorted streams; it will issue tokens to provoke inputs + */ + public static Dock merger(Context ctx, + Ship alu, + Destination in1_ack, + int inflight_in1, + Destination in2_ack, + int inflight_in2, + Destination d) { + + Dock out = alu.getDock("out"); + Dock inOp = alu.getDock("inOp"); + Dock in1 = alu.getDock("in1"); + Dock in2 = alu.getDock("in2"); + + LoopFactory lf_in1 = ctx.new LoopFactory(in1, 1); + LoopFactory lf_in2 = ctx.new LoopFactory(in2, 1); + LoopFactory lf_inOp = ctx.new LoopFactory(inOp, 1); + + for(int i=0; i ai = new ArrayList(); + ctx.emit(ai); + for(Instruction ins : ai) + fp.sendInstruction(ins); + fp.flush(); + + System.out.println("reading sorted words..."); + for(int i=intsbig.length-1; i>=0; i--) { + BitVector bv = fp.recvWord(); + int x = (int)bv.toLong(); + if (x==intsbig[i]) System.out.println("agree " + x); + else System.out.println("DISAGREE " + x + " " + intsbig[i]); + } + System.out.println("done."); + } + +} \ No newline at end of file