首页 > 编程知识 正文

我身边的小事,异步fifo跨时钟域处理

时间:2023-05-06 11:46:45 阅读:60280 作者:697

前言【异步FIFO琐事2】异步FIFO中异步遍历延迟约束的几点思考

上一篇博客主要讨论的是不需要异步数据总线之间的路径延迟限制,但本文继续讨论以下问题: 线程延迟太大,影响性能。 为了避免异步fifo本身引起的数据反压断路,应该使用多深的fifo呢? 特别是在慢时钟从异步跨越到快时钟的情况下如何?

FIFO深度计算假设数据从慢时钟跨越到快时钟。 写入后,wr_ptr向本地端拍打1拍,向异步侧拍打3拍读取侧,相反侧识别后读取数据,读取指针向本地端拍打1拍,向异步侧拍打3拍,向写入侧读取了1个数据

(Twr Twr_sync 3Trd ) ) Trd Trd_sync Twr )如果这段时间太长,写入端的数据就会大量到来,必然导致fifo深度不够。 fifo填满书写方,慢命中加快,出现fifo将书写方推回去的奇怪场景。 因此,我们必须

FIFO_depth=(twr_sync3TRD ) TRD_synctwr ) )/Twr )4) twrTRD ) )/Twr其中,

Twr :写入时钟周期

Trd :读时钟周期

Twr_sync :写入指针的遍历延迟

Trd_sync :读指针的遍历延迟

OK,有了这个公式,在制定异步最小fifo深度规划时有一定的参考价值,同时也可以限制行驶延迟;

典型的应用场景很容易计算FIFO深度。 例如,现在1GHz从异步扩展到2GHz,下游的pcie几乎永远不会反向。 那么,有可能将前段模块反压吗?

可能。 例如,将FIFO深度设为4;

这个算起来,没有针的延迟也不行啊。

4(1) 0.5 )/1=6,因此必须施加逆压。 因此,必须仔细计算。 如果将指针的遍历延迟估计为慢70%的时钟延迟,则可以计算如下:

4(1) 0.5 )1*0.7*2)=6) 1.4=8因此,掌握复盖器的当前延迟情况,至少需要8深度的fifo;

走针延迟的计算相反,如果知道fifo的深度,也可以计算实际的走针延迟是多少。 一般来说,后端上升,可能会被70%的快表约束。 那样的话,跑pt可能会出现很多违规。 因此,可以计算实际的走针延迟是多少才没有问题。 如果1G仍然跨越2G,则fifo的深度设置为10个,可以计算如下:

因为twr _ sync TRD _ sync=(FIFO _ depth * twr )-4 ) twr TRD=10-6=4,所以两个指针异步跨越的时间总共不超过4ns,简单地说,单遍最大

继续查看上面的表达式,可以看到,如果前导时钟下降,则fifo可能存在深度不足的风险,或者指针走线延迟会更加紧张。 例如,1G跨越1.5G时:

由于指针twr _ sync TRD _ sync=(FIFO _ depth * twr )-4 ) twrTRD )=10 - 6.666=3.333的遍历延迟的裕量更小,因此FIFO在系统的本地

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。