FPGA同步读写的FIFO,怎样快速计算FIFO深度?
FIFO深度计算的关键在于:
在规定时间内传输的数据等于接收的数据,写快读慢的情况下,突发burst写入的数据减去该burst时间内读出的数据,多余的数据需要能缓冲下来,让接收端在剩下空闲的时间能从容地把多余的数据读出来。
公式
fifo_depth = burst_length - burst_length * (r_clk/w_clk) * rd_rate
其中:
burst_length——最大突发写长度
w_clk——写时钟频率 ,
r_clk——读时钟频率 ,
rd_rate——读写速率
1.写时钟快于读时钟,写和读的过程中没有空闲周期,在burst时,读和写都在各自的时钟内连续进行;

图片所示为:
burst_length=120;w_clk=80MHz;r_clk=50MHz;
则:
总传输数据为 120
写入时间为 120/80MHz=1500ns
该时间段(1500ns)可以读出的数据为 1500ns50MHz =75
多余的数据为 120-75=45
所以:
FIFO深度为 fifo_depth = burst_length - burst_length * (r_clk/w_clk) =120-12050/80=45
2. 写时钟频率大于读时钟频率,但是读写的过程中存在空闲周期

图片所示为:
两个写时钟周期写一个数据
四个读时钟周期读一个数据
则:
写时钟等效频率为: fW=fA/2=40MHz
读时钟等效频率为: fR=fB/4=12.5MHz
所以:
最小深度为:120-120*(fR/fW)=120-120*12.5/40=82.5
3.写时钟慢于读时钟,且读写过程没有空闲周期
这种情况下永远不会发生数据丢失的情况,fifo深度为1。
4.写时钟频率小于读时钟频率,但是读写的过程中存在空闲周期
fA < fB with idle cycles in both write and read (duty cycles of wr_enb and rd_enb can also be given in these type of questions).
Writing frequency = fA = 30MHz.
Reading Frequency = fB = 50MHz.
Burst Length = No. of data items to be transferred = 120.
No. of idle cycles between two successive writes is = 1.
No. of idle cycles between two successive reads is = 3.
这个case看似是写慢读快,但是因为有idle周期的存在导致
写时钟的等效频率为fW=fA/2=15MHzfW=fA/2=15MHz
读时钟的等效频率为fR=fB/4=12.5MHzfR=fB/4=12.5MHz
最小深度为120−120/fW∗fR=20
5. 读写时钟速率相同,且无空闲时钟
如果读写时钟之间没有相位差,则不需要FIFO就可以进行读写;
如果二者存在相位差,只需要FIFO深度为1即可
6. 特定条件下,最坏情况分析FIFO最小深度
”背靠背“的情形下是FIFO读写的最坏情形,burst长度 B = 2*n
Writing Data = 80 DATA/100 Clock (Randomization of 20 Data’s)
Outgoing Data= 8 DATA/10 Clock.
Burst size = 160
“背靠背”情况,此时最恶劣的情况是第一次100个写周期内后80个周期连续写入80个数据和第二次100个写周期内前80个周期连续写入80个数据,如下图所示。故上述最恶劣情况下的连续写入160个数据后FIFO内缓存数据最多。计算此时写入数据-该阶段读出数据即为FIFO的最小深度。

最坏情况下,写入和读取数据之间的数据速率差异最大,考虑背靠背方式,此时读写长度为160,所以100个时钟写入160个数据;
由于读速度为10个周期读8个数据,因此一个数据需要8/10个时钟;
所以100个时钟读了160*8/10=128个数据;
所以FIFO最小深度160-128=32;
解析;
fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk
burst_length :突发数据个数
X,Y:读时钟周期里,每Y个时钟周期会有X个数据读出FIFO
r_clk:读时钟
w_clk:写时钟
同步FIFO,读写时钟相同,r_clk=w_clk;
fifo_depth = 160 - 160 *(8/10) * 1 = 160-128=32

被折叠的 条评论
为什么被折叠?



