引入:
复习到FIFO的深度计算问题,看了很多网上给出的公式,根据原理总结出不需要记公式的方法。
首先给出一般步骤:
-
找到突发数据量,要么直接给出,要么按照时钟周期传输数据个数(这种考虑背靠背情况,突发数据量则为写入数据量的两倍);
-
计算数据写入FIFO需要的时间T=突发数据量/写时钟;
-
计算接收方接收的数据量=T*读时钟;
-
突发数据量-接收方在这一时间内能够接收的数据量即是FIFO需要缓存大小,即FIFO的深度;
-
看清题目中是给的位宽还是字节
如果还是不清晰,搭配例题详解。
类型一
已知突发数据量
例题:一个 8bit 宽的异步 FIFO,输入时钟为 100MHz,输出时钟为 95MHz,设一个数据包为 4Kbit,且两个数据包之间的发送间距足够大。问异步 FIFO 的深度至少为多少?
➢
解析
已知量:位宽8位,写时钟100M,读时钟95M,数据包4K(即发送一次突发数据量为4kbit)。
➢
解答:
1.
读写时钟不同,异步FIFO,读写数据位宽均为8bit。发送一次Burst突发数据量为4kbit,则发送Burst的时间T=4k/100M
2.
接收方接收的数据量为T*95M=4k*95/100 bit
3.
FIFO需要缓存的数据量 4k-接收方接收的数据量=4k-
4k*95/100
=200bit
4.
FIFO的深度>=FIFO需要缓存的数据量(bit)/位宽(8bit)=200/8=25
因此至少要大于等于25。
类型二 读时钟和写时钟内每x个时钟周期传输y个数据
例题:假设 FIFO 的写时钟为 100MHZ,读时钟为 80MHZ。在 FIFO 输入侧,每 100 个时钟,写入80 个数据;FIFO 读入测,每个时钟读取一个数据。设计合理的 FIFO 深度,使 FIFO 不会溢出。
➢
解析:
考虑背靠背的情况(即假设读时钟等于写时钟),此时写入的数据量(可以理解为突发数据量)则为写入数据量*2
➢
解答:
1.
突发数据量=写入数据量*2=80*2=160个数据;
2.
则写入突发数据需要的时间T=160/写时钟=160/100M;
3.
接收方接收的数据量为T*80M=
160*
80M
/100M;
4.
FIFO需要缓存的数据量 160-
T*80M
5.
这里数据量是按照字节传输的,因此结果即是FIFO的深度,即
160-T*80M=
32
FIFO的深度应大于等于32。
可以发现,这道例题读入测x个时钟传输y个数据其实并不关心,考虑背靠背时只关心写入侧,方法和总结的能对应。