使用FIFO时出现的问题小记【vivado】
·
博主在使用FIFO处理跨时钟域问题时,出现以下问题·:

理论情况下,在fifo_ren拉高一个周期后,在A时就可以从FIFO中读出数据,但是实际情况是在C时才读出有效数据,抓取数据发现,是因为在B时写入FIFO的数据才生效。真的是令人匪夷所思的一个问题,不过进入FIFO和从FIFO中出来的数据无外乎那么几个,既然读写使能,读写数据,读写时钟没有问题,那可能的问题就在fifo_rst复位使能上了。
想要判断fifo读数据出现问题是否是因为fifo_rst复位使能导致的(未完成复位就进行了数据的写入或者读取),可以在配置FIFO IP时,进行以下配置:
勾选后,例化函数会多两个信号:
wr_rst_busy和rd_rst_busy这两个信号是判断读写复位是否繁忙的标志,只有在这两个信号都拉低时,才说明复位完成,这时候去进行读写操作才不会出现问题。
综上所述,解决方法如下:
1.在fifo_rst复位后,延迟多几个周期直到wr_rst_busy以及rd_rst_busy都拉低后才进行读写操作;
2.在读写完成后再进行fifo_rst的复位操作(适用于与下一包数据间隔比较长的情况)。
更多推荐



所有评论(0)