首先我们通过一道面试题理解设计要点
面试题
问题:假设 FIFO 的写时钟为 100MHZ,读时钟为 80MHZ。在FIFO 输入侧,每 100 个时钟,写入 80 个数据;FIFO 读入测,每个时钟读取一个数据。
答案:设计合理的 FIFO 深度,使 FIFO 不会溢出
我们需要考虑数据轻载和重载的情况,对缓存能力要求最高的情况为背靠背传输,则 FIFO 深度为 160-(160/100)*80=32。
————————————————
这种情况需要考虑最差的情况,就是每100个写时钟,里面有20个时钟无数据写入,80个时钟写入FIFO,因此我们需要保证当200个写时钟的写数据情况为以下情况不会溢出:
极端情况:20个不写数据+80个数据写入+80个时钟写入+20个数据不写入,即连续数据长度为160,也就是burst_Length。
我们将问题一般化:
1) 写时钟频率 WCLK
2) 读时钟频率 RCLK
3) 写入测每 B 个时钟周期有 A 个数据写入
4) 读取测每 Y 个时钟周期有 X 个数据读出
5)在FIFO 输入侧,每 C个时钟,写入D 个数据
最终,FIFO深度设计公式为:
FIFO_Depth = burst_Length*(1- RCLK/WCLK * Y/X)
burst_Length = 2*C
这道题里:
FIFO_Depth = 2*80*(1- 80/100 * 1/1) = 32
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/asdhnkhn/article/details/133197419