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

FPGA 跨时钟域(CDC)基础:同步器、脉冲与多位数据

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

当信号从一个时钟域传到另一个时钟域,如果两个时钟没有确定的相位关系,采样边沿可能落在信号变化附近。接收触发器可能进入亚稳态;跨域设计要降低这种状态传播到后级逻辑的概率,并保证信息不会丢失或错读。

单比特稳定电平:同步器链

对持续时间足够长的单比特状态,常见做法是在目标时钟域使用串接的触发器进行同步。第一级接收异步输入,后续级提供额外解析时间;后级逻辑只使用同步器链的末级输出。

logic dst_clk, async_level, sync_ff1, sync_ff2;
logic level_dst;

always_ff @(posedge dst_clk) begin
  sync_ff1 <= async_level;
  sync_ff2 <= sync_ff1;
end

assign level_dst = sync_ff2;

这类同步器降低亚稳态传播风险,但不会让风险归零,也会增加若干目标时钟周期的延迟。同步器级数、器件属性和工具识别方式,应按目标 FPGA 与开发工具文档确认。不要把第一级输出同时用于其他逻辑。示例省略了模块端口和上电复位处理,实际设计需按目标器件及复位架构核实。

短脉冲和事件:不能只靠两级触发器

如果源时钟域的脉冲比目标时钟周期短,目标域可能完全采不到它。对于事件通知,可根据事件频率与传输语义使用脉冲展宽、toggle 同步或请求/应答握手;选择前要确认连续事件是否可能重叠,以及接收端是否必须逐个处理。

多位数据:保持数据一致性

把总线的每一位分别接入独立同步器,不能保证各位在同一笔传输中被接收。若各位在不同周期稳定下来,目标端可能组合出从未由源端发送过的值。

常见结构包括:

CDC 设计必须与时序约束和静态分析配合。把跨域路径标为例外只会改变时序分析范围,不会自动建立安全的数据传输电路。

设计检查清单

  1. 为每个时钟域标明时钟来源、频率关系与复位方式;
  2. 按数据类型和传输语义选择同步器、握手或异步 FIFO;
  3. 确保单比特同步器的中间级没有被其他逻辑使用;
  4. 对多位跨域通路检查数据稳定窗口、指针同步和适用约束;
  5. 使用目标工具的 CDC 检查与综合报告复核结构;
  6. 通过仿真覆盖复位、连续事件、背压和频率差异等情况,并在目标硬件上验证。

先理解 FPGA RTL 组合逻辑与时序逻辑 与 有限状态机设计,再结合 FPGA 开发流程入门 了解约束、实现和板级验证如何衔接。

信息来源