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)
仿真结果如上图。希望各位前辈不吝赐教,谢谢。 使用的环境为ISE 13.2。 在线等啊,各位前辈!! 问题在“太阳”前辈的指导下已经解决。问题的原因:实际操作时,需要有一个clk的时间来停止写入。解决方法,通过验证wr_code_count的数据或者full+1给出真正的写完成信号。再次感谢“太阳”前辈。 显然,你的解决方法是错的,不是FULL早出现了,而是wr_code_count的延迟在wr_clk时钟域中为一个时钟周期,在rd_clk时钟域中,也就是rd_code_count的延迟为3个时钟周期,官方文档上有详细描述,想再多了解一点可以去看看异步FIFO是怎么设计的,空满标志的产生等等。
页:
[1]