Try testing OLC
authorrkao <rkao>
Tue, 4 Nov 2008 16:55:45 +0000 (16:55 +0000)
committerrkao <rkao>
Tue, 4 Nov 2008 16:55:45 +0000 (16:55 +0000)
testCode/com/sun/vlsi/chips/marina/test/Counter.java
testCode/com/sun/vlsi/chips/marina/test/InstructionStopper.java
testCode/com/sun/vlsi/chips/marina/test/IsolatedInDock.java
testCode/com/sun/vlsi/chips/marina/test/MarinaTest.java
testCode/sml2008-am01.pdf [new file with mode: 0644]

index 96e2f1f..ebba300 100644 (file)
@@ -1,5 +1,4 @@
 package com.sun.vlsi.chips.marina.test;
-import com.sun.async.test.BitVector;
 import com.sun.async.test.ChainControl;
 
 
index 4d714a0..5353dc7 100644 (file)
@@ -51,4 +51,10 @@ public class InstructionStopper extends ProperStopper {
        public String formatDataTokAddr(BitVector dta) {
                return formatDecodedInstr(dta);
        }
+       /** Take the Berkeley BitVector */
+       public void fill(edu.berkeley.fleet.api.BitVector instr) {
+        BitVector bitVector = new BitVector(INSTR_SZ, "instr");
+        for(int i=0; i<INSTR_SZ; i++) bitVector.set(i, instr.get(i));
+        fill(bitVector);
+       }
 }
index d6acf91..056498d 100644 (file)
@@ -1,6 +1,5 @@
 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;
@@ -22,7 +21,8 @@ public class IsolatedInDock implements Design {
        // 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) {
index e3daeef..a5dac30 100644 (file)
@@ -1,12 +1,8 @@
 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;
@@ -26,12 +22,19 @@ import com.sun.vlsi.chips.marina.test.MarinaUtils.CmdArgs;
 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
@@ -337,8 +340,8 @@ public class MarinaTest {
        
        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++) {
@@ -355,10 +358,8 @@ public class MarinaTest {
        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 */
@@ -371,13 +372,11 @@ public class MarinaTest {
                                  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! */
 
@@ -400,6 +399,20 @@ public class MarinaTest {
        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);
@@ -410,6 +423,7 @@ public class MarinaTest {
                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;
diff --git a/testCode/sml2008-am01.pdf b/testCode/sml2008-am01.pdf
new file mode 100644 (file)
index 0000000..e16c0fc
Binary files /dev/null and b/testCode/sml2008-am01.pdf differ