简单粗暴公式:
写时钟频率 w_clk,
读时钟频率 r_clk,
写时钟周期里,每B个时钟周期会有A个数据写入FIFO
读时钟周期里,每Y个时钟周期会有X个数据读出FIFO
则,FIFO的最小深度是?
计算公式如下:
fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk
- 写时钟快于读时钟,写和读的过程中没有空闲周期,也即在突发(burst)过程中,读和写都在各自的时钟域内连续进行。
写时钟周期T_A = 1000/80 ns = 12.5ns;同理读时钟周期为20ns;
突发写长度为120个数据,写120个数据耗时120*12.5 = 1500ns;
1500ns时间内读出数据1500/20ns = 75个;
故最小FIFO深度为120 - 75 = 45; - 写时钟频率大于读时钟频率,但是读写的过程中存在空闲周期
写时钟周期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; - 写时钟慢于读时钟,且读写过程没有空闲周期
这种情况下永远不会发生数据丢失的情况,fifo深度为1。 - 写时钟频率小于读时钟频率,但是读写的过程中存在空闲周期
写时钟周期1000/30ns=100/3ns;
读时钟周期20ns;
写一个数据需要两个时钟,也就是200/3ns;
读一个数据需要4个时钟,也就是80ns;
写120个数据需要时间为8000ns,这段时间内读出数据8000/80=100个;
因此FIFO最小深度为120-100=20 - 读写时钟速率相同,且无空闲时钟
如果读写时钟之间没有相位差,则不需要FIFO就可以进行读写;
如果二者存在相位差,只需要FIFO深度为1即可 - 读写时钟频率一致,但在读写过程中存在空闲周期
两个时钟写入一个数据,需要40ns;
4个时钟读出一个数据,需要80ns;
由于突发长度为120,需要120*40=4800ns,这段时间读出数据个数4800/80=60;
所以,FIFO最小深度为120-60=60 - 特定条件下,最坏情况分析FIFO最小深度
最坏情况下,写入和读取数据之间的数据速率差异最大,考虑背靠背方式,此时读写长度为160,所以100个时钟写入160个数据;
由于读速度为10个周期读8个数据,因此一个数据需要8/10个时钟;
所以100个时钟读了160*8/10=128个数据;
所以FIFO最小深度160-128=32;