/** The path has the form:
* chipName.chainName.instanceName1.instanceName2 ...
*/
- public ChainControl getChainControlFromPath(String path) {
+ private ChainControl getChainControlFromPath(String path) {
for (String chainName : chainToControl.keySet()) {
if (path.startsWith(chainName)) return chainToControl.get(chainName);
}
BitVector d = new BitVector(37, "token"); d.setFromLong(0);
BitVector t = new BitVector(1, "token"); t.setFromLong(0);
BitVector a = new BitVector(14, "addr"); a.setFromLong(0);
- TORPEDO = t.cat(a).cat(d);
+ TORPEDO = d.cat(t).cat(a);
}
// Convert a Berkeley BitVector into a Sun BitVector
private BitVector berkToSun(edu.berkeley.fleet.api.BitVector berkBits) {
}
BitVector t = new BitVector(1, "token"); t.setFromLong(1);
BitVector a = new BitVector(14, "addr"); a.setFromLong(0);
- //super.fill(instr.cat(t).cat(a));
- super.fill(t.cat(a).cat(instr));
+ super.fill(instr.cat(t).cat(a));
}
@Override
public BitVector drain() {
// The name of the scan chain
// The instance path, from the top cell of the netlist, of the instance of infinityWithCover
- public final ChainControls cc; // specifies the scan chain
+ private final ChainControls cc; // specifies the scan chain
private final ChipModel model;
public final ProperStopper data;
public final InstructionStopper instrIn;
((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);
- */
ccs.addChain(Marina.DATA_CHAIN, ccD);
ccs.addChain(Marina.REPORT_CHAIN, ccR);
marina = new Marina(ccs, model, !cmdArgs.jtagShift, indenter);
- /*
- System.out.println("launching");
- ChainG.createAndShowGUI(marina.cc.getChainControlFromPath(Marina.REPORT_CHAIN));
- System.out.println(" launched.");
- */
+ //System.out.println("launching");
+ //ChainG.createAndShowGUI(marina.cc.getChainControlFromPath(Marina.REPORT_CHAIN));
+ //System.out.println(" launched.");
doOneTest(cmdArgs.testNum);
prln("Begin testSouthRecirculate");
adjustIndent(2);
- //int AMOUNT = Marina.SOUTH_RING_CAPACITY;
- int AMOUNT = 1;
-
marina.enableInstructionSend(false);
marina.enableInstructionRecirculate(true);
prln("Completely fill south ring");
- for (int i=0; i<AMOUNT; i++) {
+ for (int i=0; i<Marina.SOUTH_RING_CAPACITY; i++) {
BitVector instr = new BitVector(36, "Instr"+i);
- instr.setFromLong(0);
+ instr.setFromLong(i);
marina.instrIn.fill(instr);
}
-
- //if (1==1) while(true) try { Thread.sleep(1000); } catch (Exception e) { }
-
prln("Drain south ring and check contents");
List<BitVector> out = marina.instrIn.drainMany();
- for (int i=0; i<AMOUNT; i++) {
+ for (int i=0; i<Marina.SOUTH_RING_CAPACITY; i++) {
int expect = (i+Marina.SOUTH_RING_CAPACITY-1) % Marina.SOUTH_RING_CAPACITY;
long got = out.get(i).toLong();
fatal(got!=expect, "bad instruction: "+got+" expected: "+expect);
}
for (int i=0; i<5; i++) {}
-
adjustIndent(-2);
prln("End testSouthRecirculate");
private static final int STOPPED_IN_NDX = 3;
private final String name;
- private final String captureClockRelPath = "fillStag@1.gaspFill@0.fillScan@1";
+ private final String captureClockRelPath = "fillStag@0.all1in52@1.data1in3@0";
// test library direct write mode doesn't understand per register write
// enables. We get simulation to work by toggling write clock.
private final boolean clockHack;
- private final String captureClockName = "si[4]";
+ private final String captureClockName = "wrr";
private boolean traceFill = true;
private boolean traceDrain = true;
private void shiftData(boolean readEnable, boolean writeEnable) {
cc.shift(dataChain, readEnable, writeEnable);
if (writeEnable) {
- System.out.println("shiftData(): clockHack="+(clockHack)+
- ", (model instanceof NanosimModel)="+(model instanceof NanosimModel));
if (clockHack && model instanceof NanosimModel) {
NanosimModel nanoModel = (NanosimModel) model;
nanoModel.setNodeState(captureClock, 1);
BitVector wrEn = new BitVector(2, "write enable");
wrEn.setFromLong(3);
- BitVector bv1 = wrEn.cat(dta);
- cc.setInBits(dataPath, bv1);
- prln("first shift");
+ cc.setInBits(dataPath, wrEn.cat(dta));
shiftData(false, true);
-
- BitVector bv0 = new BitVector(bv1.getNumBits(), "");
- for(int i=0; i<bv0.getNumBits(); i++) bv0.set(i, false);
- cc.setInBits(dataPath, bv0);
- prln("second shift");
- shiftData(false, false);
-
- prln("third shift");
- shiftData(true, false);
- BitVector bv2 = cc.getOutBits(dataPath);
- System.out.println("bv1 = " + bv1);
- System.out.println("bv2 = " + bv2);
fill(); // fill = 1
idle(); // fill = 0