X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Ffleet%2Fmarina%2FMarinaTest.java;h=ed4c51ee7c3db2ee76359425fb1739137da9f250;hb=189e6e87ff393dedb809e8b8725d6b3141508cbe;hp=cfca42c6bc7559d238cd755f7c6c414b153d9355;hpb=79e5afa7283db57e1e6c63b879b0bf5f9fc39966;p=fleet.git diff --git a/src/edu/berkeley/fleet/marina/MarinaTest.java b/src/edu/berkeley/fleet/marina/MarinaTest.java index cfca42c..ed4c51e 100644 --- a/src/edu/berkeley/fleet/marina/MarinaTest.java +++ b/src/edu/berkeley/fleet/marina/MarinaTest.java @@ -1,48 +1,80 @@ package edu.berkeley.fleet.marina; -/* -*- tab-width: 4 -*- */ -import java.util.ArrayList; -import java.util.List; - +import java.util.*; import com.sun.electric.tool.simulation.test.*; -import edu.berkeley.fleet.marina.Marina.Ilc; import edu.berkeley.fleet.marina.CmdArgs; import edu.berkeley.fleet.marina.CmdArgs.Mode; - import edu.berkeley.fleet.api.Dock; import edu.berkeley.fleet.api.Instruction; import edu.berkeley.fleet.api.Predicate; import edu.berkeley.fleet.api.Instruction.Set.SetDest; import edu.berkeley.fleet.api.Instruction.Set.SetSource; -import edu.berkeley.fleet.marina.MarinaFleet; -import edu.berkeley.fleet.marina.MarinaPath; - import java.io.*; /** * Tests for Marina */ public class MarinaTest { - public static final MarinaFleet marinaFleet = new MarinaFleet(); - public static final Dock dock = marinaFleet.getOnlyInputDock(); + + private static Marina marina; + private MarinaTest(Marina marina) throws Exception { + this.marina = marina; + go("marina.spi"); + } + + private void go(String netListName) throws Exception { + if (model instanceof NanosimModel) { + NanosimLogicSettable mc = (NanosimLogicSettable) + ((SimulationModel)model).createLogicSettable(Marina.MASTER_CLEAR); + mc.setInitState(true); + } + + prln("starting model"); + if (model instanceof VerilogModel) + ((SimulationModel)model).start("verilog", "marina.v", VerilogModel.DUMPVARS, !cmdArgs.jtagShift); + else if (model instanceof HsimModel) + ((SimulationModel)model).start("hsim64", netListName, 0, !cmdArgs.jtagShift); + else if (model instanceof NanosimModel) + ((SimulationModel)model).start("nanosim -c cfg", netListName, 0, !cmdArgs.jtagShift); + else + {} + prln("model started"); + + model.waitNS(1000); + prln("deasserting master clear"); + if (model instanceof SimulationModel) + ((SimulationModel)model).setNodeState(Marina.MASTER_CLEAR, 0); + else + marina.masterClear(); + model.waitNS(1000); + + if (cmdArgs.testNum!=0 && cmdArgs.testNum!=1) { + cc.resetInBits(); + cc.shift(Marina.CONTROL_CHAIN, false, true); + } + + doOneTest(cmdArgs.testNum); + + if (model instanceof SimulationModel) + ((SimulationModel)model).finish(); + } public static float vdd = 1.0f; //-------------------------- constants ----------------------------------- private static final String SCAN_CHAIN_XML = "marina.xml"; - private static final String NET_LIST = "marina.spi"; public static final int INSTR_SZ = 36; - public static final Instruction.Set.FlagFunction CLEAR_FLAG + public final Instruction.Set.FlagFunction CLEAR_FLAG = Instruction.Set.FlagFunction.ZERO; - public static final Instruction.Set.FlagFunction SET_FLAG + public final Instruction.Set.FlagFunction SET_FLAG = Instruction.Set.FlagFunction.ZERO.add(Predicate.FlagA) .add(Predicate.NotFlagA); - public static final Instruction.Set.FlagFunction A_FLAG + public final Instruction.Set.FlagFunction A_FLAG = Instruction.Set.FlagFunction.ZERO.add(Predicate.FlagA); - public static final Instruction.Set.FlagFunction B_FLAG + public final Instruction.Set.FlagFunction B_FLAG = Instruction.Set.FlagFunction.ZERO.add(Predicate.FlagB); // COLUMN_LATENCY is a delay that is larger than the latency through an Infinity column @@ -92,18 +124,17 @@ public class MarinaTest { private static long startTime; public static Indenter indenter = new Indenter(); - private Marina marina; - private ChipModel model; + private static ChipModel model; //private ChainControl cc; //private JtagTester tester; - private CmdArgs cmdArgs; + private static CmdArgs cmdArgs; private PowerChannel corePowerSupply, padsPowerSupply; private VoltageReadable coreVoltmeter, voltmeterForCurrent; - private ChainTest ctD, ctR, ctC, ct; - private ChainControl ccD, ccR, ccC, cc; + private static ChainTest ctD, ctR, ctC, ct; + private static ChainControl ccD, ccR, ccC, cc; //-------------------------- private methods ----------------------------- /** @return true if simulation. Return false if we're testing silicon. */ @@ -155,187 +186,23 @@ public class MarinaTest { } } - private MarinaTest(String[] args) throws Exception { - cmdArgs = new CmdArgs(args); - reportTask(cmdArgs); - doSim(); - } static PowerChannel vdd18; static PowerChannel vdd10; static PowerChannel vdds; - private void setVdd10(float v) { + private static void setVdd10(float v) { if (vdd10==null) return; vdd10.setVoltageWait(v); } - private void doSim() throws Exception { - String netListName; - switch (cmdArgs.mode) { - case WHOLE_CHIP_SCHEMATIC_PARASITICS: - netListName = NET_LIST; - break; - case WHOLE_CHIP_LAYOUT_PARASITICS: - netListName = "marina_pads_guts.spi"; - break; - default: - fatal(true, "unrecognized CmdArgs.Mode"); - return; - } - - - Infrastructure.gpibControllers = new int[]{1}; - vdd18 = new Pst3202Channel("ch1", "tiPST3202", 1); - vdd18 = new Pst3202Channel("ch3", "tiPST3202", 3); - vdd10 = new PowerChannelResistorVoltageReadable(new Pst3202Channel("ch2", "tiPST3202", 2), - 1000, - new HP34401A("HP34970"), - true); - - if (vdd10!=null) setVdd10(vdd); - if (vdd18!=null) vdd18.setVoltageNoWait(1.8f); - - model = cmdArgs.useVerilog - ? new VerilogModel() - : cmdArgs.useHsim - ? new HsimModel() - : cmdArgs.silicon - ? new SiliconChip() - : new NanosimModel(); - - if (model instanceof SimulationModel) - ((SimulationModel)model).setOptimizedDirectReadsWrites(true); - - CYCLE_TIME_NS = cmdArgs.useVerilog ? (100*20) : 0.250; - int khz = - model instanceof VerilogModel - ? 100000 - : cmdArgs.jtagShift - ? 20000 - : model instanceof ChipModel - ? 1000 - : 1000000; - - System.err.println("constructing jtag controller"); - JtagTester tester = - model instanceof SimulationModel - ? ((SimulationModel)model).createJtagTester("TCK", "TMS", "TRSTb", "TDI", "TDO") - : new Netscan("jtag2"); - //: new Netscan("10.0.0.200"); - //: new Signalyzer(); - //: new Netscan("jtag2"); - JtagLogicLevel mc0=null; - JtagLogicLevel mc1=null; - if (tester instanceof NetscanGeneric) { - ((NetscanGeneric)tester).reset(); - // master clear - // not sure if "GPIO1" means "index 0" or not - mc0 = new JtagLogicLevel(tester, 0); - mc1 = new JtagLogicLevel(tester, 1); - mc1 = mc0; - mc0.setLogicState(true); - mc1.setLogicState(true); - } - /* - Logger.setLogInits(true); - tester.setLogSets(true); - tester.setLogOthers(true); - tester.setAllLogging(true); - tester.printInfo = true; - */ - tester.printInfo = false; - - ChainControls ccs = new ChainControls(); - PowerChannel pc = new ManualPowerChannel("pc", false); - /* - JtagTester testerD, testerR, testerC; - testerD = ((SimulationModel)model).createJtagSubchainTester("sid[1:9]", null); - testerR = ((SimulationModel)model).createJtagSubchainTester("sir[1:9]", null); - testerC = ((SimulationModel)model).createJtagSubchainTester("sic[1:9]", null); - testerD.printInfo = testerR.printInfo = testerC.printInfo = false; - - ccD = new ChainControl(SCAN_CHAIN_XML, testerD, 1.8f, khz); - ccR = new ChainControl(SCAN_CHAIN_XML, testerR, 1.8f, khz); - ccC = new ChainControl(SCAN_CHAIN_XML, testerC, 1.8f, khz); - ccD.noTestSeverity = ccR.noTestSeverity = ccC.noTestSeverity = Infrastructure.SEVERITY_NOMESSAGE; - - - ctD = new ChainTest(ccD, pc); - ctR = new ChainTest(ccR, pc); - ctC = new ChainTest(ccC, pc); - */ - /* - ccs.addChain(Marina.DATA_CHAIN, ccD); - ccs.addChain(Marina.REPORT_CHAIN, ccR); - ccs.addChain(Marina.CONTROL_CHAIN, ccC); - */ - /* - PowerChannel ch2 = new Pst3202Channel("ch2", "tiPST3202", 2); - PowerChannel ch3 = new Pst3202Channel("ch3", "tiPST3202", 3); - Infrastructure.gpibControllers = new int[]{1}; - ch2.setVoltageNoWait(1f); - ch3.setVoltageNoWait(1.8f); - */ - - - cc = new ChainControl(SCAN_CHAIN_XML, tester, 1.8f, khz); - cc.noTestSeverity = Infrastructure.SEVERITY_NOMESSAGE; - ct = new ChainTest(cc, pc); - ccs.addChain(Marina.DATA_CHAIN, cc); - ccs.addChain(Marina.REPORT_CHAIN, cc); - ccs.addChain(Marina.CONTROL_CHAIN, cc); - ccs.addChain(Marina.DUKE_CHAIN, cc); - - marina = new Marina(ccs, model, !cmdArgs.jtagShift, indenter); - marina.mc0=mc0; - marina.mc1=mc1; - - if (model instanceof NanosimModel) { - NanosimLogicSettable mc = (NanosimLogicSettable) - ((SimulationModel)model).createLogicSettable(Marina.MASTER_CLEAR); - mc.setInitState(true); - } - - prln("starting model"); - if (model instanceof VerilogModel) - ((SimulationModel)model).start("verilog", "marina.v", VerilogModel.DUMPVARS, !cmdArgs.jtagShift); - else if (model instanceof HsimModel) - ((SimulationModel)model).start("hsim64", netListName, 0, !cmdArgs.jtagShift); - else if (model instanceof NanosimModel) - ((SimulationModel)model).start("nanosim -c cfg", netListName, 0, !cmdArgs.jtagShift); - else - {} - prln("model started"); - - model.waitNS(1000); - prln("deasserting master clear"); - if (model instanceof SimulationModel) - ((SimulationModel)model).setNodeState(Marina.MASTER_CLEAR, 0); - else - marina.masterClear(); - model.waitNS(1000); - - if (cmdArgs.testNum!=0 && cmdArgs.testNum!=1) { - cc.resetInBits(); - cc.shift(Marina.CONTROL_CHAIN, false, true); - } - - doOneTest(cmdArgs.testNum); - - if (model instanceof SimulationModel) - ((SimulationModel)model).finish(); - } /** In the absence of looping, the longest path through Infinity is 4 column delays */ private void waitUntilQuiescent() { model.waitNS(4*COLUMN_LATENCY); } - private double readCurrent() { - return voltmeterForCurrent.readVoltage() / cmdArgs.station.ammeterShuntResistance; - } - + /** Generate List of BitVectors where Token=true, high 25 data bits * are alternating ones and zeros, low 12 data bits increment from * zero, and address is given by addr. */ @@ -355,14 +222,13 @@ public class MarinaTest { return ans; } private void stopToStop(ProperStopper s1, ProperStopper s2, - Counter ctr, List din) { prln("Begin stopToStop"); adjustIndent(2); s1.stop(); - long ctrStart = ctr==null ? 0 : ctr.getCount(); + long ctrStart = 0; s1.fillMany(din); waitUntilQuiescent(); @@ -371,15 +237,6 @@ public class MarinaTest { MarinaUtils.compareItemsOrdered(din, dout); - if (ctr!=null) { - long ctrEnd = ctr.getCount(); - long delta = ctrEnd - ctrStart; - long expect = din.size(); - fatal(delta!=expect, - "counter delta wrong: expected delta: "+expect+ - " counter before:"+ctrStart+" counter after:"+ctrEnd); - } - adjustIndent(-2); prln("End stopToStop"); } @@ -387,7 +244,6 @@ public class MarinaTest { * is then run to allow the burst to flow. */ private void stopToStopBurst(ProperStopper src, ProperStopper gate, ProperStopper dst, - Counter ctr, List din) { prln("Begin stopToStopBurst test"); adjustIndent(2); @@ -395,7 +251,7 @@ public class MarinaTest { src.stop(); gate.stop(); - long ctrStart = ctr==null ? 0 : ctr.getCount(); + long ctrStart = 0; src.fillMany(din); waitUntilQuiescent(); @@ -408,39 +264,29 @@ public class MarinaTest { MarinaUtils.compareItemsOrdered(din, dout); - if (ctr!=null) { - long ctrEnd = ctr.getCount(); - long delta = ctrEnd - ctrStart; - - long expectA = din.size(); - fatal(delta!=expectA, - "counter delta wrong: expected delta: "+expectA+ - " counter before:"+ctrStart+" counter after:"+ctrEnd); - } - adjustIndent(-2); prln("End stopToStopBurst test"); } private void stopToStopOne(ProperStopper s1, ProperStopper s2, - Counter ctr, int adr) { + int adr) { prln("Begin stopToStopOne"); adjustIndent(2); List din = makeIncrDataConstAdr(1, adr); - stopToStop(s1, s2, ctr, din); + stopToStop(s1, s2, din); adjustIndent(-2); prln("End stopToStopOne"); } private void stopToStopThree(ProperStopper s1, ProperStopper s2, - Counter ctr, int adr) { + int adr) { prln("Begin stopToStopOne"); adjustIndent(2); List din = makeIncrDataConstAdr(3, adr); - stopToStop(s1, s2, ctr, din); + stopToStop(s1, s2, din); adjustIndent(-2); prln("End stopToStopOne"); @@ -508,9 +354,9 @@ public class MarinaTest { prln("Begin testProperStoppers"); adjustIndent(2); - for(ProperStopper ps : new ProperStopper[] { marina.data, marina.instrIn }) { + for(ProperStopper ps : new ProperStopper[] { marina.northRing, marina.southRing }) { - prln("testing " + (ps == marina.data ? "data" : "instruction") + " stopper"); + prln("testing " + (ps == marina.northRing ? "data" : "instruction") + " stopper"); adjustIndent(2); prln("un-stopping stopper"); @@ -543,7 +389,7 @@ public class MarinaTest { } for(BitVector d : din) - marina.instrIn.fill(new MarinaPacket(d, false, MarinaPacket.null_path)); + marina.southRing.fill(new MarinaPacket(d, false, MarinaPacket.null_path)); adjustIndent(-2); prln("End sendInstructions"); @@ -558,8 +404,8 @@ public class MarinaTest { int nbToks = marina.getNumTokens(); fatal(nbToks!=0, "Expected no tokens on initialization but got: "+nbToks+" tokens"); - marina.instrIn.fill(setIlc(1)); - marina.instrIn.fill(SEND_TOKEN); + marina.southRing.fill(setIlc(1)); + marina.southRing.fill(SEND_TOKEN); nbToks = marina.getNumTokens(); fatal(nbToks!=1, "Expected one token to emerge but got: "+nbToks+" tokens"); @@ -573,12 +419,12 @@ public class MarinaTest { edu.berkeley.fleet.api.BitVector bv = new edu.berkeley.fleet.api.BitVector(13); for(int i=0; i dataItems = marina.data.drainMany(); + List dataItems = marina.northRing.drainMany(); fatal(dataItems.size()!=1, "Expected one data item to emerge but got: "+dataItems.size()+" data items"); MarinaPacket mp = new MarinaPacket(dataItems.get(0)); @@ -592,14 +438,14 @@ public class MarinaTest { prln("Begin sendDataIlcInfinite"); adjustIndent(2); - marina.fillSouthProperStopper(new Instruction[] { - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,SetSource.Infinity), + marina.southRing.fill(new Instruction[] { + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,SetSource.Infinity), SEND_DATA, }); // more than MAX_ILC int howmany = 70; - List dataItems = marina.data.drainMany(howmany); + List dataItems = marina.northRing.drainMany(howmany); fatal(dataItems.size()!=howmany, "Expected an unending supply of data items to emerge but only got got: "+dataItems.size()); @@ -608,13 +454,13 @@ public class MarinaTest { } private Instruction setOlc(int olc) { - return new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, olc); + return new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, olc); } private Instruction setOlcIfZero(int olc) { - return new Instruction.Set(dock,Predicate.Default,SetDest.OuterLoopCounter, olc); + return new Instruction.Set(marina.getOnlyDock(),Predicate.Default,SetDest.OuterLoopCounter, olc); } private Instruction setIlc(int ilc) { - return new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, ilc); + return new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, ilc); } private void testFlagD(Marina marina) { @@ -626,7 +472,7 @@ public class MarinaTest { Predicate only_if_olc_zero = Predicate.FlagD; Predicate only_if_olc_nonzero = Predicate.Default; - marina.instrIn.fill(setIlc(1)); + marina.southRing.fill(setIlc(1)); for(int olc : new int[] { 1, 0 }) { for(boolean predicate_olc_nonzero : new boolean[] { true, false }) { @@ -635,9 +481,9 @@ public class MarinaTest { "predicate olc"+(predicate_olc_nonzero?"!=0":"==0")); adjustIndent(2); - marina.fillSouthProperStopper(new Instruction[] { + marina.southRing.fill(new Instruction[] { setOlc(olc), - new Instruction.Move(dock, + new Instruction.Move(marina.getOnlyDock(), predicate_olc_nonzero // predicate ? only_if_olc_nonzero : only_if_olc_zero @@ -655,7 +501,7 @@ public class MarinaTest { expectNorthFifoExactly((predicate_olc_nonzero == (olc!=0)) ? 1 : 0); for(int i=0; i dItems; - marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 1)); - marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 1)); + marina.southRing.fill(new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 1)); + marina.southRing.fill(new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 1)); 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,Predicate.IgnoreFlagD, + marina.southRing.fill(new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD, flag_a ? Instruction.Set.FlagFunction.ONE : Instruction.Set.FlagFunction.ZERO, @@ -697,7 +543,7 @@ public class MarinaTest { prln("Attempting send data with a="+flag_a+", b="+flag_b+", predicate="+predicate); adjustIndent(2); - marina.instrIn.fill(new Instruction.Move(dock, + marina.southRing.fill(new Instruction.Move(marina.getOnlyDock(), predicate, // predicate false, // torpedoable null, // path @@ -709,7 +555,7 @@ public class MarinaTest { false // tokenOut )); adjustIndent(-2); - dItems = marina.data.drainMany(); + dItems = marina.northRing.drainMany(); int expected = predicate.evaluate(flag_a, flag_b, false, false) ? 1 : 0; fatal(dItems.size()!=expected, "Expected "+expected+" data items to emerge but got: "+ dItems.size()+" items(s)"); @@ -735,10 +581,9 @@ public class MarinaTest { adjustIndent(2); showOlc(); - Ilc ilc = marina.getILC(); - prln("ILC.done=="+ilc.getDone()+ - " ILC.infinity=="+ilc.getInfinity()+ - " ILC.count=="+ilc.getCount()); + prln("ILC.done=="+marina.getILCDone()+ + " ILC.infinity=="+marina.getILCInfinity()+ + " ILC.count=="+marina.getILC()); prln("flagA=="+marina.getFlagA()); prln("flagB=="+marina.getFlagB()); adjustIndent(-2); @@ -747,14 +592,14 @@ public class MarinaTest { private void walkOneOLC(Marina marina) { prln("Begin walkOneOLC"); - adjustIndent(2); /* + adjustIndent(2); //for (int i=-1; i<6; i++) { - marina.fillSouthProperStopper(new Instruction[] { + marina.southRing.fill(new Instruction[] { - new Instruction.Head(dock), + new Instruction.Head(marina.getOnlyDock()), - // new Instruction.Set(dock,Predicate.IgnoreFlagD, SetDest.OuterLoopCounter, 1), + // new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD, SetDest.OuterLoopCounter, 1), FLAG_NOP, FLAG_NOP, FLAG_NOP, @@ -764,11 +609,11 @@ public class MarinaTest { FLAG_NOP, - //new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, SetSource.Decrement), + //new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, SetSource.Decrement), - new Instruction.Tail(dock), + new Instruction.Tail(marina.getOnlyDock()), }); - marina.fillSouthProperStopper(new Instruction[] { + marina.southRing.fill(new Instruction[] { null, }, true); @@ -790,7 +635,7 @@ public class MarinaTest { System.out.println("master-clearing..."); // master clear on each iteration; otherwise we'd need to "run down" the olc marina.masterClear(); - marina.enableInstructionSend(true); + marina.southRing.enableInstructionSend(true); } expectTokensExactly(0); @@ -798,10 +643,10 @@ public class MarinaTest { int inOlc = i==-1 ? 0 : (1<=0; i--) { model.waitNS(128 * CYCLE_TIME_NS); prln("OLC should be: "+i); expectOlc(i); - marina.instrIn.fill(new - Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, SetSource.Decrement)); + marina.southRing.fill(new + Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, SetSource.Decrement)); } adjustIndent(-2); @@ -897,11 +740,11 @@ public class MarinaTest { System.out.println("master-clearing..."); // master clear on each iteration; otherwise we'd need to "run down" the olc marina.masterClear(); - marina.enableInstructionSend(true); + marina.southRing.enableInstructionSend(true); } int inOlc = i; - marina.fillSouthProperStopper(new Instruction[] { + marina.southRing.fill(new Instruction[] { setIlc(1), @@ -909,16 +752,16 @@ public class MarinaTest { RECV_DATA, // the Set-OLC instruction - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, inOlc), + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, inOlc), // put a Set-ILC instruction right behind it with inverted bits to be sure we're // not capturing the instruction-latch value too late in the cycle - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, (inOlc ^ (~(-1<<6)))), + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, (inOlc ^ (~(-1<<6)))), }); model.waitNS(128 * CYCLE_TIME_NS); - marina.fillNorthProperStopper(); + marina.northRing.fill(); model.waitNS(128 * CYCLE_TIME_NS); expectOlc(inOlc); @@ -933,8 +776,8 @@ public class MarinaTest { int i=0; for(i=0; i dataItems = marina.data.drainMany(num+1); + List dataItems = marina.northRing.drainMany(num+1); fatal(dataItems.size()>num, "Expected no more than "+num+ " data items to emerge but got at least: "+dataItems.size()); } private void expectNorthFifoExactly(int num) { model.waitNS(128 * CYCLE_TIME_NS); - List dataItems = marina.data.drainMany(num+1); + List dataItems = marina.northRing.drainMany(num+1); fatal(dataItems.size()!=num, "Expected exactly "+num+ " data items to emerge but got at least: "+dataItems.size()); } private void expectNorthFifoAtLeast(int num) { model.waitNS(128 * CYCLE_TIME_NS); - List dataItems = marina.data.drainMany(num); + List dataItems = marina.northRing.drainMany(num); fatal(dataItems.size() dataItems = marina.data.drainMany(num+1); + List dataItems = marina.northRing.drainMany(num+1); fatal(x>num, "Expected no more than "+num+ " tokens to emerge but got at least: "+x); @@ -1143,102 +998,102 @@ public class MarinaTest { } private void testFlagDRecomputationTime(Marina marina) { - marina.instrIn.fill(setIlc(1)); - marina.fillSouthProperStopper(new Instruction[] { + marina.southRing.fill(setIlc(1)); + marina.southRing.fill(new Instruction[] { RECV_DATA, - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,0), + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,0), SEND_DATA_IF_D_NOT_SET }); - marina.fillNorthProperStopper(); + marina.northRing.fill(); expectNorthFifoNoMoreThan(0); - marina.fillSouthProperStopper(new Instruction[] { + marina.southRing.fill(new Instruction[] { RECV_DATA, - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,1), - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,SetSource.Decrement), + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,1), + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,SetSource.Decrement), SEND_DATA_IF_D_NOT_SET }); - marina.fillNorthProperStopper(); + marina.northRing.fill(); expectNorthFifoNoMoreThan(0); - marina.fillSouthProperStopper(new Instruction[] { + marina.southRing.fill(new Instruction[] { RECV_DATA, - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,2), - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,SetSource.Decrement), + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,2), + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,SetSource.Decrement), SEND_DATA_IF_D_NOT_SET }); - marina.fillNorthProperStopper(); + marina.northRing.fill(); expectNorthFifoExactly(1); - marina.instrIn.fill(DEC); + marina.southRing.fill(DEC); - marina.fillSouthProperStopper(new Instruction[] { + marina.southRing.fill(new Instruction[] { RECV_DATA, - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,0), - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,1), + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,0), + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,1), SEND_DATA_IF_D_NOT_SET }); - marina.fillNorthProperStopper(); + marina.northRing.fill(); expectNorthFifoExactly(1); } private void testTailWaitsForHead(Marina marina) { - marina.instrIn.fill(setIlc(1)); - marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 63)); + marina.southRing.fill(setIlc(1)); + marina.southRing.fill(new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 63)); - marina.enableInstructionSend(false); - marina.enableInstructionRecirculate(true); + marina.southRing.enableInstructionSend(false); + marina.southRing.enableInstructionRecirculate(true); - marina.instrIn.fill(TORPEDOABLE_RECV_DATA); - marina.instrIn.fill(new Instruction.Head(dock)); - marina.instrIn.fill(SEND_DATA); - marina.instrIn.fill(TORPEDOABLE_RECV_DATA); - marina.instrIn.fill(SEND_TOKEN); - marina.instrIn.fill(TORPEDOABLE_RECV_DATA); - marina.instrIn.fill(new Instruction.Tail(dock)); - marina.instrIn.fillTorpedo(); + marina.southRing.fill(TORPEDOABLE_RECV_DATA); + marina.southRing.fill(new Instruction.Head(marina.getOnlyDock())); + marina.southRing.fill(SEND_DATA); + marina.southRing.fill(TORPEDOABLE_RECV_DATA); + marina.southRing.fill(SEND_TOKEN); + marina.southRing.fill(TORPEDOABLE_RECV_DATA); + marina.southRing.fill(new Instruction.Tail(marina.getOnlyDock())); + marina.southRing.fillTorpedo(); - marina.enableInstructionRecirculate(false); - marina.enableInstructionSend(true); - marina.instrIn.run(); + marina.southRing.enableInstructionRecirculate(false); + marina.southRing.enableInstructionSend(true); + marina.southRing.run(); expectNorthFifoNoMoreThan(0); prln("inserting into north proper stopper"); - marina.fillNorthProperStopper(); + marina.northRing.fill(); expectNorthFifoExactly(1); int nbToks = marina.getNumTokens(); fatal(nbToks!=1, "Expected one token to emerge but got: "+nbToks+" tokens"); } /* - marina.instrIn.fill(setIlc(1)); - marina.instrIn.fill(setOlc(1)); + marina.southRing.fill(setIlc(1)); + marina.southRing.fill(setOlc(1)); // this makes the head wait for the torpedo - marina.instrIn.fill(TORPEDOABLE_RECV_DATA); + marina.southRing.fill(TORPEDOABLE_RECV_DATA); // the head should wait for the tail - marina.instrIn.fill(new Instruction.Head(dock)); - marina.instrIn.fill(NOP); - marina.instrIn.fill(SEND_DATA); - marina.instrIn.fill(RECV_DATA); + marina.southRing.fill(new Instruction.Head(marina.getOnlyDock())); + marina.southRing.fill(NOP); + marina.southRing.fill(SEND_DATA); + marina.southRing.fill(RECV_DATA); expectNorthFifoNoMoreThan(0); - marina.instrIn.fillTorpedo(); + marina.southRing.fillTorpedo(); expectNorthFifoNoMoreThan(0); - marina.instrIn.fill(new Instruction.Tail(dock)); + marina.southRing.fill(new Instruction.Tail(marina.getOnlyDock())); expectNorthFifoExactly(1); */ private void testTailWithoutHead(Marina marina) { - marina.instrIn.fill(setIlc(1)); - marina.fillSouthProperStopper(new Instruction[] { - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 63), - new Instruction.Tail(dock), + marina.southRing.fill(setIlc(1)); + marina.southRing.fill(new Instruction[] { + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 63), + new Instruction.Tail(marina.getOnlyDock()), SEND_DATA, }); - List dataItems = marina.data.drainMany(1); + List dataItems = marina.northRing.drainMany(1); fatal(dataItems.size()!=0, "Expected exactly no data items to emerge but got at least: "+dataItems.size()); } @@ -1248,16 +1103,16 @@ public class MarinaTest { prln("Begin testHeadWaitsForTail"); adjustIndent(2); - marina.instrIn.fill(setIlc(1)); - marina.fillSouthProperStopper(new Instruction[] { - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 63), - new Instruction.Head(dock), - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1), + marina.southRing.fill(setIlc(1)); + marina.southRing.fill(new Instruction[] { + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 63), + new Instruction.Head(marina.getOnlyDock()), + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1), SEND_DATA, }); expectNorthFifoExactly(0); - marina.instrIn.fill(new Instruction.Tail(dock)); + marina.southRing.fill(new Instruction.Tail(marina.getOnlyDock())); expectNorthFifoAtLeast(1); adjustIndent(-2); @@ -1265,10 +1120,10 @@ public class MarinaTest { } private void testNonTorpedoableMoveDoesNotResetDFlag(Marina marina) { - marina.instrIn.fill(setIlc(1)); - marina.fillSouthProperStopper(new Instruction[] { - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,63), - new Instruction.Move(dock, + marina.southRing.fill(setIlc(1)); + marina.southRing.fill(new Instruction[] { + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,63), + new Instruction.Move(marina.getOnlyDock(), Predicate.IgnoreFlagD, // predicate true, // torpedoable null, // path @@ -1279,7 +1134,7 @@ public class MarinaTest { false, // dataOut false // tokenOut ), - new Instruction.Move(dock, + new Instruction.Move(marina.getOnlyDock(), Predicate.FlagD, // predicate false, // torpedoable null, // path @@ -1291,10 +1146,10 @@ public class MarinaTest { false // tokenOut ), }); - marina.instrIn.fillTorpedo(); + marina.southRing.fillTorpedo(); expectNorthFifoExactly(1); - marina.fillSouthProperStopper(new Instruction[] { - new Instruction.Move(dock, + marina.southRing.fill(new Instruction[] { + new Instruction.Move(marina.getOnlyDock(), Predicate.Default, // predicate false, // torpedoable null, // path @@ -1311,36 +1166,36 @@ public class MarinaTest { private void testAbort(Marina marina) { - marina.instrIn.fill(setIlc(1)); - marina.fillSouthProperStopper(new Instruction[] { - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.DataLatch,1), - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,2), + marina.southRing.fill(setIlc(1)); + marina.southRing.fill(new Instruction[] { + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.DataLatch,1), + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,2), SEND_DATA_IF_D_NOT_SET, - new Instruction.Head(dock), + new Instruction.Head(marina.getOnlyDock()), SEND_DATA_IF_D_NOT_SET, - new Instruction.Set(dock,Predicate.Default,SetDest.DataLatch,2), - new Instruction.Abort(dock, Predicate.FlagD), - new Instruction.Set(dock,Predicate.Default,SetDest.OuterLoopCounter,SetSource.Decrement), - new Instruction.Tail(dock), + new Instruction.Set(marina.getOnlyDock(),Predicate.Default,SetDest.DataLatch,2), + new Instruction.Abort(marina.getOnlyDock(), Predicate.FlagD), + new Instruction.Set(marina.getOnlyDock(),Predicate.Default,SetDest.OuterLoopCounter,SetSource.Decrement), + new Instruction.Tail(marina.getOnlyDock()), }, true); for(int i=0; i<4; i++) { BitVector bv; model.waitNS(128 * CYCLE_TIME_NS); - bv = new MarinaPacket(marina.data.drain()).data.bitReverse(); + bv = new MarinaPacket(marina.northRing.drain()).data.bitReverse(); fatal(bv==null, "no data item found"); prln("got " + bv.toLong()); fatal(bv.toLong()!=1, "expected 1, got " + bv.toLong()); model.waitNS(128 * CYCLE_TIME_NS); - bv = new MarinaPacket(marina.data.drain()).data.bitReverse(); + bv = new MarinaPacket(marina.northRing.drain()).data.bitReverse(); fatal(bv==null, "no data item found"); prln("got " + bv.toLong()); fatal(bv.toLong()!=1, "expected 1, got " + bv.toLong()); model.waitNS(128 * CYCLE_TIME_NS); - bv = new MarinaPacket(marina.data.drain()).data.bitReverse(); + bv = new MarinaPacket(marina.northRing.drain()).data.bitReverse(); fatal(bv==null, "no data item found"); prln("got " + bv.toLong()); fatal(bv.toLong()!=2, "expected 2, got " + bv.toLong()); @@ -1349,10 +1204,10 @@ public class MarinaTest { } private void testAbortOutsideOfLoop(Marina marina) { - marina.instrIn.fill(setIlc(1)); - marina.fillSouthProperStopper(new Instruction[] { + marina.southRing.fill(setIlc(1)); + marina.southRing.fill(new Instruction[] { // ensure that an abort doesn't cause problems if no loop is in progress - new Instruction.Abort(dock, Predicate.IgnoreFlagD), + new Instruction.Abort(marina.getOnlyDock(), Predicate.IgnoreFlagD), SEND_DATA, }); expectNorthFifoExactly(1); @@ -1377,27 +1232,27 @@ public class MarinaTest { one = one.add(Predicate.FlagC); one = one.add(Predicate.NotFlagC); - marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1)); + marina.southRing.fill(new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1)); for(boolean fast : new boolean[] { true, false }) { // clear the flags to a known state, then check both 0->1 and 1->0 transitions for(boolean b : new boolean[] { false, true, false }) { prln("state: a="+marina.getFlagA()+", b="+marina.getFlagB()); prln((b?"Setting":"Clearing")+" flags"); - Instruction inst = new Instruction.Set(dock,Predicate.IgnoreFlagD, + Instruction inst = new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD, b ? one : zero, b ? one : zero ); if (fast) { - marina.fillSouthProperStopper(new Instruction[] { + marina.southRing.fill(new Instruction[] { RECV_DATA, inst, NOP, }); model.waitNS(64 * CYCLE_TIME_NS); - marina.fillNorthProperStopper(); + marina.northRing.fill(); } else { - marina.instrIn.fill(inst); + marina.southRing.fill(inst); } fatal(marina.getFlagA()!=b, @@ -1419,7 +1274,7 @@ public class MarinaTest { prln("Begin testFlagTruthTable"); adjustIndent(2); - marina.instrIn.fill(setIlc(1)); + marina.southRing.fill(setIlc(1)); Instruction.Set.FlagFunction zero = Instruction.Set.FlagFunction.ZERO; Instruction.Set.FlagFunction one = zero.add(Predicate.FlagA).add(Predicate.NotFlagA); @@ -1433,8 +1288,8 @@ public class MarinaTest { 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, + marina.southRing.fill(new + Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD, a_state ? one : zero, b_state ? one : zero )); @@ -1445,8 +1300,8 @@ public class MarinaTest { for(int i=0; i dataItems; for(int bit=0; bit<37; bit++) { @@ -1531,16 +1386,16 @@ public class MarinaTest { prln("testing with bit pattern " + data); prln("inserting data item into north fifo ring"); - marina.fillNorthProperStopper(new MarinaPacket(data, false, addr)); + marina.northRing.fill(new MarinaPacket(data, false, addr)); prln("stopping the north proper stopper"); - marina.data.stop(); + marina.northRing.stop(); - dataItems = marina.data.drainMany(1); + dataItems = marina.northRing.drainMany(1); fatal(dataItems.size()!=0, "found a data item waiting in the north proper stopper, but should not have"); - marina.instrIn.fill(new Instruction.Move(dock, + marina.southRing.fill(new Instruction.Move(marina.getOnlyDock(), Predicate.IgnoreFlagD, // predicate false, // torpedoable null_path, // path @@ -1552,7 +1407,7 @@ public class MarinaTest { false // tokenOut )); - dataItems = marina.data.drainMany(2); + dataItems = marina.northRing.drainMany(2); fatal(dataItems.size()!=1, "found "+dataItems.size()+" data items in north fifo; expected one"); MarinaPacket mp = new MarinaPacket(dataItems.get(0)); @@ -1569,7 +1424,7 @@ public class MarinaTest { prln("Begin setOlcFromDataLatch"); adjustIndent(2); - marina.instrIn.fill(setIlc(1)); + marina.southRing.fill(setIlc(1)); // walk a bit from 0 to 5 for(int bit=0; bit<6; bit++) { @@ -1579,12 +1434,12 @@ public class MarinaTest { for(int i=0; i=0; bit--) { @@ -1616,16 +1471,16 @@ public class MarinaTest { for(int i=0; i dataItems = marina.data.drainMany(3); + List dataItems = marina.northRing.drainMany(3); fatal(dataItems.size()!=1, "expected exactly one data item, got " + dataItems.size()); MarinaPacket mp = new MarinaPacket(dataItems.get(0)); @@ -1690,8 +1545,8 @@ public class MarinaTest { prln("Begin testShiftedLiteral"); adjustIndent(2); - marina.instrIn.fill(setIlc(1)); - marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD, + marina.southRing.fill(setIlc(1)); + marina.southRing.fill(new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD, Instruction.Set.SetDest.DataLatch, 0)); @@ -1711,13 +1566,13 @@ public class MarinaTest { for(int i=0; i<19; i++) dreg.set(i, immediate.get(i)); - marina.fillSouthProperStopper(new Instruction[] { - new Instruction.Shift(dock,Predicate.IgnoreFlagD,immediate), + marina.southRing.fill(new Instruction[] { + new Instruction.Shift(marina.getOnlyDock(),Predicate.IgnoreFlagD,immediate), SEND_DATA, }); model.waitNS(CYCLE_TIME_NS * 64); - List dataItems = marina.data.drainMany(3); + List dataItems = marina.northRing.drainMany(3); fatal(dataItems.size()!=1, "expected exactly one data item, got " + dataItems.size()); BitVector bv = new MarinaPacket(dataItems.get(0)).data; @@ -1742,7 +1597,7 @@ public class MarinaTest { // Dc=1 => sigS is copied into C-flag // Dc=0 => sigA is copied into C-flag - marina.instrIn.fill(setIlc(1)); + marina.southRing.fill(setIlc(1)); for(boolean dc : new boolean[] { false, true }) { for(boolean c_flag : new boolean[] { true, false, true }) { @@ -1760,14 +1615,14 @@ public class MarinaTest { addr.set(whichbit, c_flag); prln("... and filling north fifo proper stopper"); - marina.fillNorthProperStopper(new MarinaPacket(data, false, addr)); + marina.northRing.fill(new MarinaPacket(data, false, addr)); prln("clearing flags"); prln("executing recv data with Dc="+dc); prln("copying c-flag to a-flag"); - marina.fillSouthProperStopper(new Instruction[] { - new Instruction.Set(dock,Predicate.IgnoreFlagD, CLEAR_FLAG, CLEAR_FLAG), - new Instruction.Move(dock, + marina.southRing.fill(new Instruction[] { + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD, CLEAR_FLAG, CLEAR_FLAG), + new Instruction.Move(marina.getOnlyDock(), Predicate.IgnoreFlagD, /* predicate */ true, /* torpedoable */ null, /* path */ @@ -1779,7 +1634,7 @@ public class MarinaTest { false /* tokenOut */ ), FLAG_NOP, - new Instruction.Set(dock,Predicate.IgnoreFlagD, + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD, Instruction.Set.FlagFunction.ZERO.add(Predicate.FlagC), CLEAR_FLAG ), @@ -1800,7 +1655,7 @@ public class MarinaTest { adjustIndent(2); edu.berkeley.fleet.api.BitVector bv = new edu.berkeley.fleet.api.BitVector(13); - marina.instrIn.fill(setIlc(1)); + marina.southRing.fill(setIlc(1)); // alternating ones and zeroes for(int i=0; i dataItems; MarinaPacket mp; - dataItems = marina.data.drainMany(); + dataItems = marina.northRing.drainMany(); fatal(dataItems.size()!=1, "Expected one data item to emerge but got: "+dataItems.size()+" data items"); mp = new MarinaPacket(dataItems.get(0)); @@ -1838,7 +1693,7 @@ public class MarinaTest { fatalIfBitVectorsDoNotMatch(MarinaUtils.berkToSun(bv), mp.path.get(0,13)); prln("send data with no change to path"); - marina.instrIn.fill(new Instruction.Move(dock, + marina.southRing.fill(new Instruction.Move(marina.getOnlyDock(), Predicate.IgnoreFlagD, /* predicate */ false, /* torpedoable */ null, /* path */ @@ -1850,7 +1705,7 @@ public class MarinaTest { false /* tokenOut */ )); - dataItems = marina.data.drainMany(); + dataItems = marina.northRing.drainMany(); fatal(dataItems.size()!=1, "Expected one data item to emerge but got: "+dataItems.size()+" data items"); mp = new MarinaPacket(dataItems.get(0)); @@ -1866,7 +1721,7 @@ public class MarinaTest { prln("Begin recvPath"); adjustIndent(2); - marina.instrIn.fill(setIlc(1)); + marina.southRing.fill(setIlc(1)); for(int bit=0; bit<11; bit++) { BitVector packet_data = new BitVector(37, "inbound data item"); for(int i=0; i<37; i++) packet_data.set(i, false); @@ -1874,10 +1729,10 @@ public class MarinaTest { BitVector packet_path = new BitVector(14, "inbound data item"); for(int i=0; i<14; i++) packet_path.set(i, false); - marina.fillNorthProperStopper(new MarinaPacket(packet_data, false, packet_path)); + marina.northRing.fill(new MarinaPacket(packet_data, false, packet_path)); prln("recv path, send data (using recv'd path)"); - marina.instrIn.fill(new Instruction.Move(dock, + marina.southRing.fill(new Instruction.Move(marina.getOnlyDock(), Predicate.IgnoreFlagD, /* predicate */ false, /* torpedoable */ null, /* path */ @@ -1889,7 +1744,7 @@ public class MarinaTest { false /* tokenOut */ )); - List dataItems = marina.data.drainMany(); + List dataItems = marina.northRing.drainMany(); fatal(dataItems.size()!=1, "Expected one data item to emerge but got: "+dataItems.size()+" data items"); MarinaPacket mp = new MarinaPacket(dataItems.get(0)); @@ -1907,11 +1762,11 @@ public class MarinaTest { for(int bit=0; bit<6; bit++) { int ilc = bit<0 ? 0 : (1< dataItems = marina.data.drainMany(); + List dataItems = marina.northRing.drainMany(); fatal(dataItems.size()!=ilc, "Expected "+ilc+" data item(s) to emerge but got: "+dataItems.size()+" data items"); } @@ -1921,8 +1776,8 @@ public class MarinaTest { private void testILCZero(Marina marina) { adjustIndent(2); - marina.fillSouthProperStopper(new Instruction[] { - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,0), + marina.southRing.fill(new Instruction[] { + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,0), SEND_DATA, SEND_TOKEN, }); @@ -1934,14 +1789,14 @@ public class MarinaTest { private void sendTorpedo(Marina marina) { prln("Begin sendTorpedo"); adjustIndent(2); - marina.instrIn.fill(setIlc(1)); - marina.instrIn.fill(setOlc(63)); + marina.southRing.fill(setIlc(1)); + marina.southRing.fill(setOlc(63)); model.waitNS(128 * CYCLE_TIME_NS); expectOlc(63); - marina.instrIn.fill(new - Instruction.Set(dock,Predicate.IgnoreFlagD, CLEAR_FLAG, CLEAR_FLAG)); + marina.southRing.fill(new + Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD, CLEAR_FLAG, CLEAR_FLAG)); fatal(marina.getFlagA(), "bad A flag: true"); fatal(marina.getFlagB(), "bad B flag: true"); @@ -1951,9 +1806,9 @@ public class MarinaTest { model.waitNS(128 * CYCLE_TIME_NS); - marina.fillSouthProperStopper(new Instruction[] { - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, SetSource.Infinity), - new Instruction.Move(dock, + marina.southRing.fill(new Instruction[] { + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, SetSource.Infinity), + new Instruction.Move(marina.getOnlyDock(), Predicate.IgnoreFlagD, // predicate true, // torpedoable null, // path @@ -1964,11 +1819,11 @@ public class MarinaTest { false, // dataOut false // tokenOut ), - new Instruction.Set(dock,Predicate.Default, + new Instruction.Set(marina.getOnlyDock(),Predicate.Default, SET_FLAG, Instruction.Set.FlagFunction.ZERO.add(Predicate.FlagB) ), - new Instruction.Set(dock, Predicate.FlagD, + new Instruction.Set(marina.getOnlyDock(), Predicate.FlagD, Instruction.Set.FlagFunction.ZERO.add(Predicate.FlagA), SET_FLAG ), @@ -1977,7 +1832,7 @@ public class MarinaTest { model.waitNS(128 * CYCLE_TIME_NS); prln("send torpedo. This should clear the OLC"); - marina.instrIn.fillTorpedo(); + marina.southRing.fillTorpedo(); model.waitNS(128 * CYCLE_TIME_NS); model.waitNS(128 * CYCLE_TIME_NS); @@ -1989,15 +1844,15 @@ public class MarinaTest { model.waitNS(128 * CYCLE_TIME_NS); prln("Reload OLC after torpedo, clears D-flag"); - marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 63)); + marina.southRing.fill(new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 63)); // FIXME: find another way to test this model.waitNS(128 * CYCLE_TIME_NS); expectOlc(63); prln("Set A=1, B=1 This instruction should execute because OLC!=0"); - marina.instrIn.fill(new - Instruction.Set(dock,Predicate.Default, SET_FLAG, SET_FLAG)); + marina.southRing.fill(new + Instruction.Set(marina.getOnlyDock(),Predicate.Default, SET_FLAG, SET_FLAG)); prln("A and B should be true"); fatal(!marina.getFlagA(), "bad A flag: false"); @@ -2013,11 +1868,11 @@ public class MarinaTest { List dataItems; - marina.instrIn.fill(setIlc(1)); + marina.southRing.fill(setIlc(1)); for(boolean torpedoable : new boolean[] { true, false }) { - marina.fillSouthProperStopper(new Instruction[] { - new Instruction.Move(dock, + marina.southRing.fill(new Instruction[] { + new Instruction.Move(marina.getOnlyDock(), Predicate.IgnoreFlagD, // predicate false, // torpedoable null, // path @@ -2028,8 +1883,8 @@ public class MarinaTest { false, // dataOut true // tokenOut ), - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,SetSource.Infinity), - new Instruction.Move(dock, + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,SetSource.Infinity), + new Instruction.Move(marina.getOnlyDock(), Predicate.IgnoreFlagD, // predicate torpedoable, // torpedoable null, // path @@ -2041,22 +1896,22 @@ public class MarinaTest { true // tokenOut ), // FIXME: this probably should be removed, unless Ivan doesn't want to change the behavior - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1), + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1), SEND_DATA, }); // expect nothing to come out, because the NOP is executing - dataItems = marina.data.drainMany(2); + dataItems = marina.northRing.drainMany(2); fatal(dataItems.size()!=0, "Expected no data item(s) to emerge but got at least: "+dataItems.size()+" data items"); - marina.instrIn.fillTorpedo(); + marina.southRing.fillTorpedo(); int expected = torpedoable?1:0; - dataItems = marina.data.drainMany(2); + dataItems = marina.northRing.drainMany(2); fatal(dataItems.size()!=expected, "Expected "+expected+" item to emerge but got: "+dataItems.size()+" data items"); - fatal(!marina.getILC().getDone(), "Expected ilc=done, but got "+marina.getILC()); + fatal(!marina.getILCDone(), "Expected ilc=done, but got "+marina.getILC()); } adjustIndent(-2); @@ -2064,7 +1919,7 @@ public class MarinaTest { } private void testDFlagWhenTorpedoLyingInWait(Marina marina) { - marina.fillSouthProperStopper(new Instruction[] { + marina.southRing.fill(new Instruction[] { setOlc(1), RECV_DATA, TORPEDOABLE_RECV_DATA, @@ -2077,8 +1932,8 @@ public class MarinaTest { expectTokensExactly(0); // changing the order of these lines should work, but it does not - marina.fillNorthProperStopper(); - marina.instrIn.fillTorpedo(); + marina.northRing.fill(); + marina.southRing.fillTorpedo(); expectTokensExactly(1); } @@ -2086,7 +1941,7 @@ public class MarinaTest { private void testSetOlcFollowedByDPredicated(Marina marina) { for(boolean d_set : new boolean[] { false, true }) { prln(""); - marina.fillSouthProperStopper(new Instruction[] { + marina.southRing.fill(new Instruction[] { setOlc(0), marina.kesselsCounter ? null : FLAG_NOP, d_set ? SEND_DATA_IF_D_SET : SEND_DATA_IF_D_NOT_SET, @@ -2094,7 +1949,7 @@ public class MarinaTest { expectNorthFifoExactly(d_set ? 1 : 0); prln(""); - marina.fillSouthProperStopper(new Instruction[] { + marina.southRing.fill(new Instruction[] { setOlc(32), marina.kesselsCounter ? null : FLAG_NOP, d_set ? SEND_DATA_IF_D_SET : SEND_DATA_IF_D_NOT_SET, @@ -2103,7 +1958,7 @@ public class MarinaTest { if (marina.kesselsCounter) { marina.masterClear(); - marina.enableInstructionSend(true); + marina.southRing.enableInstructionSend(true); } } } @@ -2129,9 +1984,9 @@ public class MarinaTest { prln("inserting set olc="+olc); prln("inserting set ilc=1"); - marina.fillSouthProperStopper(new Instruction[] { - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1), - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,olc), + marina.southRing.fill(new Instruction[] { + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1), + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,olc), }); // commenting the following four lines causes this test to pass @@ -2141,12 +1996,12 @@ public class MarinaTest { Instruction[] instructions = new Instruction[decr_amount+1]; for(int i=0; i=olc ? 0 : 1; - dataItems = marina.data.drainMany(2); + dataItems = marina.northRing.drainMany(2); fatal(dataItems.size()!=expected, "Expected "+expected+" item to emerge but got: "+dataItems.size()+" data items"); expectOlc(Math.max(0,olc-decr_amount)); if (marina.kesselsCounter) { // master clear on each iteration; otherwise we'd need to "run down" the olc marina.masterClear(); - marina.enableInstructionSend(true); + marina.southRing.enableInstructionSend(true); } } @@ -2187,31 +2042,29 @@ public class MarinaTest { int notZero = 1<> i; @@ -2231,15 +2084,15 @@ public class MarinaTest { if (marina.kesselsCounter) { // master clear on each iteration; otherwise we'd need to "run down" the olc marina.masterClear(); - marina.enableInstructionSend(true); + marina.southRing.enableInstructionSend(true); } int outOlc; prln("Set OLC=0"); prln("Then immediately set OLC="+notZero); - marina.fillSouthProperStopper(new Instruction[] { - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 0), - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, notZero), + marina.southRing.fill(new Instruction[] { + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 0), + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, notZero), }); model.waitNS(64 * CYCLE_TIME_NS); @@ -2249,9 +2102,9 @@ public class MarinaTest { if (!marina.kesselsCounter) { prln("Set OLC="+notZero); prln("Then immediately set OLC=0"); - marina.fillSouthProperStopper(new Instruction[] { - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, notZero), - new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 0), + marina.southRing.fill(new Instruction[] { + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, notZero), + new Instruction.Set(marina.getOnlyDock(),Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 0), }); model.waitNS(64 * CYCLE_TIME_NS); @@ -2267,8 +2120,8 @@ public class MarinaTest { prln("Begin testSouthRecirculate("+AMOUNT+")"); adjustIndent(2); - marina.enableInstructionSend(false); - marina.enableInstructionRecirculate(true); + marina.southRing.enableInstructionSend(false); + marina.southRing.enableInstructionRecirculate(true); prln("Completely fill south ring"); adjustIndent(2); @@ -2278,13 +2131,13 @@ public class MarinaTest { BitVector data = new BitVector(MarinaPacket.WORD_WIDTH, "path"); path.set(0, MarinaPacket.PATH_WIDTH, false); data.setFromLong(i+9); - marina.instrIn.fill(new MarinaPacket(data, false, path)); + marina.southRing.fill(new MarinaPacket(data, false, path)); } adjustIndent(-2); prln("Drain south ring and check contents"); adjustIndent(2); - List out = marina.instrIn.drainMany(); + List out = marina.southRing.drainMany(); boolean bad = false; for (int i=0; i 24.3ns for 62 counts => 390ps cycle time => 2.5Ghz - marina.fillSouthProperStopper(new Instruction[] { - new Instruction.Head(dock), + marina.southRing.fill(new Instruction[] { + new Instruction.Head(marina.getOnlyDock()), setOlc(xx), FLAG_NOP, FLAG_NOP, @@ -2539,12 +2396,12 @@ public class MarinaTest { FLAG_NOP, FLAG_NOP, SEND_DATA, - new Instruction.Tail(dock), + new Instruction.Tail(marina.getOnlyDock()), }, false, false); - marina.fillSouthProperStopper(new Instruction[] { + marina.southRing.fill(new Instruction[] { /* - new Instruction.Set(dock,Predicate.FlagD, + new Instruction.Set(marina.getOnlyDock(),Predicate.FlagD, Instruction.Set.FlagFunction.ZERO.add(Predicate.NotFlagA), Instruction.Set.FlagFunction.ZERO), setOlcIfZero(32), @@ -2570,13 +2427,13 @@ public class MarinaTest { //marina.startCounters(false, false); - marina.instrIn.run(); + marina.southRing.run(); vdd10.setVoltageWait(vdd); marina.startCounters(false, true); try { Thread.sleep(wait); } catch (Exception e) { } - //marina.instrIn.stop(); + //marina.southRing.stop(); marina.stopAndResetCounters(); int countNorth = marina.getNorthCount(); @@ -2588,6 +2445,9 @@ public class MarinaTest { pw.close(); break; } + + + // General Purpose ////////////////////////////////////////////////////////////////////////////// case 8888: { //int wait = 1000; @@ -2595,31 +2455,53 @@ public class MarinaTest { //int toks = 1; PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("out.dat"))); + /* for(double myvdd = 1.00; myvdd<1.01; myvdd += 0.05) { vdd = (float)myvdd; vdd18.setVoltageWait((float)Math.max(1.8,vdd)); vdd10.setVoltageWait(vdd); Thread.sleep(1000); + */ for(int toks = 0; toks < 13; toks++) { - int MAX_ITER = 10; + int MAX_ITER = 1; double total = 0; for(int iter = 0; iter < MAX_ITER; iter++) { marina.masterClear(); - marina.data.sink(); + marina.northRing.sink(); marina.stopAndResetCounters(); - marina.enableInstructionSend(true); - marina.fillSouthProperStopper(setOlc(1)); - marina.fillSouthProperStopper(new Instruction.Head(dock)); + marina.southRing.enableInstructionSend(true); + marina.southRing.fill(setOlc(1)); + /* + marina.southRing.fill(new Instruction.Set(marina.getOnlyDock(), + Predicate.IgnoreFlagD, + Instruction.Set.FlagFunction.ONE, + Instruction.Set.FlagFunction.ZERO + )); + */ + marina.southRing.fill(new Instruction.Head(marina.getOnlyDock())); for(int i=0; i