同步FIFO
1, 空满状态的判断empty full
2, 读写指针的控制 rp wp
3, data_in data_out
难点在于空满状态的判断
//full state control
always@(posedge clk, negedge rst_n)
begin
if(!rst_n)
full_buf <= 1'b0;
else
begin
if((~rd && wr) && ((wp == rd - 1) || (rp == 4'h0 && wp == 4'hf)))
full_buf <= 1'b1;
else if(full_buf && rd)
full_buf <= 1'b0;
end
end
//empty state control
always@(posedge clk, negedge rst_n)
begin
if(!rst_n)
empty_buf <= 1'b1;
else
begin
if((rd && ~wr) && ((rp == wp - 1) || (rp == 4'hf && wp == 4'h0)))
empty_buf <= 1'b1;
else if(empty_buf && wr)
empty_buf <= 1'b0;
end
end