笔记 / 返回列表

FPGA与边缘AI

FPGA FIFO 与时钟域交叉

同步 FIFO、异步 FIFO 的使用边界,以及跨时钟域数据传输需要验证的条件。

问题
同步 FIFO、异步 FIFO 的使用边界,以及跨时钟域数据传输需要验证的条件。
环境
FPGA · RTL · FIFO · CDC
状态
待发布
首次发布
2025年9月18日
最后更新
2026年8月10日
预计阅读
2 分钟

FIFO(先进先出缓冲)用于吸收突发流量、解耦生产者与消费者的速率,也常被用于跨时钟域传输。它不是“把两个时钟接在一起”的通用补丁:同步和异步 FIFO 面对的是不同问题。

同步 FIFO

同步 FIFO 的读写逻辑使用同一时钟,适合在同一时钟域内平滑瞬时速率差异。设计或配置时明确以下参数:

  • 数据宽度与深度;
  • 读写使能的握手语义;
  • full、empty、几乎满/空的定义;
  • 上溢和下溢时是拒绝操作、报错还是丢弃数据;
  • 复位后读写指针和标志的期望状态。

异步 FIFO

异步 FIFO 的读写侧位于不同时钟域。读写指针不能把普通多位二进制信号直接跨域采样,否则采样时可能看到中间值。典型实现会使用适合跨域的指针编码、每个方向上的同步器以及基于同步后指针的满/空判断。

异步 FIFO 还必须处理复位释放顺序。即使数据路径正确,不同域在复位解除时看到的状态不同,也可能造成一次错误读写。使用厂商 IP 时,应阅读该 IP 对复位、有效信号和时钟比的具体要求。

数据宽度转换不是 CDC 的替代品

一些 FIFO IP 支持读写侧宽度不同,例如将 32 位总线转换为 8 位流。宽度转换处理的是数据打包关系;跨时钟域处理的是采样安全性。二者可同时存在,但应分别检查配置、容量换算、端序和边界条件。

验证清单

  1. 在仿真中覆盖空读、满写、突发读写和复位中断。
  2. 对异步 FIFO 使用工具的 CDC 检查,并审阅被豁免的路径。
  3. 给读写时钟施加不同频率与相位,验证标志不会短暂误判。
  4. 在目标器件上检查时序约束是否覆盖两个时钟域及其例外路径。

更完整的工程验证分层见 FPGA 开发流程与验证分层。

SEARCH / QUICK JUMP

搜索工程档案

↑↓ 选择 · Enter 打开 · Esc 关闭