前言
【异步FIFO的一些小事·2】异步FIFO中异步走线延时约束的一些思考
上一篇博客中主要讨论的是不需要进行跨异步的数据总线路径延时的约束,这一篇继续探讨下一个问题:走线延时太大会影响性能,要用多深的fifo才能避免由异步fifo本身引起的数据反压断流呢,尤其在慢时钟跨异步到快时钟的场景下?

FIFO深度计算
想象一下,数据由慢时钟跨异步到快时钟,写入后wr_ptr在本端打了一拍,跨异步打了三拍到了读侧,对面识别到后读取数据,读指针在本端打了一拍,跨异步打了三拍到写侧,这样写侧才知道了有一个数据被读走了,这经历的时间是:
(Twr + Twr_sync + 3Trd) + (Trd + Trd_sync + Twr)
如果这个时间已经很长了,那么这过程中噌噌噌的来了很多写侧的数据,fifo深度必然就不够了,fifo被打满反压写侧,造成了慢打快竟然出现了fifo反压上游的奇怪场景,因此我们可以计算出此时fifo最小的深度,就是假设这段时间拍拍来写数据的极端场景:
FIFO_depth >= ((Twr + Twr_sync + 3Trd) + (Trd + Trd_sync + Twr))/T

本文探讨了异步FIFO中因指针走线延时导致的性能影响和数据反压问题。通过计算FIFO深度,例如在1GHz跨异步到2GHz的场景中,至少需要8深的fifo来避免反压。同时,文章指出如何根据已知FIFO深度计算指针走线延迟的最大值,以确保时序约束。降低读侧时钟可能导致fifo深度不足或指针走线延时更紧张,因此在设计时必须考虑这些因素。
订阅专栏 解锁全文
3721





