异步fifo的数据丢失问题
时间:10-02
整理:3721RD
点击:
之前使用fifo为的就是保持在两种不同的时钟下的数据传输。可是在实际应用中,发现有数据丢失的问题出现。
异步fifo是读写分开的,可是要是这边一直写,而读得周期很慢的话,由于双端口RAM只有那么大,那就会发生数据丢失问题。
例如:我在AD采样的速率是4Mhz, 然后数据经过 异步fifo ,传输到 TXD模块(TXD模块的波特率为9600)。这个时候除非我把异步fifo的RAM设置的很大,不然的话,由AD采样的数据送到TXD模块(发送模块),就会出现数据丢失。
想问一下,怎么解决这种数据丢失的问题呢?
异步fifo是读写分开的,可是要是这边一直写,而读得周期很慢的话,由于双端口RAM只有那么大,那就会发生数据丢失问题。
例如:我在AD采样的速率是4Mhz, 然后数据经过 异步fifo ,传输到 TXD模块(TXD模块的波特率为9600)。这个时候除非我把异步fifo的RAM设置的很大,不然的话,由AD采样的数据送到TXD模块(发送模块),就会出现数据丢失。
想问一下,怎么解决这种数据丢失的问题呢?
解决不了吧?丢数据是必然的。
无论FIFO多大,只要输入流量大于输出流量,必然丢失数据。
除非输出为输入的抽样(例如输入流量4MB,输出流量为9600bit/4MB抽样,则输出为9600baud)才行。
一个过程中,输入流量小于输出流量,才能不丢失数据。
那这样子 岂不是做不了高速的采样。只能做低速的?
那有没有其他办法可以解决两个不同时钟之间的数据传输问题?
这就是FIFO深度的计算了 快些慢读肯定会产生阻塞的
控制写使能啊,非满才写
读是非空就读
你这个,如果这个异步FIFO的输入与输出速率不等(时钟频率与进出FIFO的数据宽度)的话,你可以用的乒乓包级FIFO可以解决的
如果Input数据无法控制的话,只有通过提高你的内部数据能力了,具体到你的FIFO深度的问题要看处理能力和Input数据比值了。
平均输出速率赶不上赶不上输入速率就没有办法解决
在一个有限容量的水箱里
大水管往水箱抽水,小水管从水箱里放水,水迟早都会溢出
后级处理数据跟不上,肯定不是会反压的
输入带宽大于输出带宽肯定会溢出的
除非可以控制流量反压
是不是可以考虑,再做一次sample,多的数据就不要了
