return count.bitReverse().toLong();
}
/** Fill the "North" Fifo ring */
- public void fillNorthProperStopper(BitVector data, boolean tokenhood, BitVector address) {
- int len = 37+1+14;
- BitVector bv = new BitVector(len, "empty");
- for(int i=0; i<37; i++) bv.set(i, data.get(i));
- bv.set(37, !tokenhood);
- for(int i=38; i<38+14; i++) bv.set(i, address.get(i-38));
- this.data.fill(bv);
+ public void fillNorthProperStopper(MarinaPacket mp) {
+ this.data.fill(mp.toSingleBitVector());
}
/** Enable the transmission of instructions from the instruction
* ring test structure to the EPI FIFO. */
--- /dev/null
+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;
+import com.sun.async.test.NanosimModel;
+
+/** This class encapsulates a "packet" -- a data item in flight plus
+ * its tokenhood and path */
+public class MarinaPacket {
+
+ public final BitVector data;
+ public final boolean tokenhood;
+ public final BitVector path;
+
+ /** "parse" a token from the raw 37+1+14 bits in the north proper stopper */
+ public MarinaPacket(BitVector singleBitVector) {
+ this.data = new BitVector(37, "marina packet data");
+ this.path = new BitVector(14, "marina packet path");
+ this.tokenhood = singleBitVector.get(37);
+ for(int i=0; i<37; i++) data.set(i, singleBitVector.get(i));
+ for(int i=38; i<38+14; i++) path.set(i-38, singleBitVector.get(i));
+ }
+
+ /** manually assemble a packet */
+ public MarinaPacket(BitVector data, boolean tokenhood, BitVector path) {
+ this.data = data;
+ this.tokenhood = tokenhood;
+ this.path = path;
+ }
+
+ /** convert a packet into a single BitVector, suitable for insertion in the north proper stopper */
+ public BitVector toSingleBitVector() {
+ BitVector bv = new BitVector(37+1+14, "marina packet");
+ for(int i=0; i<37; i++) bv.set(i, data.get(i));
+ bv.set(37, !tokenhood);
+ for(int i=38; i<38+14; i++) bv.set(i, path.get(i-38));
+ return bv;
+ }
+
+ public String toString() {
+ StringBuffer ret = new StringBuffer();
+ ret.append("MarinaPacket(");
+ ret.append(data.toString());
+ ret.append(",");
+ ret.append(tokenhood);
+ ret.append(",");
+ ret.append(path);
+ ret.append(")");
+ return ret.toString();
+ }
+}
\ No newline at end of file
prln("End testPredicationOnAB");
}
+
+
private void getCtrsFlags(Marina marina) {
prln("begin getCtrsFlags");
adjustIndent(2);
for(int i=0; i<data.getNumBits(); i++) data.set(i, false);
for(int i=0; i<addr.getNumBits(); i++) addr.set(i, false);
addr.set(0, c_state);
- marina.fillNorthProperStopper(data, false, addr);
+ marina.fillNorthProperStopper(new MarinaPacket(data, false, addr));
marina.instrIn.fill(RECV_DATA);
Instruction.Set.FlagFunction func = zero;
BitVector addr = new BitVector(14, "empty");
for(int i=0; i<data.getNumBits(); i++) data.set(i, false);
for(int i=0; i<addr.getNumBits(); i++) addr.set(i, false);
- marina.fillNorthProperStopper(data, false, addr);
+ marina.fillNorthProperStopper(new MarinaPacket(data, false, addr));
prln("checking to see if A flag got set");
fatal(!marina.getFlagA(), "bad A flag: "+marina.getFlagA());
addr.set(whichbit, c_flag);
prln("... and filling north fifo proper stopper");
- marina.fillNorthProperStopper(data, false, addr);
+ marina.fillNorthProperStopper(new MarinaPacket(data, false, addr));
prln("clearing flags");
marina.instrIn.fill(new Instruction.Set(DOCK,false,Predicate.IgnoreOLC, CLEAR_FLAG, CLEAR_FLAG));