FIFO控制程序

FIFO读写控制

FIFO控制程序_第1张图片

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)
);

需要注意的是:

FIFO控制程序_第2张图片

                       图1

FIFO控制程序_第3张图片

                   图2

FIFO控制程序_第4张图片

                  图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。

你可能感兴趣的:(FPGA)