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

时间:2019-04-26 00:03:02

标签: verilog fifo

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

斜坡不是很快,并且所有时钟均为50 MHz。因此,我有很多时钟周期(〜150 +)可以使用。但是,数据可能来自同一时钟周期中的多个通道。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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