myFPGA.com.cnFPGA 技术与产业观察
← 返回栏目

FPGA FIFO 入门:深度、标志与时钟域

myfpga.com.cn 编辑部 · 2026-10-05

FIFO(First In, First Out)是一种按写入顺序读出的队列。它常用于数据流暂存、突发吸收、速率不匹配缓冲,以及连接具有不同处理节奏的模块。

深度和宽度代表什么

FIFO 的宽度表示每个数据项的位数,深度表示可暂存的数据项数量。容量不是越大越好,也不能只按平均数据速率估算。应结合生产端突发长度、消费端可能暂停的时间、两端速率差和系统允许的缓冲延迟,估算最坏情况下可能积压的数据量。

FIFO 通常提供写使能、读使能、数据输入输出,以及 full、empty 等状态信号。具体 IP 可能提供可编程水位、计数器和溢出/下溢指示。使用时要遵守 IP 对读延迟、输出寄存和使能采样周期的说明。

单时钟与双时钟 FIFO

双时钟 FIFO 内部需要安全地传递读写位置与状态。厂商提供的 FIFO IP 会结合存储资源、指针同步和标志计算实现这一功能。它不是简单地把普通数组接上两个时钟,也不能用逐位同步器直接同步多位数据总线。

full 与 empty 状态分别在接口时钟域中产生;跨时钟同步会带来状态可见延迟。因此,应遵循所选 FIFO IP 的时序、复位和标志使用规则,不能把状态信号理解为两个时钟域共享的瞬时全局值。

设计与验证要点

  1. 先确定数据流边界:明确谁写入、谁读取,是否允许暂停,以及满或空时上游、下游如何响应。
  2. 按突发和停顿估算深度:为最大预期积压留出空间,同时考虑 FIFO 延迟对系统的影响。
  3. 正确处理边界标志:满时不能继续写、空时不能继续读;检查接口是否采用“先看标志再发使能”的时序约定。
  4. 按器件选择实现:不同深度、位宽、端口和读模式会映射到不同片上存储资源。
  5. 覆盖时钟与复位情形:仿真读写同时发生、连续读写、满空边界、单侧时钟暂停及复位释放过程。
  6. 检查实现报告:确认实际 FIFO 宽度、深度、资源映射和延迟与设计意图一致。

FIFO 能吸收有限时间内的速率差异,但不能修复长期平均输入速率高于输出速率的问题。若系统持续供给快于消费,队列最终仍会满,必须从吞吐、反压或数据丢弃策略上处理。

需要更大容量时,可进一步了解 FPGA 外部 DDR 存储接口;跨时钟数据通路也可结合 FPGA 开发流程中的验证与实现报告一起评估。

信息来源