From cdc074651bd3827ca65959a8a87038ae5a4c99c6 Mon Sep 17 00:00:00 2001 From: Adam Megacz Date: Tue, 21 Apr 2009 01:24:00 +0000 Subject: [PATCH] fix ILC tests, take advantage of new command line flags, update which tests pass --- .../com/sun/vlsi/chips/marina/test/MarinaTest.java | 118 +++++++++++++------- 1 file changed, 80 insertions(+), 38 deletions(-) diff --git a/testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java b/testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java index 6b7ae86..cc2d2b9 100644 --- a/testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java +++ b/testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java @@ -14,6 +14,7 @@ import com.sun.async.test.JtagSubchainTesterModel; import com.sun.async.test.JtagTester; import com.sun.async.test.ManualPowerChannel; import com.sun.async.test.NanosimModel; +import com.sun.async.test.VerilogModel; import com.sun.async.test.Netscan4; import com.sun.async.test.PowerChannel; import com.sun.async.test.Pst3202Channel; @@ -218,7 +219,7 @@ public class MarinaTest { fatal(true, "unrecognized CmdArgs.Mode"); return; } - model = new NanosimModel(); + model = cmdArgs.useVerilog ? new VerilogModel() : new NanosimModel(); //tester = ((SimulationModel)model).createJtagTester("TCK", "TMS", "TRSTb", "TDI", "TDO"); ChainControls ccs = new ChainControls(); @@ -228,7 +229,7 @@ public class MarinaTest { testerC = ((SimulationModel)model).createJtagSubchainTester("sic[1:9]", null); testerD.printInfo = testerR.printInfo = testerC.printInfo = false; - int khz = 1000000; + int khz = model instanceof VerilogModel ? 100000 : 1000000; ChainControl ccD, ccR, ccC; ccD = new ChainControl(SCAN_CHAIN_XML, testerD, 1.8f, khz); @@ -243,18 +244,41 @@ public class MarinaTest { ctR = new ChainTest(ccR, pc); ctC = new ChainTest(ccC, pc); - ((SimulationModel)model).start("nanosim -c cfg", netListName, 0, !cmdArgs.jtagShift); - - /* - ctD.testAllChains("marina", Infrastructure.SEVERITY_WARNING); - ctR.testAllChains("marina", Infrastructure.SEVERITY_WARNING); - ctC.testAllChains("marina", Infrastructure.SEVERITY_WARNING); - */ + if (model instanceof VerilogModel) { + VerilogModel vm = (VerilogModel)model; + vm.start("verilog", "marina.v", VerilogModel.DUMPVARS); + vm.setNodeState("sid[9]", 1); + vm.setNodeState("sic[9]", 1); + vm.setNodeState("sir[9]", 1); + model.waitNS(1000); + vm.setNodeState("sid[9]", 0); + vm.setNodeState("sic[9]", 0); + vm.setNodeState("sir[9]", 0); + model.waitNS(1000); + } else { + ((SimulationModel)model).start("nanosim -c cfg", netListName, 0, !cmdArgs.jtagShift); + System.out.println("**** vdd="+((NanosimModel)model).getVdd()); + } + + if (cmdArgs.testChains) { + ctC.testOneChain(Marina.CONTROL_CHAIN, Infrastructure.SEVERITY_WARNING); + } + ccC.resetInBits(); + ccC.shift(Marina.CONTROL_CHAIN, false, true); + if (cmdArgs.testChains) { + ctD.testOneChain(Marina.DATA_CHAIN, Infrastructure.SEVERITY_WARNING); + //ccD.resetInBits(); + //ccD.shift(Marina.DATA_CHAIN, false, true); + + ctR.testOneChain(Marina.REPORT_CHAIN, Infrastructure.SEVERITY_WARNING); + //ccR.resetInBits(); + //ccR.shift(Marina.REPORT_CHAIN, false, true); + } ccs.addChain(Marina.DATA_CHAIN, ccD); ccs.addChain(Marina.REPORT_CHAIN, ccR); ccs.addChain(Marina.CONTROL_CHAIN, ccC); - + marina = new Marina(ccs, model, !cmdArgs.jtagShift, indenter); //System.out.println("launching"); @@ -436,6 +460,7 @@ public class MarinaTest { adjustIndent(2); for(ProperStopper ps : new ProperStopper[] { marina.data, marina.instrIn }) { + prln("testing " + (ps == marina.data ? "data" : "instruction") + " stopper"); adjustIndent(2); @@ -468,7 +493,8 @@ public class MarinaTest { count = count.add(one); } - marina.instrIn.fillMany(din); + for(BitVector d : din) + marina.instrIn.fill(new MarinaPacket(d, false, MarinaPacket.null_path)); adjustIndent(-2); prln("End sendInstructions"); @@ -689,7 +715,6 @@ public class MarinaTest { Ilc ilc = marina.getILC(); prln("ILC.done=="+ilc.getDone()+ " ILC.infinity=="+ilc.getInfinity()+ - " ILC.zero=="+ilc.getZero()+ " ILC.count=="+ilc.getCount()); boolean a = marina.getFlagA(); @@ -704,13 +729,14 @@ public class MarinaTest { private void walkOneOLC(Marina marina) { prln("Begin walkOneOLC"); adjustIndent(2); - for (int i=0; i<7; i++) { + for (int i=6; i>=0; i--) { int inOlc = 0x20 >> i; prln("Set inOlc="+inOlc); marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, inOlc)); int outOlc = marina.getOLC(); fatal(outOlc!=inOlc, "walkOneOLC: got="+outOlc+" expected="+inOlc); + prln("walkOneOLC: "+inOlc+" checks out"); } adjustIndent(-2); prln("End walkOneOLC"); @@ -718,9 +744,9 @@ public class MarinaTest { private void walkOneILC(Marina marina) { prln("Begin walkOneILC"); adjustIndent(2); - for (int i=0; i<7; i++) { + for (int i=0; i<6; i++) { // Mask off the "zero" bit position - int inIlc = 0x20 >> i; + int inIlc = 1 << i; prln("inIlc="+inIlc); marina.instrIn.fill(new @@ -729,10 +755,7 @@ public class MarinaTest { Ilc ilc = marina.getILC(); int outIlc = ilc.getCount(); fatal(outIlc!=inIlc, "bad ILC count: "+outIlc+" expected: "+outIlc); - - boolean inZero = inIlc==0; - boolean outZero = ilc.getZero(); - fatal(outZero!=inZero, "bad ILC zero: "+outZero); + fatal(ilc.getInfinity(), "bad Infinity bit: true"); } prln("Now test the infinity bit"); @@ -758,7 +781,7 @@ public class MarinaTest { prln("execute a move instruction that does nothing except decrement the ILC to zero"); marina.instrIn.fill( new Instruction.Move(dock, - Predicate.IgnoreFlagD, /* predicate */ + Predicate.IgnoreFlagD, /* predicate */ false, /* torpedoable */ null, /* path */ false, /* tokenIn */ @@ -1192,6 +1215,7 @@ public class MarinaTest { // 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"); marina.instrIn.fill(new @@ -1585,6 +1609,7 @@ 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 */ false, /* torpedoable */ @@ -1890,7 +1915,6 @@ public class MarinaTest { int ilcCount = ilc.getCount(); fatal(ilcCount!=notZero, "bad ILC count: "+ilcCount+" expected: "+notZero); - fatal(ilc.getZero(), "bad ILC zero bit: true"); fatal(ilc.getInfinity(), "bad ILC Infinity bit: true"); prln("Set ILC="+notZero); @@ -1906,7 +1930,6 @@ public class MarinaTest { ilcCount = ilc.getCount(); fatal(ilcCount!=0, "bad ILC count: "+ilcCount+" expected: 0"); - fatal(!ilc.getZero(), "bad ILC zero bit: false"); fatal(ilc.getInfinity(), "bad ILC Infinity bit: true"); } @@ -1965,7 +1988,7 @@ public class MarinaTest { adjustIndent(-2); prln("End flipOlcBit"); } - private void testSouthRecirculate (Marina marina) { + private void testSouthRecirculate(Marina marina) { prln("Begin testSouthRecirculate"); adjustIndent(2); @@ -1978,9 +2001,11 @@ public class MarinaTest { adjustIndent(2); for (int i=0; i