private static final int MORE_THAN_DATA_OUT_SATURATION_AMOUNT = 10;
// Nominal cycle time assuming 4 GHz throughput
- private static final double CYCLE_TIME_NS = 0.250;
+ private static double CYCLE_TIME_NS;
//-------------------------------- types ---------------------------------
return;
}
model = cmdArgs.useVerilog ? new VerilogModel() : new NanosimModel();
-
+ CYCLE_TIME_NS = cmdArgs.useVerilog ? (100*20) : 0.250;
+
//tester = ((SimulationModel)model).createJtagTester("TCK", "TMS", "TRSTb", "TDI", "TDO");
ChainControls ccs = new ChainControls();
JtagTester testerD, testerR, testerC;
MarinaPath path = new MarinaPath((MarinaFleet)dock.getShip().getFleet(), bv);
prln("send data");
- marina.instrIn.fill(
- new Instruction.Move(dock,
+ marina.instrIn.fill(new Instruction.Move(dock,
Predicate.IgnoreFlagD, /* predicate */
false, /* torpedoable */
path, /* path */
prln("ILC.done=="+ilc.getDone()+
" ILC.infinity=="+ilc.getInfinity()+
" ILC.count=="+ilc.getCount());
-
- boolean a = marina.getFlagA();
- prln("flagA=="+a);
-
- boolean b = marina.getFlagB();
- prln("flagB=="+b);
-
+ prln("flagA=="+marina.getFlagA());
+ prln("flagB=="+marina.getFlagB());
adjustIndent(-2);
prln("end getCtrsFlags");
}
prln("Begin walkOneOLC");
adjustIndent(2);
for (int i=6; i>=0; i--) {
- int inOlc = 0x20 >> i;
+ int inOlc = 1<<i;
prln("Set inOlc="+inOlc);
- marina.instrIn.fill(new
- Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 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");
// Mask off the "zero" bit position
int inIlc = 1 << i;
prln("inIlc="+inIlc);
-
- marina.instrIn.fill(new
- Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, inIlc));
-
+ marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, inIlc));
Ilc ilc = marina.getILC();
int outIlc = ilc.getCount();
fatal(outIlc!=inIlc, "bad ILC count: "+outIlc+" expected: "+outIlc);
-
fatal(ilc.getInfinity(), "bad Infinity bit: true");
}
prln("Now test the infinity bit");
- marina.instrIn.fill(new
- Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, SetSource.Infinity));
+ marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, SetSource.Infinity));
Ilc ilc = marina.getILC();
fatal(!ilc.getInfinity(), "bad Infinity bit: false");
adjustIndent(-2);
fatal(ilc!=maxIlc, "bad ILC count: "+ilc+" expected: "+maxIlc);
prln("execute a move instruction that does nothing except decrement the ILC to zero");
+
marina.instrIn.fill(
new Instruction.Move(dock,
- Predicate.IgnoreFlagD, /* predicate */
- false, /* torpedoable */
- null, /* path */
- false, /* tokenIn */
- false, /* dataIn */
- false, /* latchData */
- false, /* latchPath */
- false, /* dataOut */
- false /* tokenOut */
+ Predicate.IgnoreFlagD, // predicate
+ false, // torpedoable
+ null, // path
+ false, // tokenIn
+ false, // dataIn
+ false, // latchData
+ false, // latchPath
+ false, // dataOut
+ false // tokenOut
));
// wait for ILC to count from 63 to 0
- model.waitNS(64 * CYCLE_TIME_NS);
+ //model.waitNS(64 * CYCLE_TIME_NS);
+ model.waitNS(10000);
prln("Check that ILC==0");
ilc = marina.getILC().getCount();
prln("Successfully inserted " + i + " instructions");
}
+ private static MarinaPath null_path = new MarinaPath((MarinaFleet)dock.getShip().getFleet(),
+ MarinaUtils.sunToBerk(MarinaPacket.null_path));
+
private static final Instruction NOP =
new Instruction.Move(dock,
Predicate.IgnoreFlagD, /* predicate */
new Instruction.Move(dock,
Predicate.IgnoreFlagD, /* predicate */
false, /* torpedoable */
- null, /* path */
+ null_path, /* path */
false, /* tokenIn */
false, /* dataIn */
false, /* latchData */
new Instruction.Move(dock,
Predicate.IgnoreFlagD, /* predicate */
false, /* torpedoable */
- null, /* path */
+ null_path, /* path */
false, /* tokenIn */
false, /* dataIn */
false, /* latchData */
private static final Instruction REQUEUEING_SEND_DATA =
new Instruction.Move(dock,
- Predicate.IgnoreFlagD, /* predicate */
+ Predicate.IgnoreFlagD, /* predicate */
false, /* torpedoable */
- null, /* path */
+ null_path, /* path */
false, /* tokenIn */
false, /* dataIn */
false, /* latchData */
prln("Begin testSignExtendedLiteral");
adjustIndent(2);
- for(long val : new long[] { -1, 0, 1, (-1L << 14) }) {
+ 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,
"Check correct setting of the ILC zero bit");
for (int i=0; i<6; i++) {
- int notZero = 32 >> i;
+ int notZero = 1<<i;
prln("Set ILC=0");
marina.instrIn.fill(new
Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 0));
// these tests run fairly quickly
doOneTest(1);
doOneTest(2);
+ doOneTest(4);
+ doOneTest(1001);
doOneTest(3000);
doOneTest(3001);
doOneTest(3006);
+ doOneTest(3013);
+ doOneTest(3014);
doOneTest(3018);
- //doOneTest(1000);
// these tests take a while and usually pass
+ doOneTest(1000);
+ doOneTest(1004);
doOneTest(1006);
break;
case 1: testProperStoppers(marina); break; // passes, 24-Mar (+verilog)
case 2: sendInstructions(marina); break; // passes, 24-Mar (+verilog)
- case 4: getCtrsFlags(marina); break;
+ case 4: getCtrsFlags(marina); break; // 20-Apr (+verilog)
case 5: walkOneOLC(marina); break;
// Russell's tests begin with 1000
case 1000: walkOneILC(marina); break; // 20-Apr (+verilog)
- case 1001: countIlc(marina); break;
+ case 1001: countIlc(marina); break; // 20-Apr (+verilog)
case 1002: countOlc(marina); break;
case 1003: sendTorpedo(marina); break;
- case 1004: flipIlcBit(marina); break;
+ case 1004: flipIlcBit(marina); break; // 20-Apr (+verilog)
case 1005: flipOlcBit(marina); break;
case 1006: testSouthRecirculate(marina); break; // passes, 24-Mar (+verilog)
case 3010: testRequeueStage0to2to3to0(marina); break;
case 3011: recvData(marina); break;
case 3012: testFlagC(marina); break;
- case 3013: testSignExtendedLiteral(marina); break;
- case 3014: testShiftedLiteral(marina); break; // fails, 09-Apr
+ case 3013: testSignExtendedLiteral(marina); break; // 20-Apr (+verilog)
+ case 3014: testShiftedLiteral(marina); break; // 20-Apr (+verilog)
case 3015: testSendAndRecvToken(marina); break;
case 3016: sendDataIlcInfinite(marina); break;
case 3017: testFlagTruthTable(marina); break;