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 呈指数级改善。这也是为什么高速设计中两级同步往往不够,需要三级甚至更多。
四、同步与异步的区分:看相位关系,不看频率
“同步”与“异步”在 CDC 语境中描述的是两个时钟之间是否存在确定的、可预测的相位关系。同步时钟之间相位固定,时序分析可以覆盖;异步时钟之间相位任意漂移,普通建立/保持分析不再成立,必须依靠同步器结构来保证可靠性。
- 同步时钟:同源、相位关系确定,如 PLL 的整数分频输出。可用普通时序约束分析,但仍需注意跨域路径的时序余量。
- 异步时钟:不同源或相位不可预测,如两个独立晶振。必须加同步器,并对跨域路径设置 false path 或 max delay 约束。
- 伪同步:频率相同但来源不同,看似同步实则异步,是最容易被误判的一类。
五、案例与复盘:一个被漏掉的伪同步路径
某设计使用两颗独立晶振,分别产生 50MHz 和 50MHz 时钟。设计者认为频率一致,直接把 A 域计数器送到 B 域使用,未加同步器,也未设置 CDC 约束。综合报告无异常,但上板后偶发数据错误。
复盘发现:两个 50MHz 时钟虽标称相同,但来源不同,相位持续漂移,属于典型伪同步。多比特计数器各位到达时刻不一致,接收端采到中间态组合。修正方式是改用异步 FIFO 或格雷码加两级同步,并在约束中把该跨域路径设为 false path,同时用 CDC 工具确认同步器被正确识别。