// output /////////////////////////////////////////////////////////////////// #expect 14 #expect 13 #expect 12 #expect 11 // program ////////////////////////////////////////////////////////////////// #ship debug : Debug #ship dscratch : Dscratch #ship fifo : Fifo // dumb configurations debug.in: [*] take, deliver; dscratch.inWriteAddr: [*] take, deliver; dscratch.inWriteData: [*] take, deliver; dscratch.inReadAddr: [*] take, deliver; fifo.in: [*] take, deliver; // addresses and values to initialize the dscratch with 1: sendto dscratch.inWriteAddr; 2: sendto dscratch.inWriteAddr; 3: sendto dscratch.inWriteAddr; 4: sendto dscratch.inWriteAddr; 11: sendto dscratch.inWriteData; 12: sendto dscratch.inWriteData; 13: sendto dscratch.inWriteData; 14: sendto dscratch.inWriteData; // send write-completion tokens to the fifo output dscratch.outWriteDone: [*] take, sendto fifo.out; // when the write-completion tokens accumulate, unleash // the read addresses fifo.out: [4] wait; [4] take, sendto dscratch.inReadAddr; // read addresses 4: sendto fifo.in; 3: sendto fifo.in; 2: sendto fifo.in; 1: sendto fifo.in; // data read from dscratch goes to the debug ship dscratch.outReadData: [*] take, sendto debug.in;