4 (input clk, input reset, input clear,
5 input [WIDTH-1:0] datain,
8 output [WIDTH-1:0] dataout,
12 output reg [4:0] space,
13 output reg [4:0] occupied);
16 wire write = src_rdy_i & dst_rdy_o;
17 wire read = dst_rdy_i & src_rdy_o;
19 assign dst_rdy_o = ~full;
20 assign src_rdy_o = ~empty;
26 for (i=0;i<WIDTH;i=i+1)
29 srl16e(.Q(dataout[i]),
30 .A0(a[0]),.A1(a[1]),.A2(a[2]),.A3(a[3]),
31 .CE(write),.CLK(clk),.D(datain[i]));
48 else if(read & ~write)
56 else if(write & ~read)
65 // NOTE will fail if you write into a full fifo or read from an empty one
67 //////////////////////////////////////////////////////////////
68 // space and occupied are used for diagnostics, not
71 //assign space = full ? 0 : empty ? 16 : 15-a;
72 //assign occupied = empty ? 0 : full ? 16 : a+1;
79 else if(read & ~write)
81 else if(write & ~read)
89 else if(read & ~write)
90 occupied <= occupied - 1;
91 else if(write & ~read)
92 occupied <= occupied + 1;
94 endmodule // fifo_short