FPGA知识点---FIFO深度计算

本文解析了不同场景下FIFO最小深度的计算公式及实例,包括写时钟快于读时钟、存在空闲周期等复杂情况,适用于数字电路设计与信号处理领域的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单粗暴公式
写时钟频率 w_clk,
读时钟频率 r_clk,
写时钟周期里,每B个时钟周期会有A个数据写入FIFO
读时钟周期里,每Y个时钟周期会有X个数据读出FIFO
则,FIFO的最小深度是?
计算公式如下:
fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk

  1. 写时钟快于读时钟,写和读的过程中没有空闲周期,也即在突发(burst)过程中,读和写都在各自的时钟域内连续进行。
    在这里插入图片描述
    写时钟周期T_A = 1000/80 ns = 12.5ns;同理读时钟周期为20ns;
    突发写长度为120个数据,写120个数据耗时120*12.5 = 1500ns;
    1500ns时间内读出数据1500/20ns = 75个;
    故最小FIFO深度为120 - 75 = 45;
  2. 写时钟频率大于读时钟频率,但是读写的过程中存在空闲周期
    在这里插入图片描述
    写时钟周期T_A=12.5ns,读时钟周期T_B= 20ns
    两个写时钟写一个数据,也就是写一个数据需要时间2T_A=25ns,那么由于突发写数据为120个,写这么多数据需要时间12025ns=3000ns;
    4个读时钟周期读一个数据,因此读一个数据需要时间80ns,3000ns读了3000/80=37.5个数据,约等于37个数据;
    所以FIFO的最小深度为120-37=83;
  3. 写时钟慢于读时钟,且读写过程没有空闲周期
    在这里插入图片描述
    这种情况下永远不会发生数据丢失的情况,fifo深度为1。
  4. 写时钟频率小于读时钟频率,但是读写的过程中存在空闲周期
    在这里插入图片描述
    写时钟周期1000/30ns=100/3ns;
    读时钟周期20ns;
    写一个数据需要两个时钟,也就是200/3ns;
    读一个数据需要4个时钟,也就是80ns;
    写120个数据需要时间为8000ns,这段时间内读出数据8000/80=100个;
    因此FIFO最小深度为120-100=20
  5. 读写时钟速率相同,且无空闲时钟
    在这里插入图片描述
    如果读写时钟之间没有相位差,则不需要FIFO就可以进行读写;
    如果二者存在相位差,只需要FIFO深度为1即可
  6. 读写时钟频率一致,但在读写过程中存在空闲周期
    在这里插入图片描述
    两个时钟写入一个数据,需要40ns;
    4个时钟读出一个数据,需要80ns;
    由于突发长度为120,需要120*40=4800ns,这段时间读出数据个数4800/80=60;
    所以,FIFO最小深度为120-60=60
  7. 特定条件下,最坏情况分析FIFO最小深度
    在这里插入图片描述
    最坏情况下,写入和读取数据之间的数据速率差异最大,考虑背靠背方式,此时读写长度为160,所以100个时钟写入160个数据;
    由于读速度为10个周期读8个数据,因此一个数据需要8/10个时钟;
    所以100个时钟读了160*8/10=128个数据;
    所以FIFO最小深度160-128=32;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值