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 ==============================================================
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?
}
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 {
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)