-- MOSSIMCharFIFODriver.sak
-- last edited by Suzuki: 14-Dec-81 10:26:38
DIRECTORY
MOSSIMFIFO,
Connector,
Scheduler,
SimIO;
MOSSIMCharFIFODriver: MONITOR
IMPORTS
Connector, MOSSIMFIFO, Scheduler, SimIO = {
Reader: DEVICE = {
IN DataAv: BOOLEAN, DataOut: ARRAY [0..16) OF CHARACTER, Done: BOOLEAN
OUT ReadReq: BOOLEAN
GUARDIAN {}
CONTROL {
SimIO.WF0[" Reader started.*n"];
THROUGH [0..30) DO
Scheduler.Delay[20];
WHEN Done UP: ReadReq ← TRUE;
FOR i: NAT IN [0..16) DO
SimIO.WF1["%u", DataOut[i]];
ENDLOOP;
SimIO.WF0[" "];
Scheduler.Delay[10];
ReadReq ← FALSE;
ENDLOOP;
SimIO.WF0[" Reader terminated.*n"]}
};
Writer: DEVICE = {
IN SpaceAv, Done: BOOLEAN
OUT WriteReq: BOOLEAN, DataIn: CARDINAL
GUARDIAN {}
CONTROL {
i: CARDINAL;
SimIO.WF0[" Writer started.*n"];
FOR i IN [0..30) DO
Scheduler.Delay[20];
WHEN Done UP: {DataIn ← i; WriteReq ← TRUE};
SimIO.WF1["%u- ", i];
Scheduler.Delay[10];
WriteReq ← FALSE;
ENDLOOP;
SimIO.WF0[" Writer terminated.*n"]}
};
Start: DEVICE = {
IN
OUT Init, ReadReq, WriteReq: BOOLEAN
GUARDIAN {}
CONTROL {
ReadReq ← FALSE;
WriteReq ← FALSE;
Scheduler.Delay[10];
Init ← TRUE;
Scheduler.Delay[5];
Init ← FALSE}
};
SimIO.Start["FIFO.jam"];
CIRCUIT {
COMPONENTS fifo: MOSSIMFIFO.FIFOFunc[size: 100], reader: Reader, writer: Writer, start: Start
NODES init, write, read, in, space, data, out, done: NODE
REPRESENTATION
CONNECTIONS
fifo[Init: init, WriteRequest: write, ReadRequest: read,
DIn: in, SpaceAv: space, DataAv: data, DOut: out, Done: done],
reader[DataAv: data, DataOut: out, ReadReq: read, Done: done],
writer[SpaceAv: space, Done: done, WriteReq: write, DataIn: in],
start[Init: init, ReadReq: read, WriteReq: write]};
SimIO.Stop[];
}.