2. CDC基础概念

在讨论路径约束、False Path 与同步链设计之前,必须先建立一组共同语言:什么是时钟域,什么信号算跨时钟域,为什么跨时钟域会出问题,以及“同步”和“异步”在工程语境中到底指什么。很多 CDC 问题并非工具不会分析,而是设计者对这几个基础概念的理解存在偏差,导致约束写错、同步器漏加或误判。

一、时钟域:不是“频率不同”才算不同域

时钟域(Clock Domain)是由同一时钟源、同一时钟网络驱动的一组时序单元集合。判断两个寄存器是否属于同一时钟域,关键看它们的时钟是否来自同一个根时钟、是否经过相同的时钟树分支、以及是否存在确定的相位关系。仅仅频率相同,并不代表同一时钟域;频率不同,也不一定就是异步关系。

常见情形包括:

  • 同源同频同相:同一 PLL 输出经不同分支,通常仍视为同一域,但需关注 skew。
  • 同源分频:如 100MHz 与 50MHz 来自同一 PLL,属于同步时钟域,相位关系确定。
  • 同源但相位可调:如带相位偏移的输出,仍可能保持确定关系,但需按同步处理并约束。
  • 不同晶振或不同 PLL:频率标称相同也互不相关,属于异步时钟域。
工程判断口诀:先看根,再看树,最后看相位。根不同,基本可判异步;根相同,再确认分频与相位是否固定。

二、跨时钟域信号:数据、控制与复位各有风险

跨时钟域信号(CDC Signal)是指从发送时钟域进入接收时钟域、且两个域之间没有确定相位关系的信号。它不只包括数据总线,还包括单比特控制信号、使能、中断、状态标志以及复位信号。不同类型的信号,风险点和处理方式不同。

信号类型 典型例子 主要风险 常用处理
单比特电平 使能、模式选择 亚稳态、毛刺 两级触发器同步
单比特脉冲 中断、事件触发 脉冲丢失或展宽 脉冲同步器、握手
多比特数据 配置字、计数值 各位到达时刻不一致 格雷码、握手、异步 FIFO
复位信号 全局复位释放 释放沿不同步 复位同步器

三、亚稳态与 MTBF:概率问题,不是“会不会”的问题

当触发器的数据输入在时钟有效沿附近的建立/保持窗口内发生变化,输出可能在一段时间内既不是稳定高电平,也不是稳定低电平,这就是亚稳态(Metastability)。亚稳态不会永久存在,但会以一定概率持续到下一个采样时刻,从而被下游逻辑采到不确定值。

衡量同步器可靠性的核心指标是 MTBF(Mean Time Between Failures,平均无故障时间)。它描述的是同步器因亚稳态传播导致系统失效的平均间隔。MTBF 越大越可靠,常用公式可简化为:

MTBF ≈ e^(t_r / τ) / (T_0 × f_clk × f_data)

t_r  : 留给亚稳态解析的时间(约一个时钟周期减去建立时间)
τ    : 触发器亚稳态解析时间常数
T_0  : 亚稳态窗口相关常数
f_clk: 接收时钟频率
f_data: 异步数据变化频率

从公式可以看出:接收时钟越快、数据翻转越频繁、留给解析的时间越短,MTBF 越低。增加一级同步触发器,本质上是把 t_r 从“一个周期”增加到“两个周期”,使 MTBF 呈指数级改善。这也是为什么高速设计中两级同步往往不够,需要三级甚至更多。

跨时钟域两级同步链与亚稳态解析窗口 发送时钟域 clk_a / 数据变化 异步、无固定相位 跨域信号 第一级触发器 可能进入亚稳态 解析时间 t_r1 第二级触发器 稳定采样 解析时间 t_r2 接收域逻辑 clk_b 采样 MTBF 影响因素与改善方向 接收时钟频率 f_clk ↑ MTBF ↓ 数据翻转率 f_data ↑ MTBF ↓ 同步级数 ↑ / t_r ↑ MTBF ↑↑ 结论:亚稳态无法彻底消除,只能通过增加解析时间把失效概率压到可接受范围。 工程上通常要求 MTBF 远大于系统寿命,例如大于 10^9 小时量级。

四、同步与异步的区分:看相位关系,不看频率

“同步”与“异步”在 CDC 语境中描述的是两个时钟之间是否存在确定的、可预测的相位关系。同步时钟之间相位固定,时序分析可以覆盖;异步时钟之间相位任意漂移,普通建立/保持分析不再成立,必须依靠同步器结构来保证可靠性。

  • 同步时钟:同源、相位关系确定,如 PLL 的整数分频输出。可用普通时序约束分析,但仍需注意跨域路径的时序余量。
  • 异步时钟:不同源或相位不可预测,如两个独立晶振。必须加同步器,并对跨域路径设置 false path 或 max delay 约束。
  • 伪同步:频率相同但来源不同,看似同步实则异步,是最容易被误判的一类。
常见误区:把“频率相同”当作“同步”,从而漏加同步器;或把“同源分频”当作“异步”,错误设置 false path,掩盖了真实时序问题。

五、案例与复盘:一个被漏掉的伪同步路径

某设计使用两颗独立晶振,分别产生 50MHz 和 50MHz 时钟。设计者认为频率一致,直接把 A 域计数器送到 B 域使用,未加同步器,也未设置 CDC 约束。综合报告无异常,但上板后偶发数据错误。

复盘发现:两个 50MHz 时钟虽标称相同,但来源不同,相位持续漂移,属于典型伪同步。多比特计数器各位到达时刻不一致,接收端采到中间态组合。修正方式是改用异步 FIFO 或格雷码加两级同步,并在约束中把该跨域路径设为 false path,同时用 CDC 工具确认同步器被正确识别。

核心结论:CDC 分析的第一步永远是准确划分时钟域,第二步是识别所有跨域信号,第三步才是选择同步结构和约束策略。概念不清,后面的路径约束和 False Path 都会建立在错误前提上。