详细总结FIFO的深度计算问题

  • Post author:
  • Post category:其他


引入:

复习到FIFO的深度计算问题,看了很多网上给出的公式,根据原理总结出不需要记公式的方法。

首先给出一般步骤:



  1. 找到突发数据量,要么直接给出,要么按照时钟周期传输数据个数(这种考虑背靠背情况,突发数据量则为写入数据量的两倍);



  2. 计算数据写入FIFO需要的时间T=突发数据量/写时钟;



  3. 计算接收方接收的数据量=T*读时钟;



  4. 突发数据量-接收方在这一时间内能够接收的数据量即是FIFO需要缓存大小,即FIFO的深度;



  5. 看清题目中是给的位宽还是字节

如果还是不清晰,搭配例题详解。




类型一




已知突发数据量





例题:一个 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个数据其实并不关心,考虑背靠背时只关心写入侧,方法和总结的能对应。



版权声明:本文为qq_43409587原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。