cleanup of Marina test code
[fleet.git] / src / edu / berkeley / fleet / marina / MarinaTest.java
index 1d279aa..ae4c569 100644 (file)
@@ -4,7 +4,6 @@ import java.util.ArrayList;
 import java.util.List;
 
 import com.sun.electric.tool.simulation.test.*;
-import edu.berkeley.fleet.marina.Marina.Ilc;
 import edu.berkeley.fleet.marina.CmdArgs;
 import edu.berkeley.fleet.marina.CmdArgs.Mode;
 
@@ -563,7 +562,7 @@ public class MarinaTest {
         prln("Begin sendDataIlcInfinite");
         adjustIndent(2);
         
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,SetSource.Infinity),
                 SEND_DATA,
             });
@@ -606,7 +605,7 @@ public class MarinaTest {
                      "predicate olc"+(predicate_olc_nonzero?"!=0":"==0"));
                 adjustIndent(2);
 
-                marina.fillSouthProperStopper(new Instruction[] {
+                marina.southRing.fill(new Instruction[] {
                         setOlc(olc),
                         new Instruction.Move(dock,
                                              predicate_olc_nonzero  // predicate   
@@ -706,10 +705,9 @@ public class MarinaTest {
         adjustIndent(2);
         
         showOlc();
-        Ilc ilc = marina.getILC();
-        prln("ILC.done=="+ilc.getDone()+
-             " ILC.infinity=="+ilc.getInfinity()+
-             " ILC.count=="+ilc.getCount());
+        prln("ILC.done=="+marina.getILCDone()+
+             " ILC.infinity=="+marina.getILCInfinity()+
+             " ILC.count=="+marina.getILC());
         prln("flagA=="+marina.getFlagA());
         prln("flagB=="+marina.getFlagB());
         adjustIndent(-2);
@@ -718,10 +716,10 @@ public class MarinaTest {
 
     private void walkOneOLC(Marina marina) {
         prln("Begin walkOneOLC");
-        adjustIndent(2);
         /*
+        adjustIndent(2);
         //for (int i=-1; i<6; i++) {
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
 
         new Instruction.Head(dock),
 
@@ -739,7 +737,7 @@ public class MarinaTest {
                 
         new Instruction.Tail(dock),
         });
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
         null,
         },
         true);
@@ -761,7 +759,7 @@ public class MarinaTest {
                   System.out.println("master-clearing...");
                   // master clear on each iteration; otherwise we'd need to "run down" the olc
                   marina.masterClear();
-                  marina.enableInstructionSend(true);
+                  marina.southRing.enableInstructionSend(true);
                   }
 
                   expectTokensExactly(0);
@@ -792,15 +790,13 @@ public class MarinaTest {
             int inIlc = 1 << i;
             prln("inIlc="+inIlc);
             marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, inIlc));
-            Ilc ilc = marina.getILC();
-            int outIlc = ilc.getCount();
+            int outIlc = marina.getILC();
             fatal(outIlc!=inIlc, "bad ILC count: "+outIlc+" expected: "+inIlc);
-            fatal(ilc.getInfinity(), "bad Infinity bit: true");
+            fatal(marina.getILCInfinity(), "bad Infinity bit: true");
         }
         prln("Now test the infinity bit");
         marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, SetSource.Infinity));
-        Ilc ilc = marina.getILC();
-        fatal(!ilc.getInfinity(), "bad Infinity bit: false");
+        fatal(!marina.getILCInfinity(), "bad Infinity bit: false");
         adjustIndent(-2);
         prln("End walkOneILC");
     }
@@ -812,7 +808,7 @@ public class MarinaTest {
         marina.instrIn.fill(new 
                             Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, maxIlc));
 
-        int ilc = marina.getILC().getCount();
+        int ilc = marina.getILC();
         fatal(ilc!=maxIlc, "bad ILC count: "+ilc+" expected: "+maxIlc);
                 
         prln("execute a move instruction that does nothing except decrement the ILC to zero");
@@ -834,7 +830,7 @@ public class MarinaTest {
         //model.waitNS(10000);
 
         prln("Check that ILC==0");
-        ilc = marina.getILC().getCount();
+        ilc = marina.getILC();
         fatal(ilc!=0, "bad ILC count: "+ilc+" expected: "+0);
         
         adjustIndent(-2);
@@ -868,11 +864,11 @@ public class MarinaTest {
                 System.out.println("master-clearing...");
                 // master clear on each iteration; otherwise we'd need to "run down" the olc
                 marina.masterClear();
-                marina.enableInstructionSend(true);
+                marina.southRing.enableInstructionSend(true);
             }
 
             int inOlc = i;
-            marina.fillSouthProperStopper(new Instruction[] {
+            marina.southRing.fill(new Instruction[] {
 
                     setIlc(1),
 
@@ -889,7 +885,7 @@ public class MarinaTest {
                 });
 
             model.waitNS(128 * CYCLE_TIME_NS);
-            marina.fillNorthProperStopper();
+            marina.northRing.fill();
             model.waitNS(128 * CYCLE_TIME_NS);
 
             expectOlc(inOlc);
@@ -1115,40 +1111,40 @@ public class MarinaTest {
 
     private void testFlagDRecomputationTime(Marina marina) {
         marina.instrIn.fill(setIlc(1));
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 RECV_DATA,
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,0),
                 SEND_DATA_IF_D_NOT_SET
             });
-        marina.fillNorthProperStopper();
+        marina.northRing.fill();
         expectNorthFifoNoMoreThan(0);
 
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 RECV_DATA,
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,1),
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,SetSource.Decrement),
                 SEND_DATA_IF_D_NOT_SET
             });
-        marina.fillNorthProperStopper();
+        marina.northRing.fill();
         expectNorthFifoNoMoreThan(0);
 
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 RECV_DATA,
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,2),
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,SetSource.Decrement),
                 SEND_DATA_IF_D_NOT_SET
             });
-        marina.fillNorthProperStopper();
+        marina.northRing.fill();
         expectNorthFifoExactly(1);
         marina.instrIn.fill(DEC);
 
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 RECV_DATA,
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,0),
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,1),
                 SEND_DATA_IF_D_NOT_SET
             });
-        marina.fillNorthProperStopper();
+        marina.northRing.fill();
         expectNorthFifoExactly(1);
     }
 
@@ -1156,8 +1152,8 @@ public class MarinaTest {
         marina.instrIn.fill(setIlc(1));
         marina.instrIn.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 63));
         
-        marina.enableInstructionSend(false);
-        marina.enableInstructionRecirculate(true);
+        marina.southRing.enableInstructionSend(false);
+        marina.southRing.enableInstructionRecirculate(true);
         
         marina.instrIn.fill(TORPEDOABLE_RECV_DATA);
         marina.instrIn.fill(new Instruction.Head(dock));
@@ -1168,13 +1164,13 @@ public class MarinaTest {
         marina.instrIn.fill(new Instruction.Tail(dock));
         marina.instrIn.fillTorpedo();
         
-        marina.enableInstructionRecirculate(false);
-        marina.enableInstructionSend(true);
+        marina.southRing.enableInstructionRecirculate(false);
+        marina.southRing.enableInstructionSend(true);
         marina.instrIn.run();
         
         expectNorthFifoNoMoreThan(0);
         prln("inserting into north proper stopper");
-        marina.fillNorthProperStopper();
+        marina.northRing.fill();
         expectNorthFifoExactly(1);
         int nbToks = marina.getNumTokens();
         fatal(nbToks!=1, "Expected one token to emerge but got: "+nbToks+" tokens");
@@ -1204,7 +1200,7 @@ public class MarinaTest {
 
     private void testTailWithoutHead(Marina marina) {
         marina.instrIn.fill(setIlc(1));
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 63),
                 new Instruction.Tail(dock),
                 SEND_DATA,
@@ -1220,7 +1216,7 @@ public class MarinaTest {
         adjustIndent(2);
 
         marina.instrIn.fill(setIlc(1));
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 63),
                 new Instruction.Head(dock),
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1),
@@ -1237,7 +1233,7 @@ public class MarinaTest {
 
     private void testNonTorpedoableMoveDoesNotResetDFlag(Marina marina) {
         marina.instrIn.fill(setIlc(1));
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,63),
                 new Instruction.Move(dock,
                                      Predicate.IgnoreFlagD, // predicate   
@@ -1264,7 +1260,7 @@ public class MarinaTest {
             });
         marina.instrIn.fillTorpedo();
         expectNorthFifoExactly(1);
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 new Instruction.Move(dock,
                                      Predicate.Default,     // predicate   
                                      false,                 // torpedoable 
@@ -1283,7 +1279,7 @@ public class MarinaTest {
     private void testAbort(Marina marina) {
         
         marina.instrIn.fill(setIlc(1));
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.DataLatch,1),
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,2),
                 SEND_DATA_IF_D_NOT_SET,
@@ -1321,7 +1317,7 @@ public class MarinaTest {
 
     private void testAbortOutsideOfLoop(Marina marina) {
         marina.instrIn.fill(setIlc(1));
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 // ensure that an abort doesn't cause problems if no loop is in progress
                 new Instruction.Abort(dock, Predicate.IgnoreFlagD),
                 SEND_DATA,
@@ -1360,13 +1356,13 @@ public class MarinaTest {
                                                        b ? one : zero
                                                        );
                 if (fast) {
-                    marina.fillSouthProperStopper(new Instruction[] {
+                    marina.southRing.fill(new Instruction[] {
                             RECV_DATA,
                             inst,
                             NOP,
                         });
                     model.waitNS(64 * CYCLE_TIME_NS);
-                    marina.fillNorthProperStopper();
+                    marina.northRing.fill();
                 } else {
                     marina.instrIn.fill(inst);
                 }
@@ -1416,7 +1412,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(Marina.INDEX_OF_ADDRESS_BIT_COPIED_TO_C_FLAG_WHEN_DC_EQUALS_ONE, c_state);
-                                    marina.fillNorthProperStopper(new MarinaPacket(data, false, addr));
+                                    marina.northRing.fill(new MarinaPacket(data, false, addr));
                                     marina.instrIn.fill(RECV_DATA);
                                     
                                     Instruction.Set.FlagFunction func = zero;
@@ -1449,7 +1445,7 @@ public class MarinaTest {
         adjustIndent(2);
 
         marina.instrIn.fill(setIlc(1));
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 new Instruction.Set(dock,Predicate.IgnoreFlagD, CLEAR_FLAG, CLEAR_FLAG),
                 new Instruction.Move(dock,
                                      Predicate.IgnoreFlagD, // predicate   
@@ -1474,7 +1470,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(new MarinaPacket(data, false, addr));
+        marina.northRing.fill(new MarinaPacket(data, false, addr));
         model.waitNS(64 * CYCLE_TIME_NS);
 
         prln("checking to see if A flag got set");
@@ -1502,7 +1498,7 @@ public class MarinaTest {
             prln("testing with bit pattern " + data);
 
             prln("inserting data item into north fifo ring");
-            marina.fillNorthProperStopper(new MarinaPacket(data, false, addr));
+            marina.northRing.fill(new MarinaPacket(data, false, addr));
 
             prln("stopping the north proper stopper");
             marina.data.stop();
@@ -1550,9 +1546,9 @@ 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);
             data.set(bit, true);
-            marina.fillNorthProperStopper(new MarinaPacket(data, false, addr));
+            marina.northRing.fill(new MarinaPacket(data, false, addr));
 
-            marina.fillSouthProperStopper(new Instruction[] {
+            marina.southRing.fill(new Instruction[] {
                     RECV_DATA,
                     new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,SetSource.DataLatch),
                     new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.DataLatch,-1),
@@ -1565,7 +1561,7 @@ public class MarinaTest {
             if (marina.kesselsCounter) {
                 // master clear on each iteration; otherwise we'd need to "run down" the olc
                 marina.masterClear();
-                marina.enableInstructionSend(true);
+                marina.southRing.enableInstructionSend(true);
             }
         }
 
@@ -1587,16 +1583,16 @@ 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);
             data.set(bit, true);
-            marina.fillNorthProperStopper(new MarinaPacket(data, false, addr));
+            marina.northRing.fill(new MarinaPacket(data, false, addr));
 
-            marina.fillSouthProperStopper(new Instruction[] {
+            marina.southRing.fill(new Instruction[] {
                     new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1),
                     RECV_DATA,
                     new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,SetSource.DataLatch),
                 });
             model.waitNS(CYCLE_TIME_NS * 64);
 
-            int ilc = marina.getILC().getCount();
+            int ilc = marina.getILC();
             fatal(ilc != (1<<bit), "expected ilc to be " + (1<<bit) + ", but got " + ilc); 
         }
 
@@ -1609,7 +1605,7 @@ public class MarinaTest {
         adjustIndent(2);
 
         marina.instrIn.fill(setIlc(1));
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 SEND_TOKEN,
                 RECV_TOKEN,
                 SEND_DATA,
@@ -1627,7 +1623,7 @@ public class MarinaTest {
         marina.instrIn.fill(setIlc(1));
         for(long val : new long[] { (-1L << 14), -1, 0, 1 }) {
 
-            marina.fillSouthProperStopper(new Instruction[] {
+            marina.southRing.fill(new Instruction[] {
                     new Instruction.Set(dock,Predicate.IgnoreFlagD,
                                         Instruction.Set.SetDest.DataLatch,
                                         val),
@@ -1682,7 +1678,7 @@ public class MarinaTest {
             for(int i=0; i<19; i++)
                 dreg.set(i, immediate.get(i));
 
-            marina.fillSouthProperStopper(new Instruction[] {
+            marina.southRing.fill(new Instruction[] {
                     new Instruction.Shift(dock,Predicate.IgnoreFlagD,immediate),
                     SEND_DATA,
                 });
@@ -1731,12 +1727,12 @@ public class MarinaTest {
                 addr.set(whichbit, c_flag);
 
                 prln("... and filling north fifo proper stopper");
-                marina.fillNorthProperStopper(new MarinaPacket(data, false, addr));
+                marina.northRing.fill(new MarinaPacket(data, false, addr));
                 
                 prln("clearing flags");
                 prln("executing recv data with Dc="+dc);
                 prln("copying c-flag to a-flag");
-                marina.fillSouthProperStopper(new Instruction[] {
+                marina.southRing.fill(new Instruction[] {
                         new Instruction.Set(dock,Predicate.IgnoreFlagD, CLEAR_FLAG, CLEAR_FLAG),
                         new Instruction.Move(dock,
                                              Predicate.IgnoreFlagD,   /* predicate   */
@@ -1782,7 +1778,7 @@ public class MarinaTest {
 
         MarinaPath path = new MarinaPath((MarinaFleet)dock.getShip().getFleet(), bv);
 
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1),
                 new Instruction.Move(dock,
                                      Predicate.IgnoreFlagD, /* predicate   */
@@ -1845,7 +1841,7 @@ public class MarinaTest {
             BitVector packet_path = new BitVector(14, "inbound data item");
             for(int i=0; i<14; i++) packet_path.set(i, false);
 
-            marina.fillNorthProperStopper(new MarinaPacket(packet_data, false, packet_path));
+            marina.northRing.fill(new MarinaPacket(packet_data, false, packet_path));
                                            
             prln("recv path, send data (using recv'd path)");
             marina.instrIn.fill(new Instruction.Move(dock,
@@ -1878,7 +1874,7 @@ public class MarinaTest {
 
         for(int bit=0; bit<6; bit++) {
             int ilc = bit<0 ? 0 : (1<<bit);
-            marina.fillSouthProperStopper(new Instruction[] {
+            marina.southRing.fill(new Instruction[] {
                     new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,ilc),
                     SEND_DATA,
                 });
@@ -1892,7 +1888,7 @@ public class MarinaTest {
 
     private void testILCZero(Marina marina) {
         adjustIndent(2);
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,0),
                 SEND_DATA,
                 SEND_TOKEN,
@@ -1922,7 +1918,7 @@ public class MarinaTest {
 
         model.waitNS(128 * CYCLE_TIME_NS);
 
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, SetSource.Infinity),
                 new Instruction.Move(dock,
                                      Predicate.IgnoreFlagD, // predicate   
@@ -1987,7 +1983,7 @@ public class MarinaTest {
         marina.instrIn.fill(setIlc(1));
         for(boolean torpedoable : new boolean[] { true, false }) {
             
-            marina.fillSouthProperStopper(new Instruction[] {
+            marina.southRing.fill(new Instruction[] {
                     new Instruction.Move(dock,
                                          Predicate.IgnoreFlagD, // predicate   
                                          false,                 // torpedoable 
@@ -2027,7 +2023,7 @@ public class MarinaTest {
             dataItems = marina.data.drainMany(2);
             fatal(dataItems.size()!=expected, "Expected "+expected+" item to emerge but got: "+dataItems.size()+" data items");
 
-            fatal(!marina.getILC().getDone(), "Expected ilc=done, but got "+marina.getILC());
+            fatal(!marina.getILCDone(), "Expected ilc=done, but got "+marina.getILC());
         }
 
         adjustIndent(-2);
@@ -2035,7 +2031,7 @@ public class MarinaTest {
     }
 
     private void testDFlagWhenTorpedoLyingInWait(Marina marina) {
-        marina.fillSouthProperStopper(new Instruction[] {
+        marina.southRing.fill(new Instruction[] {
                 setOlc(1),
                 RECV_DATA,
                 TORPEDOABLE_RECV_DATA,
@@ -2048,7 +2044,7 @@ public class MarinaTest {
         expectTokensExactly(0);
 
         // changing the order of these lines should work, but it does not
-        marina.fillNorthProperStopper();
+        marina.northRing.fill();
         marina.instrIn.fillTorpedo();
 
         expectTokensExactly(1);
@@ -2057,7 +2053,7 @@ public class MarinaTest {
     private void testSetOlcFollowedByDPredicated(Marina marina) {
         for(boolean d_set : new boolean[] { false, true }) {
             prln("");
-            marina.fillSouthProperStopper(new Instruction[] {
+            marina.southRing.fill(new Instruction[] {
                     setOlc(0),
                     marina.kesselsCounter ? null : FLAG_NOP,
                     d_set ? SEND_DATA_IF_D_SET : SEND_DATA_IF_D_NOT_SET,
@@ -2065,7 +2061,7 @@ public class MarinaTest {
             expectNorthFifoExactly(d_set ? 1 : 0);
 
             prln("");
-            marina.fillSouthProperStopper(new Instruction[] {
+            marina.southRing.fill(new Instruction[] {
                     setOlc(32),
                     marina.kesselsCounter ? null : FLAG_NOP,
                     d_set ? SEND_DATA_IF_D_SET : SEND_DATA_IF_D_NOT_SET,
@@ -2074,7 +2070,7 @@ public class MarinaTest {
 
             if (marina.kesselsCounter) {
                 marina.masterClear();
-                marina.enableInstructionSend(true);
+                marina.southRing.enableInstructionSend(true);
             }
         }
     }
@@ -2100,7 +2096,7 @@ public class MarinaTest {
 
             prln("inserting set olc="+olc);
             prln("inserting set ilc=1");
-            marina.fillSouthProperStopper(new Instruction[] {
+            marina.southRing.fill(new Instruction[] {
                     new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter,1),
                     new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter,olc),
                 });
@@ -2129,7 +2125,7 @@ public class MarinaTest {
                                      false                  // tokenOut    
                                      );
 
-            marina.fillSouthProperStopper(instructions);
+            marina.southRing.fill(instructions);
             model.waitNS(64 * CYCLE_TIME_NS);
 
             int expected = decr_amount>=olc ? 0 : 1;
@@ -2140,7 +2136,7 @@ public class MarinaTest {
             if (marina.kesselsCounter) {
                 // master clear on each iteration; otherwise we'd need to "run down" the olc
                 marina.masterClear();
-                marina.enableInstructionSend(true);
+                marina.southRing.enableInstructionSend(true);
             }
         }
 
@@ -2158,7 +2154,7 @@ public class MarinaTest {
             int notZero = 1<<i;
 
             prln("Then immediately set ILC="+notZero);
-            marina.fillSouthProperStopper(new Instruction[] {
+            marina.southRing.fill(new Instruction[] {
                     new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 0),
                     new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, notZero),
                 });
@@ -2166,12 +2162,11 @@ public class MarinaTest {
             model.waitNS(64 * CYCLE_TIME_NS);
 
             prln("Verify ILC using scan chain");
-            Ilc ilc = marina.getILC();
-            int ilcCount = ilc.getCount();
+            int ilcCount = marina.getILC();
             fatal(ilcCount!=notZero, "bad ILC count: "+ilcCount+" expected: "+notZero);
-            fatal(ilc.getInfinity(), "bad ILC Infinity bit: true");
+            fatal(marina.getILCInfinity(), "bad ILC Infinity bit: true");
                    
-            marina.fillSouthProperStopper(new Instruction[] {     
+            marina.southRing.fill(new Instruction[] {     
                     new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, notZero),
                     new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.InnerLoopCounter, 0),
                 });
@@ -2179,10 +2174,9 @@ public class MarinaTest {
             model.waitNS(64 * CYCLE_TIME_NS);
                         
             prln("Verify ILC using scan chain");
-            ilc = marina.getILC();
-            ilcCount = ilc.getCount();
+            ilcCount = marina.getILC();
             fatal(ilcCount!=0, "bad ILC count: "+ilcCount+" expected: 0");
-            fatal(ilc.getInfinity(), "bad ILC Infinity bit: true");
+            fatal(marina.getILCInfinity(), "bad ILC Infinity bit: true");
         }
 
         adjustIndent(-2);
@@ -2202,13 +2196,13 @@ public class MarinaTest {
             if (marina.kesselsCounter) {
                 // master clear on each iteration; otherwise we'd need to "run down" the olc
                 marina.masterClear();
-                marina.enableInstructionSend(true);
+                marina.southRing.enableInstructionSend(true);
             }
 
             int outOlc;
             prln("Set OLC=0");
             prln("Then immediately set OLC="+notZero);
-            marina.fillSouthProperStopper(new Instruction[] {
+            marina.southRing.fill(new Instruction[] {
                     new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 0),
                     new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, notZero),
                 });
@@ -2220,7 +2214,7 @@ public class MarinaTest {
             if (!marina.kesselsCounter) {
                 prln("Set OLC="+notZero);
                 prln("Then immediately set OLC=0");
-                marina.fillSouthProperStopper(new Instruction[] {
+                marina.southRing.fill(new Instruction[] {
                         new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, notZero),
                         new Instruction.Set(dock,Predicate.IgnoreFlagD,SetDest.OuterLoopCounter, 0),
                     });
@@ -2238,8 +2232,8 @@ public class MarinaTest {
         prln("Begin testSouthRecirculate("+AMOUNT+")");
         adjustIndent(2);
 
-        marina.enableInstructionSend(false);
-        marina.enableInstructionRecirculate(true);
+        marina.southRing.enableInstructionSend(false);
+        marina.southRing.enableInstructionRecirculate(true);
         
         prln("Completely fill south ring");
         adjustIndent(2);
@@ -2303,6 +2297,7 @@ public class MarinaTest {
             System.out.println("******************************************************************************");
             System.out.println("******************************************************************************");
             fe.printStackTrace();
+            System.exit(-1);
         }
     }
 
@@ -2337,7 +2332,7 @@ public class MarinaTest {
 
         if (testNum!=0) {
             marina.masterClear();
-            marina.enableInstructionSend(true);
+            marina.southRing.enableInstructionSend(true);
         }
 
         MarinaUtils.testnum = testNum;
@@ -2494,14 +2489,14 @@ public class MarinaTest {
                 marina.data.sink();
                 marina.stopAndResetCounters();
                     
-                marina.enableInstructionSend(true);
-                marina.fillSouthProperStopper(new Instruction.Set(dock,Predicate.IgnoreFlagD,
+                marina.southRing.enableInstructionSend(true);
+                marina.southRing.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,
                                                                   Instruction.Set.FlagFunction.ZERO
                                                                   .add(Predicate.FlagA).add(Predicate.NotFlagA),
                                                                   Instruction.Set.FlagFunction.ZERO));
                 //int xx = 63;      // 1.802ms
                 //int xx = 1;         // 0.207ms  =>  24.3ns for 62 counts => 390ps cycle time => 2.5Ghz
-                marina.fillSouthProperStopper(new Instruction[] {
+                marina.southRing.fill(new Instruction[] {
                         new Instruction.Head(dock),
                         setOlc(xx),
                         FLAG_NOP,
@@ -2513,7 +2508,7 @@ public class MarinaTest {
                         new Instruction.Tail(dock),
                     }, false, false);
 
-                marina.fillSouthProperStopper(new Instruction[] {
+                marina.southRing.fill(new Instruction[] {
                         /*
                           new Instruction.Set(dock,Predicate.FlagD,
                           Instruction.Set.FlagFunction.ZERO.add(Predicate.NotFlagA),
@@ -2581,12 +2576,12 @@ public class MarinaTest {
                             marina.data.sink();
                             marina.stopAndResetCounters();
                                 
-                            marina.enableInstructionSend(true);
-                            marina.fillSouthProperStopper(setOlc(1));
-                            marina.fillSouthProperStopper(new Instruction.Head(dock));
+                            marina.southRing.enableInstructionSend(true);
+                            marina.southRing.fill(setOlc(1));
+                            marina.southRing.fill(new Instruction.Head(dock));
                             for(int i=0; i<toks; i++)
-                                marina.fillSouthProperStopper(/*SEND_DATA*/NOP);
-                            marina.fillSouthProperStopper(new Instruction[] {
+                                marina.southRing.fill(/*SEND_DATA*/NOP);
+                            marina.southRing.fill(new Instruction[] {
                                     new Instruction.Tail(dock),
                                 }, false, true);
                                 
@@ -2653,19 +2648,19 @@ public class MarinaTest {
                         marina.data.sink();
                         marina.stopAndResetCounters();
                             
-                        marina.enableInstructionSend(true);
-                        marina.fillSouthProperStopper(setOlc(1));
-                        marina.fillSouthProperStopper(new Instruction.Set(dock,Predicate.IgnoreFlagD,
+                        marina.southRing.enableInstructionSend(true);
+                        marina.southRing.fill(setOlc(1));
+                        marina.southRing.fill(new Instruction.Set(dock,Predicate.IgnoreFlagD,
                                                                           Instruction.Set.FlagFunction.ZERO,
                                                                           Instruction.Set.FlagFunction.ZERO));
-                        marina.fillSouthProperStopper(new Instruction.Head(dock));
-                        //marina.fillSouthProperStopper(setIlc(31));
-                        marina.fillSouthProperStopper(SEND_DATA);
+                        marina.southRing.fill(new Instruction.Head(dock));
+                        //marina.southRing.fill(setIlc(31));
+                        marina.southRing.fill(SEND_DATA);
                         for(int i=0; i<toks+1; i++) {
-                            //marina.fillSouthProperStopper(FLAG_NOP_IF_FLAG_A);
-                            marina.fillSouthProperStopper(FLAG_NOP);
+                            //marina.southRing.fill(FLAG_NOP_IF_FLAG_A);
+                            marina.southRing.fill(FLAG_NOP);
                         }
-                        marina.fillSouthProperStopper(new Instruction[] {
+                        marina.southRing.fill(new Instruction[] {
                                 new Instruction.Tail(dock),
                             }, false, true);
                         marina.startCounters();