注意:fifo最小深度计算,如果写入比读出快,默认写完突发长度后,间隔一定时间,读取未读取的数据。
FIFO最小深度计算最坏情况,就是使得写速率最大,读速率最小;通常是考虑猝发传输。
写时钟频率w_clk,
读时钟频率 r_clk,
写时钟周期里,每B个时钟周期会有A个数据写入FIFO
读时钟周期里,每Y个时钟周期会有X个数据读出FIFO
最坏的情况就是每个周期写入一个数据,这是写入最快的。
计算方法1
fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk
可转化为:
fifo_depth = burst_length - (burst_length /w_clk)/[(Y / r_clk)/X]
注:
(burst_length /w_clk):写入数据需要的时间
(Y / r_clk):Y个周期的时间
[(Y / r_clk)/X]:读1个数据需要的时间
(burst_length /w_clk)/[(Y / r_clk)/X]:全部写入时间内传输读出的个数
计算方法2
(转载于:[FIFO(四):异步FIFO的最小深度计算]
{FIFO深度/(写速率-读出速率)}> {写入数据量/写入速率}
适用于全速读写,就是连续进行读写操作
本质:
FIFO被填满的时间 > 数据包传送时间(猝发发送的时间)
例: A/D采样速率50Mhz,dsp读A/D的速率40Mhz,要不丢失地将将10万个采样数据送入DSP ,在A/D和DSP之间至少加多大容量的(深度)FIFO才行??