FPGA学习——FIFO深度H的计算
2022-08-29
来源:FPGA设计论坛
介绍:
对于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。此处只是简单场景,真正计算深度时,还需考虑其它打拍,信号组合逻辑等产生的时延
更多信息可以来这里获取==>>电子技术应用-AET<<