一、同步FIFO写满后继续写会怎样?
module top(
input clk,
input rst_n
);
reg [7:0] data;
reg [3:0] state;
reg wr_en;
reg rd_en;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n) begin
state <= 4'd0;
data <= 8'd0;
wr_en <= 1'd0;
rd_en <= 1'd0;
end
else begin
case(state)
4'd0: begin
if(data == 8'd40) begin
state <= state + 4'd1;
wr_en <= 1'd0;
end
else begin
data <= data + 8'd1;
wr_en <= 1'd1;
end
end
4'd1: begin
rd_en <= 1'd1;
end
endcase
end
end
wire [7:0] fifo_dout;
wire full;
wire empty;
fifo fifo_inst(
.clk(clk),
.srst(!rst_n),
.din(data),
.wr_en(wr_en),
.rd_en(rd_en),
.dout(fifo_dout),
.full(full),
.empty(empty)
);
ila_0 ila_0_inst(
.clk(clk),
.probe0(wr_en),
.probe1(rd_en),
.probe2(data),
.probe3(full),
.probe4(empty),
.probe5(fifo_dout)
);
写满后full拉高,继续写对FIFO没有产生影响,FIFO深度为32,写入FIFO的值为1-40,读出FIFO的值为1-32,当FIFO为空的时候继续读,数据仍为32保持不变。
二、同步FIFO,写8位数据读4位数据
写入 01、02、03、04、05
读出来 0、1、0、2、0、3、0、4、0、5
三、同步FIFO,写16位数据读4位数据
写入 0123、1234、2345、3456、4567
读出来 0、1、2、3、1、2、3、4、2、3…
四、同步FIFO,写4位数据读8位数据
写入 1、2、3、4、5、6、7、8.。。。
读出来 12、34、56、78.。。。
五、同步FIFO,写4位数据读16位数据
写入 1、2、3、4、5、6、7、8.。。。
读出来 1234、5678.。。。
六、异步FIFO
FIFO深度16