1、FIFO连续读写
f1>f2;写时钟f1=100MHz,读时钟f2=50MHz
突发长度为50;
写一个数据的时间为1/100M=10ns;
写完一个突发长度所需的时间为50*10=500ns;
读一个数据的时间为1/50M=20ns;
在500ns;总共有50个数据被写入FIFO中,但是读取一个时间需要20ns,在500ns,总共读出500/20=25个数据。剩下的数据没有读出50-25=25;所以所需FIFO最小深度为25个。
f1<f2,这种情况FIFO不会被写满。最小深度可置为1。
2、FIFO读写有空闲周期
f1>f2;写时钟f1=100MHz,读时钟f2=50MHz
突发长度为50;
两个连续写入之间的空闲周期为2;两个连续读之间空闲周期为3。
写入1个数据就需要等待2个时钟周期,所以写入一个数据需要3个时钟周期。
读出1个数据后需要等待3个时钟周期,所以读出一个数据需要4个时钟周期。
所以写入1个数据需要的时间为310=30ns。
写完一个突发所需要的时间为3050=1500ns。
读出1个数据的时间为4*20=80ns。
每1500ns就有50个数据被写入,而1500内能读出1500/80=18.75个数据;所以FIFO最小深度为50-18.75=32个。
3、背靠背,读写时钟相同
100个时钟写入50个数据,10个时钟读出8个数据。
突发长度为100。
这里考虑最坏的情况,就是在100时钟周期内,前面50个周期不写,然后后50个周期开始写入数据,再接着又立马写入50个。这就是背靠背写入数据。这是写入100个数据所需的周期就是50+50=100。
而在这100时钟周期内读出100*8/10=80。
则FIFO最小深度为100-80=20。
4、背靠背、读写时钟不相同
写时钟f1=100MHz,读时钟f2=50MHz
100个时钟写入50个数据,10个时钟读出8个数据。
背靠背:502=100。
写一个数据需要的时间1/100MHz=10ns。
写完需要10010=100ns。
读一个数据需要的时间1.25*(1/50M)=25。
每1000ns就有100个数据被写入FIFO,读出一个数据25ns,1000ns读出1000/25=40。
所以FIFO最小深度为100-40=60。