public final InPort inDataWrite;
public final OutPort outRead1;
public final OutPort outRead2;
+ public final OutPort outWrite;
public MemoryModule(Ship memoryShip) {
this.ship = memoryShip;
this.inAddrWrite = new DockInPort("inAddrWrite", ship.getDock("inAddrWrite"));
public void build(Context ctx) { }
public void reset(Context ctx, int phase) { }
};
+ this.outWrite = new DockOutPort("out", ship.getDock("out")) {
+ protected void build(Context ctx, Context.LoopFactory lf) {
+ lf = lf.makeNext(0);
+ lf.abortLoopIfTorpedoPresent();
+ lf.collectWord();
+
+ lf.setFlags(FlagFunction.ZERO, FlagFunction.ZERO.add(FlagC));
+ if (this.peer != null) {
+ lf.setPredicate(Predicate.FlagB);
+ this.peer.recvToken(lf);
+ this.peer.sendWord(lf);
+ }
+
+ lf.setPredicate(Predicate.NotFlagB);
+ lf.abortLoopIfTorpedoPresent();
+ lf.recvToken();
+ lf.setFlags(FlagFunction.ZERO.add(NotFlagC).add(FlagB), FlagFunction.ZERO.add(FlagC).add(FlagB));
+ if (outRead1.peer != null) {
+ lf.setPredicate(Predicate.NotFlagB);
+ outRead1.peer.sendWord(lf);
+ }
+ if (outRead2.peer != null) {
+ lf.setPredicate(Predicate.NotFlagA);
+ outRead2.peer.sendWord(lf);
+ }
+ lf.setPredicate(null);
+ }
+ };
}
public void build(Context ctx) {
super.build(ctx);
lf.sendToken(ship.getDock("out").getDataDestination(), new BitVector(1).set(1));
lf.setPredicate(null);
lf.deliver();
-
- 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(NotFlagC).add(FlagB), FlagFunction.ZERO.add(FlagC).add(FlagB));
- if (outRead1.peer != null) {
- lf.setPredicate(Predicate.NotFlagB);
- outRead1.peer.sendWord(lf);
- }
- if (outRead2.peer != null) {
- lf.setPredicate(Predicate.NotFlagA);
- outRead2.peer.sendWord(lf);
- }
- lf.setPredicate(null);
}
}