赞
踩
本文记录在使用Xilinx FPGA时遇到的FIFO现象
同步fifo设置如下
因为project中使用了fifo的empty信号,但是发现empty在wr_en后3个时钟周期后才会拉低,在rd_en的下一周期直接拉高。所以在之后使用empty时,应注意此现象。
异步fifo位宽转换,如32bit -> 128bit。
若写入顺序为A,B,C,D。则读出数据为{A,B,C,D}。
异步fifo rst
异步fifo在使用 rst synchronization时,可能会出现full一直拉高状况。
建议wr rd rst 分开写较为保险。
异步fifo rst
在使用fifo时,不可利用其rst进行清空,
频繁会出现异常现象。使得empty信号拉低。
因此,清空应拉高rd_en,直至读空。
异步fifo rst
记录4出现异常现象原因已找到,因为进行复位操作的时候,读写时钟必须是有效的。不管什么原因,在复位操作的时刻,读写时钟如果丢失,必须在读写时钟有效的时刻再次进行复位操作。违反此操作将导致不可预期的行为发生。甚至,信号busy会被卡住,并可能需要重新配置FPGA。
在手册pg057-fifo-generator.pdf,Page127中有介绍:
原文链接:https://blog.csdn.net/sinat_31206523/article/details/109345496
https://blog.csdn.net/sinat_31206523/article/details/109345496?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.control
异步fifo rst
异步FIFO 使用rst同步功能后,输入rst必须维持3个时钟周期以上,否则FIFO会有一段时间异常,此时empty会拉低,valid拉高,将之前缓存的数据输出来。
手册原文如下,提到当wr_rst/rd_rst有一个拉高时,另一个也必须在一段时间内拉高。
所以不能仅拉高一侧,这样也会导致FIFO异常,输出之前缓存数据。
If one reset (wr_rst/rd_rst) is asserted, the other reset must also be applied. The time at which the resets are asserted/de-asserted may differ, and during this period the FIFO outputs become invalid. To avoid unexpected behavior, do not perform write or read operations from the assertion of the first reset to the de-assertion of the last reset.
xpm_fifo_async位宽转换
如128bit -> 32bit。
若写入顺序为{A,B,C,D},则读出数据为D,C,B,A。
与直接调用IP不同
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。