异步FIFO读数据问题
异步fifo是直接调用内置单元还是你自己设计的?应该是异步fifo控制出现问题了。
你好,我是使用的IP核。控制的话我是通过控制写使能来写数据进去,写的很慢。读使能一直有效,所以基本上是写一个进去马上就被读出来了。但是偶尔会出现读出数据的部分位与写入的不一致的情况。
读使能需要根据FIFO的空满决定把
意思是,不可以一直拉高?所以数据出来不正确是因为读使能一直拉高导致的么
读使能怎么能一直拉高呢!只有非空才能都,否则出现读溢出。好好网上找几篇异步FIFO的文章读一读。
你想想万一写没有读快呢,而且DRAM这种是BURST读写,还中间有刷新周期,如果总体上读写速度一样,也不能保证在某小段写速度大于读速度。保险的读肯定要判断空满。你提供的信息暂时判断是这个原因。当然如果你的写速度远远大于读速度也有可能是别的原因
fifo标记位有empty和full,也可选择almost empty和almost full,满了不写,空了不读,这是fifo最基本的操作,异步fifo对于读写速度不一致的情况要尤为考虑,到底fifo中数据写入多少以后读最合适需要具体考虑。
检查下地址线上是否有毛刺吧。如果不是DRAM坏了这种问题八成是glitch。
如果你是用的IP,看看spec是否有关于读写同时拉高时优先级的说明。如果没有就说明这个IP做的太挫了。
你确定了写入的数据是没有错误的, 那么问题就是出现在读的端口, 你可以看看你读的指针是否有错误, 你考虑把读的地址用格雷码来写, 看是否有帮助
先搞清楚异步fifo的工作原理,什么时候能读什么时候不能读。注意FIFO读写指针的位置。先确定fifo操作是正确的。
麻烦贴个图出来定位问题
读信号不能一直有效,你说你写的很慢,那么读信号一直有效的话就会将其读空,这样再读的话就会出现数据错误的现象!
