fifo深度计算的意义

506 阅读3分钟

1 fifo深度计算

FIFO通常用于在两个时钟域间传输数据,并且通常情况下,写数据的速率是要比读数据的速率快的,因此,就存在FIFO最小深度的一个问题,以防止在数据传输时发生溢出,造成数据的丢失。

在计算FIFO最小深度时,我们一般考虑极端情况,即在一段时间内写速率达到最大,此时由于读数据慢于写数据,因此需要设置一个FIFO的最小深度,来保证数据不丢失。

我们需要的FIFO深度是因为读取速率慢于写入速率而未能读取的数据量。

fifo最小深度一般是用来计算一次突发传输FIFO的最小深度。

fifo最小深度保证fifo不会被写满,如果fifo写满会导致数据溢出,溢出的话。会造成数据丢失。

计算FIFO的最小深度是保证,极端情况下数据不发生溢出。 full和empty信号,也是很重要的。

如果写入数据完成,进行读出时游客有可能会造成读空,所以empty信号可以防止数据读空。

异步fifo 突发传输 --- 读写端口不同时的时候,针对读慢写快。

我们不仅要关注FIFO何时满/空,满/空了以后不再进行写/读操作。

也要关心FIFO满时写数据是否丢失,FIFO空时读数据是否有效;

仅仅根据FIFO的full和empty来判断模块是否停止写入或读取数据是不行的,因为实际电路中,模块AB与FIFO进行交互,均具有一定的时间延迟(时序电路被时钟驱动,寄存器可以暂存数据,因此数据逐级传递)。

如果根据FIFO满信号控制A停止写数据,full信号传输到A需要M个时钟周期,A接收到full信号停止传输数据时,仍旧有N组数据“在路上”;这就会造成M+N个数据的丢失,导致严重问题;

与之类似,如果直接使用empty信号控制B停止读数据,也会造成通道级数个无效数据的读取;这就引入了FIFO的阈值。

另一个方面fifo最小深度可以减少资源的消耗。

空和满的判断

读慢写快:

  进行写满判断的时候需要将读指针同步到写时钟域,因为读慢写快,所以不会有读指针遗漏,同步消耗时钟周期,所以同步后的读指针滞后(小于等于)当前读地址,所以可能写满会提前产生,并非真写满。

读快写慢:

  进行读空判断的时候需要将写指针同步到读指针 ,因为读快写慢,所以不会有写指针遗漏,同步消耗时钟周期,所以同步后的写指针滞后(小于等于)当前写地址,所以可能读空会提前产生,并非真读空。

1 异步fifo最小深度的计算---防止发生数据丢失的情况

fifo起数据缓冲的作用。

写时钟频率大于 读时钟频率,如果fifo写满会导致数据溢出,溢出的话。会造成数据丢失。

读时钟频率大于 写时钟频率,且读写没有空闲周期,这种不会发生数据丢失的情况。

读时钟频率大于 写时钟频率,且读写有空闲周期,也是要考虑FIFO最小深度。

读写速率相同,且无空闲时钟,则不需要fifo。

2 AMBA

3 cache

4 乱序发射