FIFO深度的计算公式
参考 https://www.cnblogs.com/dxs959229640/p/8144656.html
求FIFO的最小深度主要有以下要点:
那么:
- 首先必须满足\((1/fwr)*(m/n) ≥ (1/frd)*(x/y)\)
- ”背靠背“的情形下是FIFO读写的最坏情形,burst长度 \(B = 2*n\)
- 写完burst长度数据最快所需时间 \(T = (1/fwr) * B\)
- 从FIFO中读出一个数据至少需要时间 \(t= (1/frd) * (x/y)\)
- 在T时间内能够读走的数据个数 = \(T/t = B * (frd/fwr) * (y/x)\)
- 在T时间内还没有读走的数据个数 = \(B - B * (frd/fwr) * (y/x)\)
- 因此FIFO的最小深度为 \(\color{red}{B - B * (frd/fwr) * (y/x)}\)
- 注意保留一些余量
假设:
写数据时钟频率fa=80MHz
读数据时钟频率fb=50MHz
在写时钟周期内,每100个周期就有40个数据写入FIFO
在读时钟周期内,每10个周期可以有8个数据读出FIFO
那么:
首先这里没有给出数据的突发长度,从假设中可以得出每100个周期就有40个数据写入FIFO,这里可能就有人会说突发长度就是40个数据,其实不是这样的,因为数据是随机写入FIFO的,我们需要考虑做坏的情形,即写速率最大的情形,只有如下图背靠背的情形才是写速率最高的情形,burst length为80
用公式计算最小深度为: \(80-80*50/80*(8/10)=40\)