FIFO控制程序
FIFO读写控制
wire [8:0] rd_data_count;
reg fifo_rd_en = 0;
reg [8:0] FIFO_CNT = 0;
always @(posedge clk_61p44m)
begin
if(FIFO_CNT==255)
begin
fifo_rd_en <= 1'b0;
FIFO_CNT <= 0;
end
else if(fifo_rd_en)
FIFO_CNT <= FIFO_CNT + 1;
else if(rd_data_count > 255)
fifo_rd_en <= 1'b1;
end
wire [8:0] wr_data_count;
fifo fifo_inst(
.rst(locked),
.wr_clk(clk_51p2m),
.rd_clk(clk_61p44m),
.din(data),
.wr_en(data_en),
.rd_en(fifo_rd_en),
.dout(),
.full(),
.empty(),
.rd_data_count(rd_data_count),
.wr_data_count(wr_data_count)
);
需要注意的是:
图1
图2
图3
配置图1所示的FIFO,当需要通过Read Data Count来控制FIFO读出使能时,需要注
意Read Data Count的位宽需要与图2中的Write Depth保持一致,否则读使能会出错。
比如上次我在使用FIFO时,一次写入512个数,当时我把Depth设置为1024,但是Read Data Count
位宽设置的是9,结果输出的rd_data_count直到127,后来分析原因是这样的。事实上rd_data_count是
到1024的,由于我把位宽设置成了9位,低位被截取了,当rd_data_count自增到255时,rd_data_count
按照10位位宽显示时为00_1111_1111,现在低位被截取了变成了00_1111_111级127。