Vhdl 在FPGA中忽略FIFO输入数据的总体影响是什么?

Vhdl 在FPGA中忽略FIFO输入数据的总体影响是什么?,vhdl,verilog,fpga,fifo,hdl,Vhdl,Verilog,Fpga,Fifo,Hdl,我理解FIFO的操作,但我想我缺少了一些关于它的实用性的东西 在FPGA中实现FIFO时,比如说跨时钟域,似乎经常会遇到FIFO已满的情况,但每个周期中仍有应计时的数据。如果写入机制读取数据的速度快于读取机制读取数据的速度,则可能会发生这种情况。显然,一旦FIFO已满,它将开始忽略数据,直到有空间继续存储数据 我的问题是,这不是一件大事吗?我们基本上只是在丢失数据?当然FIFO正在做它的工作,但是整个系统只是在丢弃数据 我得出了两个可能的结论 1) 在这种情况下(输入数据速率大于输出数据速率),

我理解FIFO的操作,但我想我缺少了一些关于它的实用性的东西

在FPGA中实现FIFO时,比如说跨时钟域,似乎经常会遇到FIFO已满的情况,但每个周期中仍有应计时的数据。如果写入机制读取数据的速度快于读取机制读取数据的速度,则可能会发生这种情况。显然,一旦FIFO已满,它将开始忽略数据,直到有空间继续存储数据

我的问题是,这不是一件大事吗?我们基本上只是在丢失数据?当然FIFO正在做它的工作,但是整个系统只是在丢弃数据

我得出了两个可能的结论

1) 在这种情况下(输入数据速率大于输出数据速率),如果我们真的关心不丢失任何数据,那么FIFO可能不是跨越这些域的最佳方式(特别是如果写入机制的时钟比读取域快得多)。如果这是真的,传统上有没有比FIFO更好的跨时钟域的方法?也许答案是,在FIFO之前,您需要使用另一个元素,例如抽取器

2) 在FIFO需要时间清除其数据之前,我们在系统上设置了一个约束,即“您只能写入X个数据量(或周期,或时间等)”。这似乎让我不满意,我们必须关闭数据流一段时间,等待FIFO清除一些空间,直到我们继续写。但话说回来,我对数字系统还不熟悉,也许这就是我不习惯的严酷现实:)


这样看来,在跨时钟域时,FIFO的最佳用途就是输入FIFO的数据速率与输出FIFO的数据速率相同,因为这样它就可以保持自身的速度。

似乎是将两个问题混为一谈

有时钟域交叉和输入数据缓冲。恰好FIFO将这两个任务的实现合并到一个实体中

如果接收器跟不上发射器,并且没有流量控制,那么数据就会丢失,不管数据是否跨越时钟域。如果不添加某种握手或流控制线路,就无法解决数据丢失问题

如果没有流量控制,您必须确保输入缓冲区大小足以处理特定情况下的负载峰值


至于影响-如果您的设计允许数据丢失,那么它就不存在;如果设计不允许数据丢失,那么您的设备将无法正常工作。

FIFO还具有不同输入和输出宽度的功能。这意味着,例如,您有一个100 Mhz的32位输入和一个50 Mhz的64位输出。输入和输出fifo的数据速率为一半,但数据宽度为两倍

“流量控制”必须指除“满”/“空”和“几乎满”/“几乎空”控制信号以外的控制?例如,控制信号会告诉发送器停止传输数据,直到接收器准备接受更多数据?jakedaly,我的意思正是这样。请参阅各种接口CTS/RTS,Avalon MM中的
waitrequest
,或Avalon-ST中的
ready
。这是保证数据不会丢失所需的最低要求。“几乎是满的/空的”是一种特定的东西,在大多数情况下并不需要。@jakedaly需要注意的是,在生产者创建输出的速度快于消费者输入输出的情况下,通常有两种选择:丢失消费者无法接收的任何数据,或者让消费者向生产者施加反向压力,以暂停数据的生产。哪个最适合您的系统取决于数据是什么,但如果您需要所有数据,则流量控制是实现背压的机制。有时,生产者只能在短时间内更快地创建数据,这就是像FIFO这样的缓冲技术变得重要的地方。一个特定的电子设计问题可能在电气工程堆栈交换站点上。FIFO的两条规则:永远不要写入完整的FIFO,永远不要读取空的FIFO。永远不要违反规则。