From: Adam Megacz Date: Tue, 17 Mar 2009 17:23:20 +0000 (+0000) Subject: update MarinaTest to use new instruction constructors (no looping bit) X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=aa805ef9111d52905d79d5463484794035e0517a;p=fleet.git update MarinaTest to use new instruction constructors (no looping bit) --- diff --git a/testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java b/testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java index d249de0..8abc59d 100644 --- a/testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java +++ b/testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java @@ -482,7 +482,6 @@ public class MarinaTest { prln("send token"); marina.instrIn.fill( new Instruction.Move(DOCK, - false, /* requeueing */ Predicate.IgnoreFlagD, /* predicate */ false, /* torpedoable */ null, /* path */ @@ -509,14 +508,13 @@ public class MarinaTest { prln("ILC=1"); marina.instrIn.fill( - new Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 1)); + new Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 1)); getCtrsFlags(marina); prln("send data"); marina.instrIn.fill( new Instruction.Move(DOCK, - false, /* requeueing */ Predicate.IgnoreFlagD, /* predicate */ false, /* torpedoable */ null, /* path */ @@ -545,7 +543,7 @@ public class MarinaTest { prln("ILC=\\infty"); marina.instrIn.fill( - new Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,SetSource.Infinity)); + new Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,SetSource.Infinity)); getCtrsFlags(marina); @@ -567,7 +565,7 @@ public class MarinaTest { private void setOLC(Marina marina, int olc) { // ugly hack, to be removed when we fix the zero-detect circuit for(int i=0; i<2; i++) { - marina.instrIn.fill(new Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, olc)); + marina.instrIn.fill(new Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, olc)); } } @@ -592,7 +590,6 @@ public class MarinaTest { prln("Inserting ["+(predicate_olc_nonzero?"olc!=0":"olc==0")+"] send data"); marina.instrIn.fill(new Instruction.Move(DOCK, - false, /* requeueing */ predicate_olc_nonzero /* predicate */ ? only_if_olc_nonzero : only_if_olc_zero @@ -628,7 +625,7 @@ public class MarinaTest { for(boolean flag_a : new boolean[] { false, true }) { for(boolean flag_b : new boolean[] { false, true }) { prln("Setting flags, a="+flag_a+" b="+flag_b); - marina.instrIn.fill(new Instruction.Set(DOCK,false,Predicate.IgnoreFlagD, + marina.instrIn.fill(new Instruction.Set(DOCK,Predicate.IgnoreFlagD, flag_a ? Instruction.Set.FlagFunction.ONE : Instruction.Set.FlagFunction.ZERO, @@ -649,9 +646,8 @@ public class MarinaTest { prln("Attempting send data with a="+flag_a+", b="+flag_b+", predicate="+predicate.getClass().getName()); adjustIndent(2); - marina.instrIn.fill(new Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 1)); + marina.instrIn.fill(new Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 1)); marina.instrIn.fill(new Instruction.Move(DOCK, - false, /* requeueing */ predicate, /* predicate */ false, /* torpedoable */ null, /* path */ @@ -706,7 +702,7 @@ public class MarinaTest { int inOlc = 0x20 >> i; prln("Set inOlc="+inOlc); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, inOlc)); + Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, inOlc)); int outOlc = marina.getOLC(); fatal(outOlc!=inOlc, "walkOneOLC: got="+outOlc+" expected="+inOlc); } @@ -722,7 +718,7 @@ public class MarinaTest { prln("inIlc="+inIlc); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, inIlc)); + Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, inIlc)); Ilc ilc = marina.getILC(); int outIlc = ilc.getCount(); @@ -735,7 +731,7 @@ public class MarinaTest { } prln("Now test the infinity bit"); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, SetSource.Infinity)); + Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, SetSource.Infinity)); Ilc ilc = marina.getILC(); fatal(!ilc.getInfinity(), "bad Infinity bit: false"); adjustIndent(-2); @@ -748,7 +744,7 @@ public class MarinaTest { prln("Set ILC=63"); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, maxIlc)); + Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, maxIlc)); int ilc = marina.getILC().getCount(); fatal(ilc!=maxIlc, "bad ILC count: "+ilc+" expected: "+maxIlc); @@ -756,7 +752,6 @@ public class MarinaTest { prln("execute a move instruction that does nothing except decrement the ILC to zero"); marina.instrIn.fill( new Instruction.Move(DOCK, - false, /* requeueing */ Predicate.IgnoreFlagD, /* predicate */ false, /* torpedoable */ null, /* path */ @@ -785,13 +780,13 @@ public class MarinaTest { adjustIndent(2); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, maxOlc)); + Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, maxOlc)); for (int i=maxOlc; i>=0; i--) { prln("OLC should be: "+i); int olc = marina.getOLC(); fatal(olc!=i, "bad OLC: "+olc+" expected: "+i); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, SetSource.Decrement)); + Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, SetSource.Decrement)); } adjustIndent(-2); @@ -820,7 +815,6 @@ public class MarinaTest { private static final Instruction NOP = new Instruction.Move(DOCK, - false, /* requeueing */ Predicate.IgnoreFlagD, /* predicate */ false, /* torpedoable */ null, /* path */ @@ -834,7 +828,6 @@ public class MarinaTest { private static final Instruction REQUEUEING_NOP = new Instruction.Move(DOCK, - true, /* requeueing */ Predicate.IgnoreFlagD, /* predicate */ false, /* torpedoable */ null, /* path */ @@ -848,7 +841,6 @@ public class MarinaTest { private static final Instruction SEND_DATA = new Instruction.Move(DOCK, - false, /* requeueing */ Predicate.IgnoreFlagD, /* predicate */ false, /* torpedoable */ null, /* path */ @@ -862,7 +854,6 @@ public class MarinaTest { private static final Instruction RECV_DATA = new Instruction.Move(DOCK, - false, /* requeueing */ Predicate.IgnoreFlagD, /* predicate */ false, /* torpedoable */ null, /* path */ @@ -876,7 +867,6 @@ public class MarinaTest { private static final Instruction SEND_TOKEN = new Instruction.Move(DOCK, - false, /* requeueing */ Predicate.IgnoreFlagD, /* predicate */ false, /* torpedoable */ null, /* path */ @@ -890,7 +880,6 @@ public class MarinaTest { private static final Instruction RECV_TOKEN = new Instruction.Move(DOCK, - false, /* requeueing */ Predicate.IgnoreFlagD, /* predicate */ false, /* torpedoable */ null, /* path */ @@ -904,7 +893,6 @@ public class MarinaTest { private static final Instruction REQUEUEING_SEND_DATA = new Instruction.Move(DOCK, - true, /* requeueing */ Predicate.IgnoreFlagD, /* predicate */ false, /* torpedoable */ null, /* path */ @@ -963,7 +951,7 @@ public class MarinaTest { prln("Executing Set OLC="+olc_value); setOLC(marina, olc_value); prln("Executing Set ILC=1"); - marina.instrIn.fill(new Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 1)); + marina.instrIn.fill(new Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 1)); // verify state0 "EPI->ring" and 0->1 transition prln("Executing Send Data (requeueable); this will cause 0->1 transition and be discarded"); @@ -973,13 +961,13 @@ public class MarinaTest { // verify state1 "EPI->ring" prln("Executing Set ILC=1; this will be recirculated"); - marina.instrIn.fill(new Instruction.Set(DOCK,true,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 1)); + marina.instrIn.fill(new Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 1)); prln("Executing Send Data; this will be recirculated"); marina.instrIn.fill(REQUEUEING_SEND_DATA); prln("Executing Set OLC--; this will be recirculated"); - marina.instrIn.fill(new Instruction.Set(DOCK,true,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,SetSource.Decrement)); + marina.instrIn.fill(new Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,SetSource.Decrement)); // verify state1 "OD waits" dataItems = marina.data.drainMany(2); @@ -1039,7 +1027,7 @@ public class MarinaTest { setOLC(marina, olc_value); prln("Executing Set ILC=1"); - marina.instrIn.fill(new Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 1)); + marina.instrIn.fill(new Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 1)); // insert many non-requeueing "send data item" instructions; // this will let us single-step the execution point by @@ -1058,7 +1046,7 @@ public class MarinaTest { marina.instrIn.fill(REQUEUEING_SEND_DATA); prln("Inserting [Rq] Set OLC--; this will be recirculated"); - marina.instrIn.fill(new Instruction.Set(DOCK,true,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,SetSource.Decrement)); + marina.instrIn.fill(new Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,SetSource.Decrement)); // insert the tail, which will cause the 0->2 transition prln("Inserting Tail"); @@ -1123,7 +1111,7 @@ public class MarinaTest { } prln("inserting instruction: [Rq] Set ILC=1"); - marina.instrIn.fill(new Instruction.Set(DOCK,true,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1)); + marina.instrIn.fill(new Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1)); prln("inserting instruction: [Rq] Send Data"); marina.instrIn.fill(REQUEUEING_SEND_DATA); @@ -1153,7 +1141,7 @@ public class MarinaTest { setOLC(marina, 63); prln("inserting instruction: Set ILC=1"); - marina.instrIn.fill(new Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1)); + marina.instrIn.fill(new Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1)); // if you uncomment this, then the NOP will be dropped and the test will pass //prln("inserting instruction: [Rq] Nop; this will cause 0->1 transition and possibly be discarded"); @@ -1163,7 +1151,7 @@ public class MarinaTest { marina.instrIn.fill(REQUEUEING_SEND_DATA); prln("inserting instruction: [Rq] Set ILC=1"); - marina.instrIn.fill(new Instruction.Set(DOCK,true,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1)); + marina.instrIn.fill(new Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1)); prln("inserting instruction: Tail"); marina.instrIn.fill(new Instruction.Tail(DOCK)); @@ -1201,7 +1189,7 @@ public class MarinaTest { prln((b?"Setting":"Clearing")+" flags"); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD, + Instruction.Set(DOCK,Predicate.IgnoreFlagD, b ? one : zero, b ? one : zero )); @@ -1236,7 +1224,7 @@ public class MarinaTest { // set A,B flags to a_state and b_state marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD, + Instruction.Set(DOCK,Predicate.IgnoreFlagD, a_state ? one : zero, b_state ? one : zero )); @@ -1256,7 +1244,7 @@ public class MarinaTest { if (c_input!=null) func = func.add(c_input); Instruction inst = new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD, + Instruction.Set(DOCK,Predicate.IgnoreFlagD, !which ? func : zero.add(Predicate.FlagA), which ? func : zero.add(Predicate.FlagB) ); @@ -1280,9 +1268,8 @@ public class MarinaTest { prln("Begin recvData"); adjustIndent(2); - marina.instrIn.fill(new Instruction.Set(DOCK,false,Predicate.IgnoreFlagD, CLEAR_FLAG, CLEAR_FLAG)); + marina.instrIn.fill(new Instruction.Set(DOCK,Predicate.IgnoreFlagD, CLEAR_FLAG, CLEAR_FLAG)); marina.instrIn.fill(new Instruction.Move(DOCK, - false, /* requeueing */ Predicate.IgnoreFlagD, /* predicate */ true, /* torpedoable */ null, /* path */ @@ -1293,7 +1280,7 @@ public class MarinaTest { false, /* dataOut */ false /* tokenOut */ )); - marina.instrIn.fill(new Instruction.Set(DOCK,false,Predicate.IgnoreFlagD, SET_FLAG, SET_FLAG)); + marina.instrIn.fill(new Instruction.Set(DOCK,Predicate.IgnoreFlagD, SET_FLAG, SET_FLAG)); prln("checking to confirm that A flag is cleared"); fatal(marina.getFlagA(), "bad A flag: "+marina.getFlagA()); @@ -1338,7 +1325,6 @@ public class MarinaTest { "found a data item waiting in the north proper stopper, but should not have"); marina.instrIn.fill(new Instruction.Move(DOCK, - false, // requeueing Predicate.IgnoreFlagD, // predicate true, // torpedoable null, // path @@ -1378,7 +1364,7 @@ public class MarinaTest { marina.fillNorthProperStopper(new MarinaPacket(data, false, addr)); marina.instrIn.fill(RECV_DATA); - marina.instrIn.fill(new Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,SetSource.DataLatch)); + marina.instrIn.fill(new Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,SetSource.DataLatch)); int olc = marina.getOLC(); fatal(olc != (1<> i; prln("Set ILC=0"); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 0)); + Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 0)); prln("Then immediately set ILC="+notZero); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, notZero)); + Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, notZero)); prln("Verify ILC using scan chain"); Ilc ilc = marina.getILC(); @@ -1909,11 +1888,11 @@ public class MarinaTest { prln("Set ILC="+notZero); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, notZero)); + Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, notZero)); prln("Then immediately set ILC=0"); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 0)); + Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 0)); prln("Verify ILC using scan chain"); ilc = marina.getILC(); @@ -1935,17 +1914,17 @@ public class MarinaTest { prln("Set A=0, B=0"); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD, CLEAR_FLAG, CLEAR_FLAG)); + Instruction.Set(DOCK,Predicate.IgnoreFlagD, CLEAR_FLAG, CLEAR_FLAG)); for (int i=0; i<6; i++) { int notZero = 32 >> i; prln("Set OLC=0"); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 0)); + Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 0)); prln("Then immediately set OLC="+notZero); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, notZero)); + Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, notZero)); prln("Verify OLC count using scan chain"); int outOlc = marina.getOLC(); @@ -1954,16 +1933,16 @@ public class MarinaTest { prln("Verify OLC zero bit using predication"); prln("if (OLC==0) {A=1; B=1;} // should not get executed"); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.FlagD, SET_FLAG, SET_FLAG)); + Instruction.Set(DOCK,Predicate.FlagD, SET_FLAG, SET_FLAG)); fatal(marina.getFlagA(), "bad A flag. expected: false"); prln("Set OLC="+notZero); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, notZero)); + Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, notZero)); prln("Then immediately set OLC=0"); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 0)); + Instruction.Set(DOCK,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 0)); prln("Verify OLC count using scan chain"); outOlc = marina.getOLC(); @@ -1972,7 +1951,7 @@ public class MarinaTest { prln("Verify OLC zero bit using predication"); prln("if (OLC!=0) {A=1; B=1;} // should not get executed"); marina.instrIn.fill(new - Instruction.Set(DOCK,false,Predicate.Default, SET_FLAG, SET_FLAG)); + Instruction.Set(DOCK,Predicate.Default, SET_FLAG, SET_FLAG)); fatal(marina.getFlagA(), "bad A flag. expected: false"); } @@ -1983,7 +1962,7 @@ public class MarinaTest { prln("Begin testSouthRecirculate"); adjustIndent(2); - int AMOUNT = Marina.SOUTH_RING_CAPACITY; + int AMOUNT = Marina.SOUTH_RING_CAPACITY-1; marina.enableInstructionSend(false); marina.enableInstructionRecirculate(true); @@ -2001,13 +1980,20 @@ public class MarinaTest { prln("Drain south ring and check contents"); adjustIndent(2); List out = marina.instrIn.drainMany(); + boolean bad = false; for (int i=0; i