异步fifo最小深度计算

异步fifo的最小深度计算在FPGA相关岗位面试中经常出现

  1. 计算原理:

fifo的填满时间 >= fifo的写入时间

通俗来说就是,fifo的写入期间fifo都没有被填满的话,整个fifo就不会满,深度设计就满足要求。其中:

fifo的填满时间 = fifo深度 / 填充速度;

fifo的写入时间 = 写入数据量 / 写入速度;

这里只考虑写快读慢的场景:

填充速度 = 写时钟频率 - 读时钟频率;

写入速度 = 写时钟频率;

所以可以推导出:

fifo深度_min =写入数据量 / 写时钟频率 * (写时钟频率 - 读时钟频率);

  1. 问题扩展

再考虑更复杂场景,如果写入数据流在一定周期内不均匀(例如,每100个写时钟周期写80个数,那么就涉及到最恶劣的情况就是,两个100个时钟周期的80个数连在一起写入,也就是160个数据写入fifo),这时引入wr_burst(例中wr_burst =160);情况就可以扩展如下:

设写入时钟为wr_clk,每A个周期写B个数(实际在计算中没有使用AB两个变量,wr_burst代替),读出时钟为rd_clk,每C个时钟读D个数,最恶劣的情况就是连续写wr_burst个数,求fifo的最小深度,带入以上的公式可得:

fifo_depth_min = wr_burst / wr_clk * (wr_clk- 等效读时钟频率);

注意这里使用的是等效时钟频率,因为可能不是每个读时钟都读出数据:

等效读时钟频率 = rd_clk * D/ C;

带入公式可得:

fifo_depth_min= wr_burst / wr_clk * (wr_clk - rd_clk * D / C);

  1. 例子

写时钟100M,每100个写周期写80个数,读时钟80M,每个时钟周期都往外读数据,求异步fifo的最小深度。

带入以上公式可得fifo_depth_min = 160 / 100M *(100M - 80M * 1/1) =32;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值