前言
【异步FIFO的一些小事·2】异步FIFO中异步走线延时约束的一些思考
上一篇博客中主要讨论的是不需要进行跨异步的数据总线路径延时的约束,这一篇继续探讨下一个问题:走线延时太大会影响性能,要用多深的fifo才能避免由异步fifo本身引起的数据反压断流呢,尤其在慢时钟跨异步到快时钟的场景下?
FIFO深度计算
想象一下,数据由慢时钟跨异步到快时钟,写入后wr_ptr在本端打了一拍,跨异步打了三拍到了读侧,对面识别到后读取数据,读指针在本端打了一拍,跨异步打了三拍到写侧,这样写侧才知道了有一个数据被读走了,这经历的时间是:
(Twr + Twr_sync + 3Trd) + (Trd + Trd_sync + Twr)
如果这个时间已经很长了,那么这过程中噌噌噌的来了很多写侧的数据,fifo深度必然就不够了,fifo被打满反压写侧,造成了慢打快竟然出现了fifo反压上游的奇怪场景,因此我们可以计算出此时fifo最小的深度,就是假设这段时间拍拍来写数据的极端场景: