}
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; }
if (dock.getShip().getType().equals("Debug")) {
return;
}
+ if (peer==null && pattern.length==1 && pattern[0]==null) return;
switch(phase) {
case 0: {
torpedoes.add(dock);
}
}
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)
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)); }
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);