Professional Documents
Culture Documents
//data write
always @(posedge wclk or negedge wrst_n)
if (!wrst_n) wptr <= 0;
else if (winc && !wfull) begin
ex_mem[wptr[ASIZE-1:0]] <= wdata;
wptr <= wptr+1;
end
//write pointer
always @(posedge wclk or negedge wrst_n)
if (!wrst_n) wrptr <= 0;
else wrptr <= rptr;
//read data
always @(posedge rclk or negedge rrst_n)
if (!rrst_n) rptr <= 0;
else if (rinc && !rempty) begin
rdata = ex_mem[rptr[ASIZE-1:0]];
rptr <= rptr+1;
end
//read pointer
always @(posedge rclk or negedge rrst_n)
if (!rrst_n) rwptr <= 0;
else rwptr <= wptr;
endmodule
//fifo testbench
wire rempty,wfull;
wire [31:0] rdata;
integer i;
fifo5 fifo5(.rdata(rdata),.rempty(rempty),.wfull(wfull),.wdata(wdata),
.winc(winc),.wclk(wclk),.wrst_n(wrst_n),
.rinc(rinc),.rclk(rclk),.rrst_n(rrst_n));
//Burst Data
initial fork
wdata=32'h00000001;
for(i=0;i<65;i=i+1)
#1.5 wdata=wdata+32'h00000001;
#47 winc=1'b0;
#20 rinc=1'b1;
#48 winc=1'b1;
#52 rinc=1'b0;
join
endmodule
FIFO full test