fifo深度H的计算

21 篇文章 31 订阅
17 篇文章 16 订阅

介绍:
对于fifo来说,H的设置至关重要。既要保证功能性,不溢出丢数,也要保证性能流水。深度设置过小会影响功能,过大又浪费资源。因此,总结下fifo设计中深度H的计算。

一、同步sync fifo
1.1 流控反压后不溢出
假设数据一直发,下游一直读,读频率小于写频率时,fc(flow control)流控后,最坏的情况下,下游不读了。此时fifo反压信号拉高,上游写ready拉低,此时路上的数据需要能存入fifo,称之为过冲。过冲需要保证路上的数据被fifo完全吸收不溢出,因此fifo的深度H=过冲+上水位线TA。
1.2 不断流
对于同频同步fifo来说,只要深度大于1,只要保证上游每cycle都有wvalid,fifo读一定不会断流,可以实现流水。
当引入fc后,极端场景下,当达到反压水位线后,马上停止写入,有一拍的读出后,反压撤销。在读空fifo之前,必须有fifo的写入操作,以保证fifo不被读空,从而产生断流气泡。
假设每cycle都读,则在读完反压水位线深度数据时,第一笔写fifo命令产生。此时,
1)data产生到写入fifo路上时延N cycle;
2)fc发生后下一拍产生流控信号,data_gen停止产生data;
3)fc取消后,data_gen下两拍开始产生data;
4)此过程中每cycle都在读数据。
上述场景下,当发生流控时,过冲的数据个数是N+1,当取消流控时,产生数据的时延是N+2,因此fifo的深度H=N+1+N+2=2N+3。fifo深度只有大于这个数据才不会产生气泡断流。

二、异步async fifo
对于fc场景,异步fifo最大的问题是写读指针跨时钟域cdc同步中的时延。如果写指针同步到rclk为M个时延,读指针同步到wclk也为M个时延,则fifo深度H=2N+3+M+M=2N+2M+3。此处只是简单场景,真正计算深度时,还需考虑其它打拍,信号组合逻辑等产生的时延。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值