prototype for new ship constants mechanism
authoradam <adam@megacz.com>
Tue, 10 Jul 2007 13:56:12 +0000 (14:56 +0100)
committeradam <adam@megacz.com>
Tue, 10 Jul 2007 13:56:12 +0000 (14:56 +0100)
ships/BitFifo.ship
src/edu/berkeley/fleet/doc/ShipDescription.java

index 61b6491..b64ddc5 100644 (file)
@@ -1,19 +1,16 @@
 ship: BitFifo
 
 == Ports ===========================================================
-data  in:   in
-
-data  in:   cmd.drop
-data  in:   cmd.dropInv
-data  in:   cmd.takeFillZeros
-data  in:   cmd.takeInvFillZeros
-data  in:   cmd.takeFillOnes
-data  in:   cmd.takeInvFillOnes
-data  in:   cmd.takeSignExtend
-data  in:   cmd.takeInvSignExtend
-
-data  out:  out
+in:   inEnqueue
+in:   inEnqueueOp
+  constant rev:      .......................1.............
+  constant inv:      ........................1............
+  constant count:    .........................nnnnnn......
+  constant offset:   ...............................nnnnnn
 
+out:  outDequeue
+in:   inDequeueOp
+  
 == Constants ========================================================
 
 == TeX ==============================================================
@@ -309,13 +306,13 @@ private static final int WORDSIZE = 37;
 private BitStorage bits = new BitStorage(MAXBITS);
 
 public void service() {
-  if (!box_out.readyForDataFromShip() && !box_in.dataReadyForShip()) return;
-  if (box_in.dataReadyForShip() && bits.hasSpace(WORDSIZE)) {
-    long data = box_in.removeDataForShip();
+  if (!box_outDequeue.readyForDataFromShip() && !box_inEnqueue.dataReadyForShip()) return;
+  if (box_inEnqueue.dataReadyForShip() && bits.hasSpace(WORDSIZE)) {
+    long data = box_inEnqueue.removeDataForShip();
     bits.add(data, WORDSIZE);
   }
-  if (selector == null && !box_cmd.dataReadyForShip()) return;
-  if (selector == null) selector = box_cmd.removePacketForShip();
+  if (selector == null && !box_inEnqueueOp.dataReadyForShip()) return;
+  if (selector == null) selector = box_inEnqueueOp.removePacketForShip();
 
   String port = selector.destination.getDestinationName();
   long val = selector.value; // check if <= 37?
@@ -328,14 +325,14 @@ public void service() {
   }
 
   if (port.startsWith("take")) {
-    if (!box_out.readyForDataFromShip()) return;
+    if (!box_outDequeue.readyForDataFromShip()) return;
     long data = bits.get((int) val);
     if (port.endsWith("FillOnes")) {
       data |= (-1L << val);
     } else if (port.endsWith("SignExtend")) {
       data = (data << (64 - val)) >> (64 - val);
     }
-    box_out.addDataFromShip(data);
+    box_outDequeue.addDataFromShip(data);
     selector = null;
     return;
   } else {
index facafce..238128a 100644 (file)
@@ -67,10 +67,15 @@ public class ShipDescription implements Iterable<BenkoBoxDescription> {
                 else if (key.equals("token out")) { tokenOnly = true;   inbox = false; }
                 else if (key.equals("data in"))   { tokenOnly = false;  inbox = true;  }
                 else if (key.equals("data out"))  { tokenOnly = false;  inbox = false; }
+                else if (key.equals("in"))        { tokenOnly = false;  inbox = true;  }
+                else if (key.equals("out"))       { tokenOnly = false;  inbox = false; }
+                else if (key.startsWith("constant")) {
+                    continue;
+                }
                 else throw new RuntimeException("unknown port type: \""+key+"\"");
 
-                String val = s.substring(s.indexOf(':')+1).trim();
                 BenkoBoxDescription p = null;
+                String val = s.substring(s.indexOf(':')+1).trim();
                 String boxname = val.indexOf('.') != -1 ? val.substring(0, val.indexOf('.')) : val;
                 String dest    = val.indexOf('.') != -1 ? val.substring(val.indexOf('.')+1)  : "";
                 for (BenkoBoxDescription b : benkoBoxes)