From ca686440a7f8d167802cd03d2e4b258ebf930870 Mon Sep 17 00:00:00 2001 From: Adam Megacz Date: Wed, 6 May 2009 22:00:06 +0000 Subject: [PATCH] print instruction being inserted, remove unnecessary prln()s --- .../vlsi/chips/marina/test/InstructionStopper.java | 3 + .../com/sun/vlsi/chips/marina/test/Marina.java | 3 +- .../com/sun/vlsi/chips/marina/test/MarinaTest.java | 291 +------------------- .../berkeley/fleet/marina/MarinaDestination.java | 22 ++ testCode/edu/berkeley/fleet/marina/MarinaPath.java | 13 +- 5 files changed, 48 insertions(+), 284 deletions(-) create mode 100644 testCode/edu/berkeley/fleet/marina/MarinaDestination.java diff --git a/testCode/com/sun/vlsi/chips/marina/test/InstructionStopper.java b/testCode/com/sun/vlsi/chips/marina/test/InstructionStopper.java index 626f751..ffe58c2 100644 --- a/testCode/com/sun/vlsi/chips/marina/test/InstructionStopper.java +++ b/testCode/com/sun/vlsi/chips/marina/test/InstructionStopper.java @@ -31,11 +31,14 @@ public class InstructionStopper extends ProperStopper { /** put one Instruction into InstructionStopper */ public void fill(Instruction inst) { + MarinaTest.indenter.prln(" inserting instruction: " + + inst.toString().substring(inst.toString().indexOf(':')+1)); super.fill(new MarinaPacket(inst)); } /* put a torpedo into the InstructionStopper */ public void fillTorpedo() { + MarinaTest.indenter.prln(" inserting torpedo"); super.fill(new MarinaPacket(MarinaPacket.null_word, true, MarinaPacket.null_path)); } } diff --git a/testCode/com/sun/vlsi/chips/marina/test/Marina.java b/testCode/com/sun/vlsi/chips/marina/test/Marina.java index 12a0fdf..2719292 100644 --- a/testCode/com/sun/vlsi/chips/marina/test/Marina.java +++ b/testCode/com/sun/vlsi/chips/marina/test/Marina.java @@ -8,6 +8,7 @@ import com.sun.async.test.NanosimModel; import com.sun.async.test.VerilogModel; import edu.berkeley.fleet.api.Instruction; +import edu.berkeley.fleet.marina.MarinaPath; /** The Marina object will eventually represent the Marina test chip. * Right now, it doesn't do much of anything. It just helps me exercise @@ -15,7 +16,7 @@ import edu.berkeley.fleet.api.Instruction; public class Marina { public static final int INDEX_OF_ADDRESS_BIT_COPIED_TO_C_FLAG_WHEN_DC_EQUALS_ONE = 5; - public static final int INDEX_OF_ADDRESS_BIT_COPIED_TO_C_FLAG_WHEN_DC_EQUALS_ZERO = 13; + public static final int INDEX_OF_ADDRESS_BIT_COPIED_TO_C_FLAG_WHEN_DC_EQUALS_ZERO = MarinaPath.SIGNAL_BIT_INDEX; public static final String DATA_CHAIN = "marina.marina_data"; public static final String CONTROL_CHAIN = "marina.marina_control"; diff --git a/testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java b/testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java index af1e1d7..c7152d5 100644 --- a/testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java +++ b/testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java @@ -104,7 +104,7 @@ public class MarinaTest { //-------------------------- private data -------------------------------- private static long startTime; - private Indenter indenter = new Indenter(); + public static Indenter indenter = new Indenter(); private Marina marina; private ChipModel model; //private ChainControl cc; @@ -499,7 +499,6 @@ public class MarinaTest { int nbToks = marina.getNumTokens(); fatal(nbToks!=0, "Expected no tokens on initialization but got: "+nbToks+" tokens"); - prln("send token"); marina.instrIn.fill( new Instruction.Move(dock, Predicate.IgnoreFlagD, /* predicate */ @@ -532,7 +531,6 @@ public class MarinaTest { for(int i=0; i dataItems = marina.data.drainMany(howmany); @@ -584,10 +573,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,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, olc)); - } + marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, olc)); } private void testFlagD(Marina marina) { @@ -606,10 +592,7 @@ public class MarinaTest { "predicate olc"+(predicate_olc_nonzero?"!=0":"==0")); adjustIndent(2); - prln("Inserting Set OLC="+olc); setOLC(marina, olc); - - prln("Inserting ["+(predicate_olc_nonzero?"olc!=0":"olc==0")+"] send data"); marina.instrIn.fill(new Instruction.Move(dock, predicate_olc_nonzero // predicate ? only_if_olc_nonzero @@ -640,9 +623,7 @@ public class MarinaTest { List dItems; - prln("Setting OLC=1"); marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 1)); - prln("Setting ILC=1"); marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 1)); for(boolean flag_a : new boolean[] { false, true }) { @@ -716,7 +697,6 @@ public class MarinaTest { adjustIndent(2); for (int i=5; i>=0; i--) { int inOlc = 1<1->3->0 state - * transition sequence. - * - - * According to the diagram in IES50, there are three transitions - * (0->1, 1->3, 3->0) to perform, and in each state there are two - * behaviors to verify (the two notations in each oval of the - * state diagram). The "OD->drain" behavior of state 0 is - * verified by testRequeueStage0(). - */ - private void testRequeueStage0to1to3to0(Marina marina) { - List dataItems; - - int extras = 5; - int olc_value = MORE_THAN_DATA_OUT_SATURATION_AMOUNT + extras; - - prln("Begin testRequeueStage0to1to3to0"); - adjustIndent(2); - - // State 0 ////////////////////////////////////////////////////////////////////////////// - - prln("Executing Set OLC="+olc_value); - setOLC(marina, olc_value); - prln("Executing Set ILC=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"); - marina.instrIn.fill(REQUEUEING_SEND_DATA); - - // State 1 ////////////////////////////////////////////////////////////////////////////// - - // verify state1 "EPI->ring" - prln("Executing Set ILC=1; this will be recirculated"); - 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,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,SetSource.Decrement)); - - // verify state1 "OD waits" - dataItems = marina.data.drainMany(2); - fatal(dataItems.size()!=1, "Expected exactly one data item to emerge but got: "+dataItems.size()+" data items"); - - // verify 1->3 transition - prln("Executing Tail; this will cause the 2->3 transition and be discarded"); - marina.instrIn.fill(new Instruction.Tail(dock)); - - // State 3 ////////////////////////////////////////////////////////////////////////////// - - // verify state3 "OD->ring" - dataItems = marina.data.drainMany(MORE_THAN_DATA_OUT_SATURATION_AMOUNT); - fatal(dataItems.size()ring" - saturateInstructionFifo(marina, NOP, MORE_THAN_INSTRUCTION_IN_SATURATION_AMOUNT, true); - - // verify state3->state0 - dataItems = marina.data.drainMany(extras + 4); - fatal(dataItems.size()!=(extras+1), - "Expected exactly " + (extras+1) + " items to emerge, but got at least : "+dataItems.size()+" of them"); - - // State 0 ////////////////////////////////////////////////////////////////////////////// - - // verify that we are back in state0 - saturateInstructionFifo(marina, REQUEUEING_NOP, MORE_THAN_INSTRUCTION_IN_SATURATION_AMOUNT, false); - - adjustIndent(-2); - prln("End testRequeueStage0to1to3to0"); - } - - /** - * This test brings the requeue stage through the 0->2->3->0 state - * transition sequence. - * - * According to the diagram in IES50, there are two transitions - * (0->2, 2->3, 3->0) to perform, and in each state there are two - * behaviors to verify (the two notations in each oval of the - * state diagram). The "OD->drain" behavior of state 0 is - * verified by testRequeueStage0(). - */ - private void testRequeueStage0to2to3to0(Marina marina) { - List dataItems; - - int olc_value = 10; - int number_of_non_requeueable_send_datas = INSTRUCTION_RING_CAPACITY; - - prln("Begin testRequeueStage0to2to3to0"); - adjustIndent(2); - - // State 0 ////////////////////////////////////////////////////////////////////////////// - - prln("Executing Set OLC="+olc_value); - setOLC(marina, olc_value); - - prln("Executing Set ILC=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 - // extracting data items. - for(int i=0; i2 transition - prln("Inserting Tail"); - marina.instrIn.fill(new Instruction.Tail(dock)); - - // State 2 ////////////////////////////////////////////////////////////////////////////// - - // confirm state 2 "EPI waits" - prln("Saturating the instruction input to confirm that EPI waits"); - saturateInstructionFifo(marina, REQUEUEING_NOP, MORE_THAN_INSTRUCTION_IN_SATURATION_AMOUNT, true); - - // confirm state 2 "OD->drain" - prln("Draining data output to cause the 2->3 transition"); - dataItems = marina.data.drainMany(number_of_non_requeueable_send_datas); - fatal(dataItems.size()!=number_of_non_requeueable_send_datas, - "Expected at least " + number_of_non_requeueable_send_datas + - " items to emerge, but got only : "+dataItems.size()+" of them"); - - // State 3 ////////////////////////////////////////////////////////////////////////////// - - // verify state3 "EPI waits" - prln("Verifying that EPI still waits in state3"); - fatal(marina.instrIn.getFillStateWire()!=MarinaUtils.StateWireState.FULL, - "state3 EPI waits not verified"); - prln(" ok"); - prln(""); - - // verify state3 "OD->ring" and state3->state0 - prln("Removing data items to run down the OLC to zero and cause 3->0 transition"); - dataItems = marina.data.drainMany(olc_value+10); - fatal(dataItems.size()!=(olc_value+1), - "Expected exactly " + (olc_value+1) + " items to emerge, but got: "+dataItems.size()+" of them"); - - // State 0 ////////////////////////////////////////////////////////////////////////////// - - // verify that we are back in state0 - prln("Confirming that we are back in state0"); - saturateInstructionFifo(marina, REQUEUEING_NOP, MORE_THAN_INSTRUCTION_IN_SATURATION_AMOUNT, false); - - adjustIndent(-2); - prln("End testRequeueStage0to2to3to0"); - } private void testWaitForTail(Marina marina) { List dataItems; @@ -1087,22 +880,12 @@ public class MarinaTest { prln("Begin testWaitForTail"); adjustIndent(2); - prln("inserting instruction: Set OLC=63"); setOLC(marina, 63); - - prln("inserting instruction: head"); marina.instrIn.fill(new Instruction.Head(dock)); - - prln("inserting instruction: Set ILC=1"); marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1)); - - prln("inserting instruction: Send Data"); marina.instrIn.fill(SEND_DATA); - dataItems = marina.data.drainMany(1); fatal(dataItems.size()!=0, "Expected exactly no data items to emerge but got at least: "+dataItems.size()); - - prln("inserting instruction: tail"); marina.instrIn.fill(new Instruction.Tail(dock)); BitVector bv = marina.data.drain(); @@ -1169,7 +952,6 @@ public class MarinaTest { for(boolean which : new boolean[] { false, true }) { prln("before instruction: a="+a_state+", b="+b_state+", c="+c_state); - // set A,B flags to a_state and b_state marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD, @@ -1197,7 +979,6 @@ public class MarinaTest { which ? func : zero.add(Predicate.FlagB) ); - prln("executing instruction: " + inst); marina.instrIn.fill(inst); boolean expected_a = !which ? func.evaluate(a_state, b_state, c_state, false) : a_state; @@ -1355,16 +1136,9 @@ public class MarinaTest { prln("Begin testSendAndRecvToken"); adjustIndent(2); - prln("sending token"); marina.instrIn.fill(SEND_TOKEN); - - prln("receiving token"); marina.instrIn.fill(RECV_TOKEN); - - prln("sending data item"); marina.instrIn.fill(SEND_DATA); - - prln("checking to confirm that data item arrived"); List dataItems = marina.data.drainMany(3); fatal(dataItems.size()!=1, "expected exactly one data item, got " + dataItems.size()); @@ -1378,14 +1152,10 @@ public class MarinaTest { adjustIndent(2); for(long val : new long[] { (-1L << 14), -1, 0, 1 }) { - prln("inserting Set Data Latch (sign-extended) 37'b" + Long.toString(val, 1)); marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD, Instruction.Set.SetDest.DataLatch, val)); - - prln("sending data item"); marina.instrIn.fill(SEND_DATA); - List dataItems = marina.data.drainMany(3); fatal(dataItems.size()!=1, "expected exactly one data item, got " + dataItems.size()); @@ -1412,7 +1182,6 @@ public class MarinaTest { prln("Begin testShiftedLiteral"); adjustIndent(2); - prln("clearing the D register"); marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD, Instruction.Set.SetDest.DataLatch, 0)); @@ -1422,7 +1191,6 @@ public class MarinaTest { for(long val : new long[] { -1, 0, 1, (-1L << 18) }) { - prln("inserting Shift 19'b" + Long.toString(val, 1)); edu.berkeley.fleet.api.BitVector immediate = new edu.berkeley.fleet.api.BitVector(19); for(int i=0; i dataItems = marina.data.drainMany(3); @@ -1531,7 +1298,6 @@ public class MarinaTest { MarinaPath path = new MarinaPath((MarinaFleet)dock.getShip().getFleet(), bv); - prln("send data with path="+bv); marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1)); marina.instrIn.fill(new Instruction.Move(dock, Predicate.IgnoreFlagD, /* predicate */ @@ -1623,13 +1389,8 @@ public class MarinaTest { for(int bit=0; bit<6; bit++) { int ilc = bit<0 ? 0 : (1< dataItems = marina.data.drainMany(); fatal(dataItems.size()!=ilc, "Expected "+ilc+" data item(s) to emerge but got: "+dataItems.size()+" data items"); } @@ -1641,25 +1402,17 @@ public class MarinaTest { private void sendTorpedo(Marina marina) { prln("Begin sendTorpedo"); adjustIndent(2); - - prln("Set OLC = 1"); marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 1)); - int olc = marina.getOLC(); fatal(olc!=1, "bad OLC: "+olc+" expected: 1"); - - prln("Set A=0, B=0"); marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD, CLEAR_FLAG, CLEAR_FLAG)); - fatal(marina.getFlagA(), "bad A flag: true"); fatal(marina.getFlagB(), "bad B flag: true"); - - prln("Set ILC = Infinity"); marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, SetSource.Infinity)); - + prln("execute a move instruction that does nothing but loops until torpedo arrives"); marina.instrIn.fill( new Instruction.Move(dock, @@ -1724,7 +1477,6 @@ public class MarinaTest { for(boolean torpedoable : new boolean[] { true, false }) { - prln("send token"); marina.instrIn.fill(new Instruction.Move(dock, Predicate.IgnoreFlagD, // predicate false, // torpedoable @@ -1737,10 +1489,8 @@ public class MarinaTest { true // tokenOut )); - prln("set ilc=\\infty"); marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,SetSource.Infinity)); - prln("recv-and-send token"); marina.instrIn.fill(new Instruction.Move(dock, Predicate.IgnoreFlagD, // predicate torpedoable, // torpedoable @@ -1754,17 +1504,14 @@ public class MarinaTest { )); // FIXME: this probably should be removed, unless Ivan doesn't want to change the behavior - prln("set ilc=1"); marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1)); - prln("send data"); marina.instrIn.fill(SEND_DATA); // expect nothing to come out, because the NOP is executing dataItems = marina.data.drainMany(2); fatal(dataItems.size()!=0, "Expected no data item(s) to emerge but got at least: "+dataItems.size()+" data items"); - prln("send torpedo"); marina.instrIn.fillTorpedo(); int expected = torpedoable?1:0; @@ -1845,34 +1592,25 @@ public class MarinaTest { for (int i=0; i<6; i++) { int notZero = 1<> i; @@ -1974,7 +1710,6 @@ public class MarinaTest { case 0: { // these tests run fairly quickly - doOneTest(1); doOneTest(2); doOneTest(3); @@ -2042,12 +1777,6 @@ public class MarinaTest { case 3003: testFlagC(marina); break; // 23-Apr (+verilog) case 3004: testFlagD(marina); break; // 23-Apr (+verilog) - case 3005: testRequeueStage0(marina); break; - case 3006: testRequeueStage0to1(marina); break; - case 3007: testRequeueStage0to1to3to0(marina); break; - case 3008: testRequeueStage0to2to3to0(marina); break; - //case 3010: testRequeueStageDrop(marina); break; // no longer relevant (behavior changed) - case 3009: testWaitForTail(marina); break; // 22-Apr (+verilog) case 3010: sendData(marina); break; // passes, 24-Mar (+verilog) diff --git a/testCode/edu/berkeley/fleet/marina/MarinaDestination.java b/testCode/edu/berkeley/fleet/marina/MarinaDestination.java new file mode 100644 index 0000000..8e1d032 --- /dev/null +++ b/testCode/edu/berkeley/fleet/marina/MarinaDestination.java @@ -0,0 +1,22 @@ +package edu.berkeley.fleet.marina; +import edu.berkeley.fleet.api.*; +import edu.berkeley.fleet.two.*; + +public class MarinaDestination extends Destination { + + private final BitVector bv; + private final MarinaFleet marina; + + public MarinaDestination(MarinaFleet marina, BitVector bv) { + super(marina.onlyDock); + this.marina = marina; + bv.setImmutable(); + this.bv = bv; + } + + public String toString() { + return bv.toString(); + } + +} + diff --git a/testCode/edu/berkeley/fleet/marina/MarinaPath.java b/testCode/edu/berkeley/fleet/marina/MarinaPath.java index 0c9ba58..84cb47f 100644 --- a/testCode/edu/berkeley/fleet/marina/MarinaPath.java +++ b/testCode/edu/berkeley/fleet/marina/MarinaPath.java @@ -4,6 +4,8 @@ import edu.berkeley.fleet.two.*; public class MarinaPath extends FleetTwoPath { + public static final int SIGNAL_BIT_INDEX = 13; + private final MarinaFleet marina; final BitVector bv; @@ -16,12 +18,19 @@ public class MarinaPath extends FleetTwoPath { public String toString() { return "MarinaPath("+bv+")"; } public BitVector getSignal() { - throw new RuntimeException("not implemented"); + BitVector ret = new BitVector(1); + ret.set(0, bv.get(SIGNAL_BIT_INDEX)); + return ret; } public Dock getSource() { return marina.onlyDock; } public Destination getDestination() { - throw new RuntimeException("not implemented"); + BitVector bvd = new BitVector(bv.length()-1); + int j=0; + for(int i=0; i