--Description of FIFO queue chip designed by F. Baskett
--Specification by R.Burstall and N.Suzuki

guardianInit↑ onlywhen ~ReadRequest & ~WriteRequest,
ReadRequest↑ onlywhen DataAv,
WriteRequest↑ onlywhen SpaceAv;

dataflowDataAv <= delay(~ReadRequest) & rp<wp,
SpaceAv <= delay(~WriteRequest) & wp<wp+size,
A[wp] <= DataIn,
DataOut <= A[rp];

controlrepeat {
when Init rp := wp := 0;

on Init↑ exit in
par [ repeat {
when ReadRequest↑ skip;
when ReadRequest rp := rp+1}
//
repeat {
when WriteRequest↑ skip;
when WriteRequest wp := wp+1}
]
}