import SFIFOSupport::*; import RAM :: *; // For mkDummyRAM import ClientServer :: *; import GetPut :: *; import RegFile :: *; import FIFO :: *; module mkSFIFOTest(Empty); Reg#(Bool) b(); mkReg#(False) the_b(b); Reg#(Bit#(8)) r(); mkReg#(0) the_r(r); // RAM model with a delay of 3 clocks RAM#(Bit#(3),Bit#(4)) mem(); mkDummyRAM#(3, 3'd0, 3'd7) the_mem(mem); SFIFO#(Bit#(4)) f(); mkSFIFO#(mem, 3'd0, 3'd7) the_f(f); rule r1 (!b && !f.isFull); Bit#(4) val = truncate(r); $display("Enqueuing: %0d", val); f.enq(val); r <= r + 1; endrule rule r2 (!b && f.isFull); $display("FIFO is full"); b <= True; endrule rule r3 (b && !f.isEmpty); $display("Dequeuing: %0d", f.first()); f.deq(); endrule rule r4 (b && f.isEmpty); $display("Done"); $finish(0); endrule endmodule module mkDummyRAM#(Integer delay, adr lo, adr hi) (RAM#(adr,dta)) provisos(Bits#(adr,adr_sz), Bits#(dta,dta_sz), Bits#(RAMreq#(adr,dta),req_sz), Bits#(Maybe#(RAMreq#(adr,dta)),mreq_sz) ); RegFile#(adr,dta) arr(); mkRegFile#(lo, hi) the_arr(arr); Reg#(Maybe#(RAMreq#(adr,dta))) shift_regs[delay]; // shift_regs <- map(const(mkReg(Invalid)),upto(1,delay)) Integer i; for (i=0; i