From cf947ee9696dfd82b678dffa99997ab94407612c Mon Sep 17 00:00:00 2001 From: adam Date: Mon, 3 Nov 2008 14:31:55 +0100 Subject: [PATCH] add write capability to Process.MemoryModule --- src/edu/berkeley/fleet/ir/Process.java | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/edu/berkeley/fleet/ir/Process.java b/src/edu/berkeley/fleet/ir/Process.java index 7527121..4938b43 100644 --- a/src/edu/berkeley/fleet/ir/Process.java +++ b/src/edu/berkeley/fleet/ir/Process.java @@ -127,7 +127,10 @@ public class Process { } public void recvToken(Context.LoopFactory lf) { lf.recvToken(); } public void sendWord(Context.LoopFactory lf) { lf.sendWord(dock.getDataDestination()); } - public void build(Context ctx) { build(ctx, ctx.new LoopFactory(dock, 1)); } + public void build(Context ctx) { + if (peer==null && pattern.length==1 && pattern[0]==null) return; + build(ctx, ctx.new LoopFactory(dock, 1)); + } // number-in-flight is considered a property of the input dock in a pair //public int getInflight() { return 4; } public int getInflight() { return 1; } @@ -136,6 +139,7 @@ public class Process { if (dock.getShip().getType().equals("Debug")) { return; } + if (peer==null && pattern.length==1 && pattern[0]==null) return; switch(phase) { case 0: { torpedoes.add(dock); @@ -164,6 +168,7 @@ public class Process { } } protected void build(Context ctx, Context.LoopFactory lf) { + if (peer==null && pattern.length==1 && pattern[0]==null) return; int inflight = (count != 0 && count < getInflight()) ? count : getInflight(); if (peer!=null) @@ -375,12 +380,14 @@ public class Process { public final Ship ship; public final InPort inAddrRead1; public final InPort inAddrRead2; - //public final InPort inAddrWrite; - //public final InPort inDataWrite; + public final InPort inAddrWrite; + public final InPort inDataWrite; public final OutPort outRead1; public final OutPort outRead2; public MemoryModule(Ship memoryShip) { this.ship = memoryShip; + this.inAddrWrite = new DockInPort("inAddrWrite", ship.getDock("inAddrWrite")); + this.inDataWrite = new DockInPort("inDataWrite", ship.getDock("inDataWrite")); this.inAddrRead1 = new InPort("inAddrRead1") { public void recvToken(Context.LoopFactory lf) { lf.recvToken(); } public void sendWord(Context.LoopFactory lf) { lf.sendWord(ship.getDock("inAddrRead").getDataDestination(), new BitVector(1).set(0)); } @@ -436,15 +443,19 @@ public class Process { lf = ctx.new LoopFactory(ship.getDock("out"), 0); lf.abortLoopIfTorpedoPresent(); lf.collectWord(); + lf.setFlags(FlagFunction.ZERO, FlagFunction.ZERO.add(FlagC)); + lf.setPredicate(Predicate.FlagB); + // here: any code to be executed when inDataWrite gets completed + lf.setPredicate(Predicate.NotFlagB); lf.abortLoopIfTorpedoPresent(); lf.recvToken(); - lf.setFlags(FlagFunction.ZERO.add(FlagC), FlagFunction.ZERO); + lf.setFlags(FlagFunction.ZERO.add(NotFlagC).add(FlagB), FlagFunction.ZERO.add(FlagC).add(FlagB)); if (outRead1.peer != null) { - lf.setPredicate(Predicate.NotFlagA); + lf.setPredicate(Predicate.NotFlagB); outRead1.peer.sendWord(lf); } if (outRead2.peer != null) { - lf.setPredicate(Predicate.FlagA); + lf.setPredicate(Predicate.NotFlagA); outRead2.peer.sendWord(lf); } lf.setPredicate(null); -- 1.7.10.4