如何处理对 FIFO 的多个同时输入?

How to handle multiple simultaneous inputs to a FIFO?

我的 verilog 代码为 8 个通道生成 DAC 斜坡信号(通道,值)。我正在将此功能添加到已经具有 DAC controller/communicator 和相关 FIFO 的项目中。我想将我为所有 8 个通道同时生成的数据添加到这个现有的 FIFO 中。我很容易为单个频道完成此操作,但我不确定包含所有频道的最佳方式。

斜坡不是很快,所有时钟都是 50 MHz。所以,我有很多时钟周期(~150+)可以使用。但是,数据可能来自同一时钟周期内的多个通道。

我是否应该创建 8 个 FIFO(只够几条指令使用),每个通道 1 个?还是有更有效的方法来做到这一点?

如果我偶尔丢失一个数据点,那不是什么大问题。

不确定这是简单的 CDC fifo 还是其他东西,但这可以通过多种方式完成,如果您在下一个数据包到达之前有足够的时间,那么您可以:

  • (1) 在推送域中实现简单的循环算法,该算法将从每个通道顺序推送数据。您可能想要添加 3 位边带信号用于通道识别,以便 pop 域可以根据实际数据来源进一步分发它。
  • (2) 在推送到 FIFO 之前聚合所有数据,并使 FIFO 数据端口宽度等于 8x 输入通道的宽度。在 pop 域中你可以再次去聚合它(如果需要的话),定位应该是确定性的所以这个操作会非常简单。

如果需要某种更复杂的数据流管理,您可能不得不使用 8 个独立的 FIFO。