FIFO深度计算公式介绍和推导

FIFO深度计算:

上一篇文章讲到一个简单的FIFO计算公式,但是只适用于部分情况,下面深层次介绍一下FIFO计算的过程和网上流传的公式


提示:先将网上流传的两个公式搬出来:

F I F O _ D e p t h > = ( w r _ c l k − r d _ c l k ) ∗ B u r s t _ l e n g t h w r _ c l k FIFO\_Depth >= (wr\_clk - rd\_clk)*\frac{Burst\_length}{wr\_clk} FIFO_Depth>=wr_clkrd_clkwr_clkBurst_length

F I F O _ D e p t h > = B u r s t _ l e n g t h − B u r s t _ l e n g t h ∗ r d _ c l k w r _ c l k ∗ r d _ r a t e FIFO\_Depth >= Burst\_length - Burst\_length*\frac{rd\_clk}{ wr\_clk}*rd\_rate FIFO_Depth>=Burst_lengthBurst_lengthwr_clkrd_clkrd_rate
举例说明式子中需要注意的点:
写时钟频率w_ clk,读时钟频率r_ clk,写时钟周期里,每B个时钟周期会有A个数据写入FIFO读时钟周期里,每Y个时钟周期会有X个数据读出FIFO。

  • Burst_length :最大突发长度, 注意: 指在突发时间段, 写时钟 写入的数据长度
  • rd_rate:指一个周期读取的数据字节(byte),1字节 = 8 bit

公式1:

笔试题1:一个8bit宽的FIFO,输入时钟为100MHz,输出时钟为95MHz,设一个package为4Kbit, 且两个package之间的发送间距足够大。问FIFO的深度。

  1. 异步FIFO,读写频率不同,读写位宽相同。发送一次Burst突发数据量为4Kbit。 发送Burst的时间 T =4000/100MHz。
  2. 接收方接受的数据量 T*95MHz = 4000 * 95 / 100 bit
  3. FIFO需要缓存的数据量 4000 - 4000 * 95 / 100 = 200bit
  4. FIFO_Depth >= 200bit/8bit = 25。那么FIFO的深度至少要大于等于25才行。

公式2:

写时钟频率w_ clk,读时钟频率r_ clk,写时钟周期里,每B个时钟周期会有A个数据写入FIFO读时钟周期里,每Y个时钟周期会有X个数据读出FIFO。问FIFO的深度。
w r _ r a t e = w _ c l k wr\_rate = w\_clk wr_rate=w_clk

w r _ r a t e ′ = A B ∗ T = A B ∗ w _ c l k wr\_rate' = \frac{A}{B*T} = \frac{A}{B}*w\_clk wr_rate=BTA=BAw_clk

r d _ r a t e ′ = X Y ∗ T = X Y ∗ r _ c l k rd\_rate' = \frac{X}{Y*T} = \frac{X}{Y}*r\_clk rd_rate=YTX=YXr_clk
假设"背靠背”时发送的数据 = Burst_lengthL,那么”背靠背”的时间: t = B u r s t _ l e n g t h w _ c l k t = \frac{Burst\_length}{w\_clk} t=w_clkBurst_length 注意, 这段时间内是不是wr_rate’ (看突发长度的概念即可明白)

在这段时间内,接收方可以接受的数据 r d _ r a t e ′ ∗ t = X Y ∗ r _ c l k ∗ B u r s t _ l e n g t h w _ c l k rd\_rate'*t = \frac{X}{Y}*r\_clk * \frac{Burst\_length}{w\_clk} rd_ratet=YXr_clkw_clkBurst_length
缓存数据为 B u r s t _ l e n g t h − X Y ∗ r d _ c l k ∗ B u r s t _ l e n g t h w _ c l k Burst\_length -\frac{X}{Y}*rd\_clk * \frac{Burst\_length}{w\_clk} Burst_lengthYXrd_clkw_clkBurst_length
F I F O _ D e p t h > = B u r s t _ l e n g t h − X Y ∗ r _ c l k ∗ B u r s t _ l e n g t h w _ c l k FIFO\_Depth >= Burst\_length -\frac{X}{Y}*r\_clk * \frac{Burst\_length}{w\_clk} FIFO_Depth>=Burst_lengthYXr_clkw_clkBurst_length
F I F O _ D e p t h > = B u r s t _ l e n g t h − B u r s t _ l e n g t h ∗ r _ c l k w _ c l k ∗ X Y FIFO\_Depth >= Burst\_length -Burst\_length * \frac{r\_clk}{w\_clk}*\frac{X}{Y} FIFO_Depth>=Burst_lengthBurst_lengthw_clkr_clkYX


  • 1
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值