static PowerChannel vdd18;
static PowerChannel vdd10;
+ static PowerChannel vdds;
+
+ private void setVdd10(float v) {
+ if (vdd10==null) return;
+ vdd10.setVoltageWait(v);
+ }
private void doSim() throws Exception {
String netListName;
return;
}
+
Infrastructure.gpibControllers = new int[]{1};
- vdd18 = new Pst3202Channel("ch2", "tiPST3202", 2);
- vdd10 = new Pst3202Channel("ch3", "tiPST3202", 3);
- vdd10.setVoltageNoWait(vdd);
- vdd18.setVoltageNoWait(1.8f);
+ 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()
JtagTester tester =
model instanceof SimulationModel
? ((SimulationModel)model).createJtagTester("TCK", "TMS", "TRSTb", "TDI", "TDO")
- : new Netscan("jtag2"); // bad kessels counter
- //: new Netscan4("jtag3", 4); // good kessels counter
+ : new Netscan("jtag2");
+ //: new Netscan("10.0.0.200");
+ //: new Signalyzer();
+ //: new Netscan("jtag2");
JtagLogicLevel mc0=null;
JtagLogicLevel mc1=null;
- if (tester instanceof Netscan) {
- ((Netscan)tester).reset();
+ 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;
+ 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;
+ 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;
+ 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);
+ 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);
+ 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);
+ 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);
*/
//for (int i=-1; i<6; i++) {
marina.fillSouthProperStopper(new Instruction[] {
- new Instruction.Head(dock),
+ new Instruction.Head(dock),
- // new Instruction.Set(dock,Predicate.IgnoreFlagD, SetDest.OuterLoopCounter, 1),
- FLAG_NOP,
- FLAG_NOP,
- FLAG_NOP,
- TORPEDOABLE_RECV_DATA,
- FLAG_NOP,
- FLAG_NOP,
- FLAG_NOP,
+ // new Instruction.Set(dock,Predicate.IgnoreFlagD, SetDest.OuterLoopCounter, 1),
+ FLAG_NOP,
+ FLAG_NOP,
+ FLAG_NOP,
+ TORPEDOABLE_RECV_DATA,
+ FLAG_NOP,
+ FLAG_NOP,
+ FLAG_NOP,
- //new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, SetSource.Decrement),
+ //new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, SetSource.Decrement),
- new Instruction.Tail(dock),
- });
+ new Instruction.Tail(dock),
+ });
marina.fillSouthProperStopper(new Instruction[] {
- null,
- },
- true);
+ null,
+ },
+ true);
while(true) {
- BitVector bits = null;
- marina.shiftReport(true, false);
- for(int i=0; i<4; i++) {
- BitVector x = marina.cc.getOutBits(marina.REPORT_CHAIN+"."+marina.OLC_PATH_KESSEL+i);
- //System.out.println("bits are: " + x);
- bits = bits==null ? x : bits.cat(x);
- }
- System.out.println("dec="+bits.get(0));
- if (bits.get(1)) throw new RuntimeException();
+ BitVector bits = null;
+ marina.shiftReport(true, false);
+ for(int i=0; i<4; i++) {
+ BitVector x = marina.cc.getOutBits(marina.REPORT_CHAIN+"."+marina.OLC_PATH_KESSEL+i);
+ //System.out.println("bits are: " + x);
+ bits = bits==null ? x : bits.cat(x);
+ }
+ System.out.println("dec="+bits.get(0));
+ if (bits.get(1)) throw new RuntimeException();
}
*/
/* for (int i=0; i<64; i++) {
- if (marina.kesselsCounter) {
- System.out.println("master-clearing...");
- // master clear on each iteration; otherwise we'd need to "run down" the olc
- marina.masterClear();
- marina.enableInstructionSend(true);
- }
-
- expectTokensExactly(0);
- marina.getOLC();
-
- int inOlc = i==-1 ? 0 : (1<<i);
- inOlc = i;
- marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, inOlc));
- marina.instrIn.fill(SEND_DATA_IF_D_SET);
- marina.instrIn.fill(SEND_DATA_IF_D_NOT_SET);
- marina.instrIn.fill(SEND_DATA);
-
- model.waitNS(128 * CYCLE_TIME_NS);
-
- expectOlc(inOlc);
- prln("walkOneOLC: "+inOlc+" checks out");
- expectNorthFifoExactly(0);
- }
- adjustIndent(-2);
- prln("End walkOneOLC");
+ if (marina.kesselsCounter) {
+ System.out.println("master-clearing...");
+ // master clear on each iteration; otherwise we'd need to "run down" the olc
+ marina.masterClear();
+ marina.enableInstructionSend(true);
+ }
+
+ expectTokensExactly(0);
+ marina.getOLC();
+
+ int inOlc = i==-1 ? 0 : (1<<i);
+ inOlc = i;
+ marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, inOlc));
+ marina.instrIn.fill(SEND_DATA_IF_D_SET);
+ marina.instrIn.fill(SEND_DATA_IF_D_NOT_SET);
+ marina.instrIn.fill(SEND_DATA);
+
+ model.waitNS(128 * CYCLE_TIME_NS);
+
+ expectOlc(inOlc);
+ prln("walkOneOLC: "+inOlc+" checks out");
+ expectNorthFifoExactly(0);
+ }
+ adjustIndent(-2);
+ prln("End walkOneOLC");
*/
}
private void walkOneILC(Marina marina) {
fatal(nbToks!=1, "Expected one token to emerge but got: "+nbToks+" tokens");
}
- /*
- marina.instrIn.fill(setIlc(1));
- marina.instrIn.fill(setOlc(1));
+ /*
+ marina.instrIn.fill(setIlc(1));
+ marina.instrIn.fill(setOlc(1));
- // this makes the head wait for the torpedo
- marina.instrIn.fill(TORPEDOABLE_RECV_DATA);
+ // this makes the head wait for the torpedo
+ marina.instrIn.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);
+ // 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);
- expectNorthFifoNoMoreThan(0);
+ expectNorthFifoNoMoreThan(0);
- marina.instrIn.fillTorpedo();
- expectNorthFifoNoMoreThan(0);
+ marina.instrIn.fillTorpedo();
+ expectNorthFifoNoMoreThan(0);
- marina.instrIn.fill(new Instruction.Tail(dock));
- expectNorthFifoExactly(1);
- */
+ marina.instrIn.fill(new Instruction.Tail(dock));
+ expectNorthFifoExactly(1);
+ */
private void testTailWithoutHead(Marina marina) {
marina.instrIn.fill(setIlc(1));
MarinaUtils.testnum = testNum;
- switch (testNum) {
- case 0: {
-
- doOneTest(1); // passes extracted parasitics
- doOneTest(2); // passes extracted parasitics
- doOneTest(3); // passes extracted parasitics
- doOneTest(4); // passes extracted parasitics
- doOneTest(5); // passes extracted parasitics
- doOneTest(6);
-
- doOneTest(1000); // passes extracted parasitics
- doOneTest(1001); // passes extracted parasitics
- doOneTest(1003); // passes extracted parasitics
- doOneTest(1005);
- doOneTest(3000); // passes extracted parasitics
- doOneTest(3001); // passes extracted parasitics
- doOneTest(3003); // passes extracted parasitics
- doOneTest(3004); // passes extracted parasitics
- doOneTest(3005); // passes extracted parasitics
- doOneTest(3006); // passes extracted parasitics
- doOneTest(3007); // passes extracted parasitics
- doOneTest(3008); // passes extracted parasitics
- doOneTest(3009); // passes extracted parasitics
- doOneTest(3010); // passes extracted parasitics
- doOneTest(3011); // passes extracted parasitics
- doOneTest(3012); // passes extracted parasitics
- doOneTest(3013); // passes extracted parasitics
- doOneTest(3014); // passes extracted parasitics
- doOneTest(3015); // passes extracted parasitics
- doOneTest(3019); // passes extracted parasitics
- doOneTest(3020); // passes extracted parasitics
- doOneTest(3022); // passes extracted parasitics
- doOneTest(3023); // passes extracted parasitics
- doOneTest(3025); // passes extracted parasitics
- doOneTest(3026); // passes extracted parasitics
- doOneTest(3027); // passes extracted parasitics
- doOneTest(3028); // passes extracted parasitics
- doOneTest(3029); // passes extracted parasitics
- //doOneTest(3030); // passes extracted parasitics (questionable)
- //doOneTest(3031); // passes extracted parasitics should not pass!
+ switch (testNum) {
+ case 0: {
+
+ doOneTest(1); // passes extracted parasitics
+ doOneTest(2); // passes extracted parasitics
+ doOneTest(3); // passes extracted parasitics
+ doOneTest(4); // passes extracted parasitics
+ doOneTest(5); // passes extracted parasitics
+ doOneTest(6);
+
+ doOneTest(1000); // passes extracted parasitics
+ doOneTest(1001); // passes extracted parasitics
+ doOneTest(1003); // passes extracted parasitics
+ doOneTest(1005);
+ doOneTest(3000); // passes extracted parasitics
+ doOneTest(3001); // passes extracted parasitics
+ doOneTest(3003); // passes extracted parasitics
+ doOneTest(3004); // passes extracted parasitics
+ doOneTest(3005); // passes extracted parasitics
+ doOneTest(3006); // passes extracted parasitics
+ doOneTest(3007); // passes extracted parasitics
+ doOneTest(3008); // passes extracted parasitics
+ doOneTest(3009); // passes extracted parasitics
+ doOneTest(3010); // passes extracted parasitics
+ doOneTest(3011); // passes extracted parasitics
+ doOneTest(3012); // passes extracted parasitics
+ doOneTest(3013); // passes extracted parasitics
+ doOneTest(3014); // passes extracted parasitics
+ doOneTest(3015); // passes extracted parasitics
+ doOneTest(3019); // passes extracted parasitics
+ doOneTest(3020); // passes extracted parasitics
+ doOneTest(3022); // passes extracted parasitics
+ doOneTest(3023); // passes extracted parasitics
+ doOneTest(3025); // passes extracted parasitics
+ doOneTest(3026); // passes extracted parasitics
+ doOneTest(3027); // passes extracted parasitics
+ doOneTest(3028); // passes extracted parasitics
+ doOneTest(3029); // passes extracted parasitics
+ //doOneTest(3030); // passes extracted parasitics (questionable)
+ //doOneTest(3031); // passes extracted parasitics should not pass!
- // these tests take a while and usually pass
- doOneTest(1002);
- doOneTest(1004);
- doOneTest(1005);
- doOneTest(1006);
- doOneTest(3002);
- doOneTest(3016);
- doOneTest(3021);
- doOneTest(3024);
- doOneTest(3025);
- doOneTest(3040);
+ // these tests take a while and usually pass
+ doOneTest(1002);
+ doOneTest(1004);
+ doOneTest(1005);
+ doOneTest(1006);
+ doOneTest(3002);
+ doOneTest(3016);
+ doOneTest(3021);
+ doOneTest(3024);
+ doOneTest(3025);
+ doOneTest(3040);
- // this takes an insanely long time
- doOneTest(3017);
- break;
- }
- case 1: testChains(marina); break; // passes, 24-Mar (+verilog)
- case 2: testProperStoppers(marina); break; // passes, 24-Mar (+verilog)
- case 3: testSouthRecirculate(marina, 1); break; // passes, 24-Mar (+verilog)
- case 4: getCtrsFlags(marina); break; // 20-Apr (+verilog)
- case 5: sendInstructions(marina); break; // passes, 24-Mar (+verilog)
- case 6: walkOneOLC(marina); break; // 21-Apr (+verilog)
+ // this takes an insanely long time
+ doOneTest(3017);
+ break;
+ }
+ case 1: testChains(marina); break; // passes, 24-Mar (+verilog)
+ case 2: testProperStoppers(marina); break; // passes, 24-Mar (+verilog)
+ case 3: testSouthRecirculate(marina, 1); break; // passes, 24-Mar (+verilog)
+ case 4: getCtrsFlags(marina); break; // 20-Apr (+verilog)
+ case 5: sendInstructions(marina); break; // passes, 24-Mar (+verilog)
+ case 6: walkOneOLC(marina); break; // 21-Apr (+verilog)
- // Russell's tests begin with 1000
- case 1000: walkOneILC(marina); break; // 20-Apr (+verilog)
- case 1001: countIlc(marina); break; // 20-Apr (+verilog)
- case 1002: countOlc(marina); break; // 23-Apr (+verilog)
-
- case 1003: sendTorpedo(marina); break; // 23-Apr (+verilog) [with wor-hack]
-
- case 1004: flipIlcBit(marina); break; // 20-Apr (+verilog)
- case 1005: flipOlcBit(marina); break; // 21-Apr (+verilog)
-
- case 1006: testSouthRecirculate(marina, Marina.SOUTH_RING_CAPACITY-1); break; // passes, 24-Mar (+verilog)
-
- // Adam's tests begin with 3000
- case 3000: sendToken(marina); break; // passes, 24-Mar (+verilog)
- case 3001: testFlagAB(marina); break; // passes, 08-Apr (+verilog)
- case 3002: testPredicationOnAB(marina); break; // 22-Apr (+verilog)
- case 3003: testFlagC(marina); break; // 23-Apr (+verilog)
- case 3004: testFlagD(marina); break; // 23-Apr (+verilog)
- case 3005: testFlagDRecomputationTime(marina); break;
-
- case 3006: testTailWaitsForHead(marina); break;
- case 3007: testTailWithoutHead(marina); break;
- case 3008: testHeadWaitsForTail(marina); break; // 22-Apr (+verilog)
- case 3009: testAbort(marina); break; // 22-Apr (+verilog)
-
- case 3010: sendData(marina); break; // passes, 24-Mar (+verilog)
- case 3011: recvData(marina); break; // 21-Apr (+verilog)
- case 3012: sendDataWithPath(marina); break; // passes, 13-Apr (+verilog)
-
- case 3013: testSignExtendedLiteral(marina); break; // 20-Apr (+verilog)
- case 3014: testShiftedLiteral(marina); break; // 20-Apr (+verilog)
- case 3015: testSendAndRecvToken(marina); break; // 21-Apr (+verilog)
-
- case 3016: sendDataIlcInfinite(marina); break; // 22-Apr (+verilog)
- case 3017: testFlagTruthTable(marina); break; // 23-Apr (+verilog)
-
- case 3019: setOlcFromDataLatch(marina); break; // 23-Apr (+verilog)
- case 3020: setIlcFromDataLatch(marina); break; // 23-Apr (+verilog)
- case 3021: recvPath(marina); break; // 22-Apr (+verilog)
- case 3022: testILC(marina); break; // 23-Apr (+verilog)
- case 3023: testTorpedoOnAnInfinite(marina); break; // 23-Apr (+verilog)
- case 3024: testRecvAndSendWalkingOne(marina); break; // 21-Apr (+verilog)
- case 3025: testOlcDecrementAtHighSpeed(marina); break; // 23-Apr (+verilog)
-
- case 3026: testNonTorpedoableMoveDoesNotResetDFlag(marina); break; // 23-Apr (+verilog)
- case 3027: testILCZero(marina); break;
- case 3028: testAbortOutsideOfLoop(marina); break;
- case 3029: testDFlagWhenTorpedoLyingInWait(marina); break;
- case 3030: testSetOlcFollowedByDPredicated(marina); break;
- case 3031: testOverfillTokens(marina); break;
-
- case 3040: loadEveryValueOLC(marina); break;
- case 8888: {
-
- //int wait = 1000;
- int wait = 200;
- //int toks = 1;
-
- PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("out.dat")));
- for(double myvdd = 1.0; myvdd<2.0; myvdd += 0.05) {
- vdd = (float)myvdd;
- vdd18.setVoltageWait((float)Math.max(1.8,vdd));
- vdd10.setVoltageWait(vdd);
- Thread.sleep(1000);
+ // Russell's tests begin with 1000
+ case 1000: walkOneILC(marina); break; // 20-Apr (+verilog)
+ case 1001: countIlc(marina); break; // 20-Apr (+verilog)
+ case 1002: countOlc(marina); break; // 23-Apr (+verilog)
+
+ case 1003: sendTorpedo(marina); break; // 23-Apr (+verilog) [with wor-hack]
+
+ case 1004: flipIlcBit(marina); break; // 20-Apr (+verilog)
+ case 1005: flipOlcBit(marina); break; // 21-Apr (+verilog)
+
+ case 1006: testSouthRecirculate(marina, Marina.SOUTH_RING_CAPACITY-1); break; // passes, 24-Mar (+verilog)
+
+ // Adam's tests begin with 3000
+ case 3000: sendToken(marina); break; // passes, 24-Mar (+verilog)
+ case 3001: testFlagAB(marina); break; // passes, 08-Apr (+verilog)
+ case 3002: testPredicationOnAB(marina); break; // 22-Apr (+verilog)
+ case 3003: testFlagC(marina); break; // 23-Apr (+verilog)
+ case 3004: testFlagD(marina); break; // 23-Apr (+verilog)
+ case 3005: testFlagDRecomputationTime(marina); break;
+
+ case 3006: testTailWaitsForHead(marina); break;
+ case 3007: testTailWithoutHead(marina); break;
+ case 3008: testHeadWaitsForTail(marina); break; // 22-Apr (+verilog)
+ case 3009: testAbort(marina); break; // 22-Apr (+verilog)
+
+ case 3010: sendData(marina); break; // passes, 24-Mar (+verilog)
+ case 3011: recvData(marina); break; // 21-Apr (+verilog)
+ case 3012: sendDataWithPath(marina); break; // passes, 13-Apr (+verilog)
+
+ case 3013: testSignExtendedLiteral(marina); break; // 20-Apr (+verilog)
+ case 3014: testShiftedLiteral(marina); break; // 20-Apr (+verilog)
+ case 3015: testSendAndRecvToken(marina); break; // 21-Apr (+verilog)
+
+ case 3016: sendDataIlcInfinite(marina); break; // 22-Apr (+verilog)
+ case 3017: testFlagTruthTable(marina); break; // 23-Apr (+verilog)
+
+ case 3019: setOlcFromDataLatch(marina); break; // 23-Apr (+verilog)
+ case 3020: setIlcFromDataLatch(marina); break; // 23-Apr (+verilog)
+ case 3021: recvPath(marina); break; // 22-Apr (+verilog)
+ case 3022: testILC(marina); break; // 23-Apr (+verilog)
+ case 3023: testTorpedoOnAnInfinite(marina); break; // 23-Apr (+verilog)
+ case 3024: testRecvAndSendWalkingOne(marina); break; // 21-Apr (+verilog)
+ case 3025: testOlcDecrementAtHighSpeed(marina); break; // 23-Apr (+verilog)
+
+ case 3026: testNonTorpedoableMoveDoesNotResetDFlag(marina); break; // 23-Apr (+verilog)
+ case 3027: testILCZero(marina); break;
+ case 3028: testAbortOutsideOfLoop(marina); break;
+ case 3029: testDFlagWhenTorpedoLyingInWait(marina); break;
+ case 3030: testSetOlcFollowedByDPredicated(marina); break;
+ case 3031: testOverfillTokens(marina); break;
+
+ case 3040: loadEveryValueOLC(marina); break;
+ case 6666: {
+ SubchainNode chainNode =
+ (SubchainNode)marina.cc.getChainControlFromPath(Marina.DUKE_CHAIN)
+ .findNode("marina.duke.marinaGu@0.dukeAll@1.dukePart@0.ring37sW@1.scanner@0.scanFx1@1.scanCell@3");
+ int bitIndex = chainNode.getBitIndex();
+ ChainNode root = chainNode.getParentChain();
+
+ for(int i=0; i<13; i++) {
+ System.out.println("i="+i);
+ for(int j=0; j<12; j++)
+ root.getInBits().set(bitIndex+j, false);
+ root.getInBits().set(bitIndex+i, true);
+ marina.shiftDuke(false, true);
+ System.in.read();
+ }
+ break;
+ }
+
+ case 7777: {
+
+ int wait = 300;
+
+ PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("out.dat")));
+
+ vdd = 0.9f;
+ vdd18.setVoltageWait((float)Math.max(1.8,vdd));
+ //vdd10.setVoltageWait(vdd);
+
+ if (!Marina.kesselsCounter) throw new RuntimeException();
+ if (!Marina.omegaCounter) throw new RuntimeException();
+
+ for(int xx=1; xx<65; xx++) {
+ marina.masterClear();
+ marina.data.sink();
+ marina.stopAndResetCounters();
+
+ marina.enableInstructionSend(true);
+ marina.fillSouthProperStopper(new Instruction.Set(dock,Predicate.IgnoreFlagD,
+ Instruction.Set.FlagFunction.ZERO
+ .add(Predicate.FlagA).add(Predicate.NotFlagA),
+ Instruction.Set.FlagFunction.ZERO));
+ //int xx = 63; // 1.802ms
+ //int xx = 1; // 0.207ms => 24.3ns for 62 counts => 390ps cycle time => 2.5Ghz
+ marina.fillSouthProperStopper(new Instruction[] {
+ new Instruction.Head(dock),
+ setOlc(xx),
+ FLAG_NOP,
+ FLAG_NOP,
+ TORPEDOABLE_RECV_DATA,
+ FLAG_NOP,
+ FLAG_NOP,
+ SEND_DATA,
+ new Instruction.Tail(dock),
+ }, false, false);
+
+ marina.fillSouthProperStopper(new Instruction[] {
+ /*
+ new Instruction.Set(dock,Predicate.FlagD,
+ Instruction.Set.FlagFunction.ZERO.add(Predicate.NotFlagA),
+ Instruction.Set.FlagFunction.ZERO),
+ setOlcIfZero(32),
+ setIlc(63),
+ SEND_DATA_IF_A_SET_AND_D_NOT_SET,
+ setIlc(63),
+ SEND_DATA_IF_A_SET_AND_D_NOT_SET,
+ DEC,
+ setIlc(63),
+ SEND_DATA_IF_A_SET_AND_D_NOT_SET,
+ setIlc(63),
+ SEND_DATA,
+ */
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ }, true, true);
+
+ //marina.startCounters(false, false);
+
+ marina.instrIn.run();
+
+ vdd10.setVoltageWait(vdd);
+ marina.startCounters(false, true);
+
+ try { Thread.sleep(wait); } catch (Exception e) { }
+ //marina.instrIn.stop();
+
+ marina.stopAndResetCounters();
+ int countNorth = marina.getNorthCount();
+ int countSouth = marina.getSouthCount();
+ pw.println(xx + " " + countNorth + " " + vdd + " " + vdd10.readCurrent());
+ pw.flush();
+ System.out.println(xx + " " + countNorth + " " + vdd + " " + vdd10.readCurrent());
+ }
+ pw.close();
+ break;
+ }
+ case 8888: {
+
+ //int wait = 1000;
+ int wait = 200;
+ //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;
- double total = 0;
- for(int iter = 0; iter < MAX_ITER; iter++) {
+ int MAX_ITER = 10;
+ double total = 0;
+ for(int iter = 0; iter < MAX_ITER; iter++) {
- marina.masterClear();
- marina.data.sink();
- marina.stopAndResetCounters();
+ marina.masterClear();
+ marina.data.sink();
+ marina.stopAndResetCounters();
- marina.enableInstructionSend(true);
- marina.fillSouthProperStopper(setOlc(1));
- marina.fillSouthProperStopper(new Instruction.Head(dock));
- for(int i=0; i<toks; i++)
- marina.fillSouthProperStopper(/*SEND_DATA*/NOP);
- marina.fillSouthProperStopper(new Instruction[] {
- new Instruction.Tail(dock),
- }, false, true);
- marina.startCounters();
+ marina.enableInstructionSend(true);
+ marina.fillSouthProperStopper(setOlc(1));
+ marina.fillSouthProperStopper(new Instruction.Head(dock));
+ for(int i=0; i<toks; i++)
+ marina.fillSouthProperStopper(/*SEND_DATA*/NOP);
+ marina.fillSouthProperStopper(new Instruction[] {
+ new Instruction.Tail(dock),
+ }, false, true);
- marina.instrIn.run();
- try { Thread.sleep(wait); } catch (Exception e) { }
- //marina.instrIn.stop();
-
- marina.stopAndResetCounters();
- int countNorth = marina.getNorthCount();
- int count = marina.getSouthCount();
- System.out.println();
- System.out.println();
- if (count > (2<<29))
- System.out.println("warning: count was greater than 2^29...");
- double gst = ((((double)count*2)) / (1000000. * wait /* * toks*/));
- System.out.println("south counter is: " + count + ", which is " + gst + "Ginst/sec with toks="+toks + " @vdd="+vdd);
- total += gst;
-
- System.out.println();
- System.out.println();
- /*
- System.out.println("counters are " + count + " and " + countNorth + "; ratio is "+
- (((double)countNorth)/((double)(count*2))) + " " +
- (((double)countNorth)/((double)(count*2+1))) + " " +
- "");
- */
- }
- pw.println(vdd + " " + toks + " " + (((double)total) / MAX_ITER));
- pw.flush();
+ marina.instrIn.run();
+
+ // have to set the voltage while drawing current
+ vdd10.setVoltageWait(vdd);
+
+ marina.startCounters();
+ try { Thread.sleep(wait); } catch (Exception e) { }
+ marina.stopAndResetCounters();
+ //marina.instrIn.stop();
+
+ int countNorth = marina.getNorthCount();
+ int countSouth = marina.getSouthCount();
+ System.out.println();
+ System.out.println();
+ if (countSouth > (2<<29))
+ System.out.println("warning: count was greater than 2^29...");
+ double gst = ((((double)countSouth*2)) / (1000000. * wait /* * toks*/));
+ System.out.println("south counter is: " + countSouth + ", which is " + gst + "Ginst/sec with toks="+toks + " @vdd="+vdd);
+ total += gst;
+
+ System.out.println();
+ System.out.println();
+ /*
+ System.out.println("counters are " + count + " and " + countNorth + "; ratio is "+
+ (((double)countNorth)/((double)(count*2))) + " " +
+ (((double)countNorth)/((double)(count*2+1))) + " " +
+ "");
+ */
}
+ float vdd10v = vdd10.readVoltage();
+ float vdd18v = vdd18.readVoltage();
+ float vddsv = vdds.readCurrent();
+ float vdd10c = vdd10.readCurrent();
+ float vdd18c = vdd18.readCurrent();
+ pw.println(vdd + " " +
+ toks + " " +
+ (((double)total) / MAX_ITER) + " " +
+ //vddsv + " " +
+ vdd10c + " " +
+ vdd18v + " " +
+ vdd18c + " " +
+ "");
+ pw.flush();
}
- break;
}
- case 9999:
- loadEveryValueOLC(marina);
- countOlc(marina);
- break;
-
- default:
- fatal(true, "Test number: "+testNum+" doesn't exist.");
- break;
+ break;
+ }
+ case 8889: {
+
+ int wait = 1000;
+ //int wait = 200;
+ //int toks = 1;
+
+ PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("out.dat")));
+ for(int toks = 0; toks < 13; toks++) {
+ int MAX_ITER = 10;
+ double total = 0;
+ for(int iter = 0; iter < MAX_ITER; iter++) {
+
+ marina.masterClear();
+ marina.data.sink();
+ marina.stopAndResetCounters();
+
+ marina.enableInstructionSend(true);
+ marina.fillSouthProperStopper(setOlc(1));
+ marina.fillSouthProperStopper(new Instruction.Set(dock,Predicate.IgnoreFlagD,
+ Instruction.Set.FlagFunction.ZERO,
+ Instruction.Set.FlagFunction.ZERO));
+ marina.fillSouthProperStopper(new Instruction.Head(dock));
+ //marina.fillSouthProperStopper(setIlc(31));
+ marina.fillSouthProperStopper(SEND_DATA);
+ for(int i=0; i<toks+1; i++) {
+ //marina.fillSouthProperStopper(FLAG_NOP_IF_FLAG_A);
+ marina.fillSouthProperStopper(FLAG_NOP);
+ }
+ marina.fillSouthProperStopper(new Instruction[] {
+ new Instruction.Tail(dock),
+ }, false, true);
+ marina.startCounters();
+
+ marina.instrIn.run();
+ try { Thread.sleep(wait); } catch (Exception e) { }
+
+ marina.stopAndResetCounters();
+ int countNorth = marina.getNorthCount();
+ int count = marina.getSouthCount();
+ System.out.println();
+ System.out.println();
+ if (count > (2<<29))
+ System.out.println("warning: count was greater than 2^29...");
+ double gst = ((((double)count*2)) / (1000000. * wait /* * toks*/));
+ System.out.println("south counter is: " + count + ", which is " + gst + "Ginst/sec with toks="+toks + " @vdd="+vdd);
+ total += gst;
+
+ System.out.println();
+ System.out.println();
+ }
+ pw.println(vdd + " " + toks + " " + (((double)total) / MAX_ITER));
+ pw.flush();
+ }
+ break;
}
- // If we get here then test passed
- prln("Test Result: Passed");
- printTestTime();
- //Infrastructure.exit(0);
+ case 9999:
+ loadEveryValueOLC(marina);
+ countOlc(marina);
+ break;
+
+ default:
+ fatal(true, "Test number: "+testNum+" doesn't exist.");
+ break;
+ }
+ // If we get here then test passed
+ prln("Test Result: Passed");
+ printTestTime();
+ //Infrastructure.exit(0);
}