首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

FIFO读写控制

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。
返回列表