huiyanhuishi 发表于 2011-10-19 10:20:40

Xilinx FIFO IP 问题,full 和 almost_full及写入个数wr_data_count 对应问题。

刚学习XILINX FIFO ,调用FIFO IP,数据宽度位16位,数据深度为16(实际为15),只写FIFO,不读FIFO。配置full、almost_full、wr_data_count 作为输出。
仿真波形如下。为什么full为1时写入个数为14 ? full=1后,可以继续写一个数据?按照我的理解,当出现full为1时,写入的数据的个数应该是15才对啊,而且之后不允许在写入数据吧?

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

module FIFOT(
        ce,
        clk,
        full,
        almost_full,
        wr_data_count
    );
input ce;
input clk;
output full;
output almost_full;
output wr_data_count;
reg wr_en=0;

reg din;       
reg counter=1;
       
always @(posedge clk)begin
        if(ce==1)begin
                wr_en<=1;
                din<=counter;
        end
end

fifo fifo1(
.wr_clk(clk), // input wr_clk
.rd_clk(rd_clk), // input rd_clk
.din(din), // input din
.wr_en(wr_en), // input wr_en
.rd_en(), // input rd_en
.dout(), // output dout
.full(full), // output full
.almost_full(almost_full), // output almost_full
.empty(), // output empty
.almost_empty(), // output almost_empty
.rd_data_count(), // output rd_data_count
.wr_data_count(wr_data_count) // output wr_data_count
);

endmodule


http://cache.amobbs.com/bbs_upload782111/files_46/ourdev_686276J1V94Q.jpg
(原文件名:fifot.jpg)

仿真结果如上图。希望各位前辈不吝赐教,谢谢。

huiyanhuishi 发表于 2011-10-19 10:24:12

使用的环境为ISE 13.2。

huiyanhuishi 发表于 2011-10-19 10:34:53

在线等啊,各位前辈!!

huiyanhuishi 发表于 2011-10-19 11:47:07

问题在“太阳”前辈的指导下已经解决。问题的原因:实际操作时,需要有一个clk的时间来停止写入。解决方法,通过验证wr_code_count的数据或者full+1给出真正的写完成信号。再次感谢“太阳”前辈。

FLDG 发表于 2011-11-23 13:43:09

显然,你的解决方法是错的,不是FULL早出现了,而是wr_code_count的延迟在wr_clk时钟域中为一个时钟周期,在rd_clk时钟域中,也就是rd_code_count的延迟为3个时钟周期,官方文档上有详细描述,想再多了解一点可以去看看异步FIFO是怎么设计的,空满标志的产生等等。
页: [1]
查看完整版本: Xilinx FIFO IP 问题,full 和 almost_full及写入个数wr_data_count 对应问题。