package com.sun.vlsi.chips.marina.test;
/* -*- tab-width: 4 -*- */
-import com.sun.async.test.BitVector;
import com.sun.async.test.ChainControl;
import com.sun.async.test.ChipModel;
import com.sun.async.test.JtagTester;
// The instance path, from the top cell of the netlist, of the instance of infinityWithCover
private final ChainControl cc; // specifies the scan chain
private final ChipModel model;
- public final ProperStopper datIn, tokOut, instrIn, shipOut;
+ public final ProperStopper datIn, tokOut, shipOut;
+ public final InstructionStopper instrIn;
/** Shift the report scan chain */
private void shiftReport(boolean readEnable, boolean writeEnable) {
package com.sun.vlsi.chips.marina.test;
/* -*- tab-width: 4 -*- */
-import java.io.File;
import java.util.ArrayList;
import java.util.List;
-import edu.berkeley.fleet.marina.*;
-import edu.berkeley.fleet.api.*;
-
import com.sun.async.test.BitVector;
import com.sun.async.test.ChainControl;
import com.sun.async.test.ChainTest;
import com.sun.vlsi.chips.marina.test.MarinaUtils.Station;
import com.sun.vlsi.chips.marina.test.MarinaUtils.CmdArgs.Mode;
+import edu.berkeley.fleet.api.Dock;
+import edu.berkeley.fleet.api.Instruction;
+import edu.berkeley.fleet.api.Predicate;
+import edu.berkeley.fleet.marina.MarinaFleet;
+
/**
* Tests for Marina
*/
public class MarinaTest {
//-------------------------- constants -----------------------------------
public static final int INSTR_SZ = 36;
+ public static final MarinaFleet MARINA = new MarinaFleet();
+ public static final Dock DOCK = MARINA.getOnlyInputDock();
// COLUMN_LATENCY is a delay that is larger than the latency through an Infinity column
private static final int COLUMN_LATENCY = 10; // nanoseconds
List<BitVector> din = new ArrayList<BitVector>();
- BitVector count = new BitVector(37,"count");
- BitVector one = new BitVector(37, "one");
+ BitVector count = new BitVector(36,"count");
+ BitVector one = new BitVector(36, "one");
count.setFromLong(0);
one.setFromLong(1);
for (int i=0; i<3; i++) {
prln("Begin sendToken");
adjustIndent(2);
- MarinaFleet marina = new MarinaFleet();
- Dock dock = marina.getOnlyInputDock();
Instruction sendTokenInstruction =
- new Instruction.Move(dock,
+ new Instruction.Move(DOCK,
true, /* requeueing */
Predicate.IgnoreOLC, /* predicate */
false, /* torpedoable */
true /* tokenOut */
);
edu.berkeley.fleet.api.BitVector bits =
- marina.encodeInstruction(dock, /* dispatch dock -- irrelevant for MARINA */
+ MARINA.encodeInstruction(DOCK, /* dispatch dock -- irrelevant for MARINA */
sendTokenInstruction);
- BitVector bitVector = new BitVector(INSTR_SZ, "instr");
- for(int i=0; i<INSTR_SZ; i++) bitVector.set(i, bits.get(i));
- inDock.instrIn.fill(bitVector);
+ inDock.instrIn.fill(bits);
/* FIXME: check to see if the token actually emerges! */
boolean c = inDock.getFlagC();
prln("flagC="+c);
}
+ private void walkOneOLC(IsolatedInDock inDock) {
+ prln("Begin walkOneOLC");
+ adjustIndent(2);
+ for (int i=0; i<7; i++) {
+ int inOlc = 0x20 >> i;
+ prln("inOlc="+inOlc);
+ inDock.instrIn.fill(MARINA.encodeInstruction(DOCK, new
+ Instruction.Set(DOCK,Instruction.Set.SetDest.InnerLoopCounter, inOlc)));
+ int outOlc = inDock.getOLC();
+ fatal(outOlc!=inOlc, "walkOneOLC: got="+outOlc+" expected="+inOlc);
+ }
+ adjustIndent(-2);
+ prln("End walkOneOLC");
+ }
private void doOneTest(int testNum) {
prln("MarinaTest: performing test: "+testNum);
design.masterClear(tester);
case 2: sendInstructions((IsolatedInDock)design); break;
case 3: sendToken((IsolatedInDock)design); break;
case 4: getCtrsFlags((IsolatedInDock)design); break;
+ case 5: walkOneOLC((IsolatedInDock)design); break;
default:
fatal(true, "Test number: "+testNum+" doesn't exist.");
break;