FIFO深度计算

问题描述 投票:0回答:1

我有 2 个块,其中 block_A 正在写入,block_B 正在读取。

写入配置:每 5 个时钟 3 次写入,
读取配置:每 50 个时钟 30 次读取

为了避免 FIFO 下溢/上溢,所需的 FIFO 深度是多少? 假设两个 FIFO 以相同的频率工作。

如果我们计算频率,两个块的频率都是 3/5。但话说回来,这个 3/5 的频率是平均频率。 所以我不知道如何计算 FIFO 深度。

fifo soc digital-design
1个回答
0
投票

从你的描述中我不清楚这是否是一种固定模式,或者是对其中一侧在很长一段时间内的某种估计。

如果保证每 5 个周期有 3 次写入,每 50 个周期有 30 次读取,那么您可以使用以下公式计算所需的缓冲区深度:

FifoDepth = BW*LatencyFromPushToPop

您的情况:

BW = 3/5   //This is the BW that you want to pass through the FIFO. 
LatencyFromPushToPop = (50-30) = 20 cycles //you must add to this number the actual latency of the FIFO (1, 2 cycles?), which I am not considering here

从这个等式中,您可以得出避免写背压的最小 FIFO 深度为:

 3 / 5 * 20 = 12.

您还可以通过尝试模拟 FIFO 填充水平的最坏情况来实现这一点:

  1. B 块仅在 20 个周期后开始读取。
  2. 块 A 在这 20 个周期内尽可能多地写入。

块 A 将在 20 个周期内最多写入 20 / 5 * 3 = 12 个条目。

当块 B 开始读取时,它将连续读取 30 个条目。 在这 30 个周期中,块 A 最多将写入 30 / 5 * 3 = 额外的 18 个条目。

由于块 B 将在这 30 个周期中读取 30 个条目,即 12+18 个条目,因此 FIFO 将被清空,并且其填充水平不会超过数字 12(我们又回到了方块一)。

注1:

不确定我理解你所说的下溢是什么意思。根据定义,块 A 仅发送数据 3/5 的时间,因此必须有一些周期没有任何内容可从 FIFO 读取。 如果 FIFO 中没有任何内容可供读取,则块 B 不应弹出任何内容。

注2:

如果一侧的平均BW是对很长一段时间的估计,那么它实际上取决于流量的突发性。

一个很好的例子是,如果一个块在 1 秒内写入了 50% 的时间,但在前 0.5 秒内写入了所有内容。

平均写入带宽为 50%,但 FIFO 需要在前 0.5 秒内吸收 100% 的写入流量。因此,在长时间使用平均 BW 时,您必须了解优化 FIFO 的模式和时间范围。

© www.soinside.com 2019 - 2024. All rights reserved.