博主在使用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的复位操作(适用于与下一包数据间隔比较长的情况)。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐