add MarinaPacket class and use it
authorAdam Megacz <adam.megacz@sun.com>
Sun, 23 Nov 2008 22:44:19 +0000 (22:44 +0000)
committerAdam Megacz <adam.megacz@sun.com>
Sun, 23 Nov 2008 22:44:19 +0000 (22:44 +0000)
testCode/com/sun/vlsi/chips/marina/test/Marina.java
testCode/com/sun/vlsi/chips/marina/test/MarinaPacket.java [new file with mode: 0644]
testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java

index 3de790a..b23f00a 100644 (file)
@@ -192,13 +192,8 @@ public class Marina {
        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. */
diff --git a/testCode/com/sun/vlsi/chips/marina/test/MarinaPacket.java b/testCode/com/sun/vlsi/chips/marina/test/MarinaPacket.java
new file mode 100644 (file)
index 0000000..e8bfd07
--- /dev/null
@@ -0,0 +1,53 @@
+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
index f8fd31e..09036e9 100644 (file)
@@ -594,6 +594,8 @@ public class MarinaTest {
        prln("End testPredicationOnAB");
     }
 
+
+
     private void getCtrsFlags(Marina marina) {
        prln("begin getCtrsFlags");
        adjustIndent(2);
@@ -1164,7 +1166,7 @@ public class MarinaTest {
                                     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;
@@ -1220,7 +1222,7 @@ public class MarinaTest {
         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());
@@ -1359,7 +1361,7 @@ public class MarinaTest {
                 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));