From f4e0137ee07f866ab4457218558d2607cb59b430 Mon Sep 17 00:00:00 2001 From: adam Date: Tue, 10 Jul 2007 14:56:12 +0100 Subject: [PATCH] prototype for new ship constants mechanism --- ships/BitFifo.ship | 35 +++++++++++------------ src/edu/berkeley/fleet/doc/ShipDescription.java | 7 ++++- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/ships/BitFifo.ship b/ships/BitFifo.ship index 61b6491..b64ddc5 100644 --- a/ships/BitFifo.ship +++ b/ships/BitFifo.ship @@ -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 { diff --git a/src/edu/berkeley/fleet/doc/ShipDescription.java b/src/edu/berkeley/fleet/doc/ShipDescription.java index facafce..238128a 100644 --- a/src/edu/berkeley/fleet/doc/ShipDescription.java +++ b/src/edu/berkeley/fleet/doc/ShipDescription.java @@ -67,10 +67,15 @@ public class ShipDescription implements Iterable { 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) -- 1.7.10.4