一文快速掌握异步FIFO深度计算(笔试必考)

作者:FPGA入门到精通

异步FIFO(First In First Out,先进先出)是一种关键的数据缓冲结构,广泛应用于跨时钟域之间传输数据。

异步FIFO的深度计算问题在FPGA笔试题中出现频率非常高。

本文将详细探讨异步FIFO深度的计算方法,并结合多个案例进行分析。
一、异步FIFO的基本概念

1、异步FIFO的作用

异步FIFO能够在不同时钟域之间提供数据缓冲,解决数据流速不匹配的问题,保证数据传输的连续性和完整性。

2、异步FIFO的组成

异步FIFO通常由以下几部分组成:

(1)存储数据的介质

LUT/BRAM/Distributed-RAM/URAM。

(2)写地址指针和读地址指针

分别指示数据写入和读取的位置。

(3)控制逻辑

管理FIFO的读写操作及状态信号。

3、异步FIFO深度的重要性
(1) 深度对性能的影响

FIFO的深度决定了其缓冲数据的能力。

深度不足可能导致数据丢失,而深度过大则可能造成资源浪费。
(2)深度对资源的消耗

FIFO深度的增加会占用更多的FPGA内部存储资源,比如Block RAM,影响设计的成本和复杂性。
二、异步FIFO深度的计算方法
1、理论基础

FIFO深度的计算基于数据的写入速率、读取速率以及数据传输的最大burst长度。
(1) 计算公式

a、写比读快

关键在于计算出最恶劣的情况下,在突发读写这段时间内,有多少数据没有被读取。

FIFO 的最小深度 D 可以通过以下公式计算:

         D = Bw - Br = Bw - Bw * fr/fw

其中,Bw和Br分别为写入和读取的burst长度,fw和fr分别为写时钟和读时钟的频率。

b、读写同速或读比写快

只起到跨时钟域传输数据的作用,FIFO深度设成最小即可。
(2)实际应用中的考虑

在实际应用中,需要考虑时钟相位差异、数据位宽、传输效率等因素,并在计算出的最小深度基础上增加适当的余量。

一般会选择接近该值的2的幂次方。

2、异步FIFO深度计算的案例分析

案例一:AD采样率为50MHz,FPGA读数据速率为40MHZ,需要5万个采样数据完整的送入FPGA,在AD和FPGA之间FIFO缓存的最大深度?

计算过程:

突发读写数据量:50000个
写数据时钟:50MHz

读数据时钟:40MHz

则FIFO的最小深度为:

    50000(1 - 40/50) = 10000

案例二:假设FIFO写时钟频率为100MHz,读时钟频率为80Mhz:

① 传输1000个数据,FIFO最小深度是多少?

FIFO的最小深度:

 1000*(1 - 80/100) = 200

② 100个写时钟下写入80个数据,1个读时钟读取1个数据,FIFO的最小深度是多少?

最恶劣情况分析:

100个写时钟下写入80个数据,也就是有80个有效时钟写数据,20个空闲周期。

那么最恶劣的情况就是,前一个100写时钟的80个有效时钟,与后一个100写时钟的80个有效时钟,挨在一起。

也就是一次写入了160个数据。

FIFO最小深度计算:

160*(1 - 80/100)= 32

③ 100个写时钟下写入80个数据,3个读时钟读1个数据,FIFO的最小深度是多少?

最恶劣情况分析同上一题,也就是一次写入160个数据。

每3个读时钟读取1个数据,等效于读时钟频率为fr/3时,1个周期读取1个数据。

所以最小深度为

160*(1 - 80/3/100)≈ 117.3333  = 118。

考虑到FIFO深度一般是2的n次幂,可以取128。

④ 100个写时钟写入80个数据,3个读时钟读2个数据,FIFO的最小深度是多少?

最恶劣情况分析同上一题,也就是一次写入160个数据。

每3个读时钟读取2个数据,等效于读时钟频率为fr*2/3时,1个周期读取1个数据。

所以最小深度为

160*(1 - 80*2/3/100)≈ 74.666  = 75。

考虑到FIFO深度一般是2的n次幂,可以取128。

最新文章

最新文章