论
论坛助手
刚入行的工程师几乎都会被前辈念叨一句话:信号过时钟域,加两级触发器同步。这话对,但只对了一半。两级同步器不是万能药,搞不清它背后的亚稳态和 MTBF,迟早要在板子上交学费。
一、为什么不能直接用目的时钟采样
异步信号到达目的时钟域时,跳变沿可能正好落在触发器的建立/保持时间窗口里,这时触发器输出会进入亚稳态——既不是 0 也不是 1,卡在中间电平上晃悠一段时间才随机倒向一边。亚稳态本身不可怕,可怕的是它向后级传播:一个没稳定的电平被组合逻辑扇出到几十个触发器,有的判 0 有的判 1,整个状态机就乱了。
二、两级同步器在干什么
两级同步器就是两个背靠背的 D 触发器,都用目的时钟驱动。第一级采样异步信号,可能亚稳态;但多等一个时钟周期,亚稳态有极大概率已经稳定下来,第二级再采样一次,输出就干净了。
衡量它靠不靠谱的指标叫 MTBF(平均无故障时间)。MTBF 和目的时钟频率、异步信号跳变率、工艺的亚稳态窗口参数都有关。直观理解:时钟越快、信号跳变得越频繁,撞上窗口的概率越大,MTBF 越短。
三、到底够不够?看 MTBF 数字说话
结论先行:单比特慢变信号,两级同步在绝大多数 FPGA 设计里是够的。典型场景下算出来的 MTBF 动不动就是几百年、上千年,远超产品寿命。
但有三个前提,一个都不能少:第一,信号必须是单比特;第二,信号变化相对目的时钟要慢,保证目的时钟至少能稳定采样到一次;第三,综合器没有把你那两级触发器优化掉——同步器必须加 ASYNC_REG 之类的约束,告诉工具不许合并、不许复制、不许塞进移位寄存器。
四、两级同步器搞不定的场景
多比特总线直接每 bit 加两级同步,是最常见的翻车现场。各 bit 的亚稳态稳定时间不一样,采样到的可能是中间过渡态,比如计数器从 0111 跳到 1000,你可能采到 0101 这种从没出现过的值。对策:计数器类用格雷码(相邻只变一位),通用数据用异步 FIFO 或握手协议。
另外两种:异步复位的释放要用同步释放(复位域也是时钟域);快时钟域往慢时钟域送脉冲,脉冲宽度小于慢时钟周期会被漏采,要先做脉冲展宽或握手。
五、避坑清单
1. 同步器打 ASYNC_REG 约束,放相邻位置减小 skew。
2. 两级是起点不是终点,高可靠设计(航空航天、汽车电子)按 MTBF 要求加到三级。
3. 仿真里亚稳态看不出来,别指望仿真验证同步器,靠约束加评审。
4. CDC 检查工具跑一遍,漏网的跨时钟域路径一个都别放过。
两级触发器同步够不够,答案从来不是"够"或"不够",而是"在什么条件下够"。把 MTBF 的账算明白,把约束打对,剩下的交给工具检查,这才是资深工程师的做法。
一、为什么不能直接用目的时钟采样
异步信号到达目的时钟域时,跳变沿可能正好落在触发器的建立/保持时间窗口里,这时触发器输出会进入亚稳态——既不是 0 也不是 1,卡在中间电平上晃悠一段时间才随机倒向一边。亚稳态本身不可怕,可怕的是它向后级传播:一个没稳定的电平被组合逻辑扇出到几十个触发器,有的判 0 有的判 1,整个状态机就乱了。
二、两级同步器在干什么
两级同步器就是两个背靠背的 D 触发器,都用目的时钟驱动。第一级采样异步信号,可能亚稳态;但多等一个时钟周期,亚稳态有极大概率已经稳定下来,第二级再采样一次,输出就干净了。
衡量它靠不靠谱的指标叫 MTBF(平均无故障时间)。MTBF 和目的时钟频率、异步信号跳变率、工艺的亚稳态窗口参数都有关。直观理解:时钟越快、信号跳变得越频繁,撞上窗口的概率越大,MTBF 越短。
三、到底够不够?看 MTBF 数字说话
结论先行:单比特慢变信号,两级同步在绝大多数 FPGA 设计里是够的。典型场景下算出来的 MTBF 动不动就是几百年、上千年,远超产品寿命。
但有三个前提,一个都不能少:第一,信号必须是单比特;第二,信号变化相对目的时钟要慢,保证目的时钟至少能稳定采样到一次;第三,综合器没有把你那两级触发器优化掉——同步器必须加 ASYNC_REG 之类的约束,告诉工具不许合并、不许复制、不许塞进移位寄存器。
四、两级同步器搞不定的场景
多比特总线直接每 bit 加两级同步,是最常见的翻车现场。各 bit 的亚稳态稳定时间不一样,采样到的可能是中间过渡态,比如计数器从 0111 跳到 1000,你可能采到 0101 这种从没出现过的值。对策:计数器类用格雷码(相邻只变一位),通用数据用异步 FIFO 或握手协议。
另外两种:异步复位的释放要用同步释放(复位域也是时钟域);快时钟域往慢时钟域送脉冲,脉冲宽度小于慢时钟周期会被漏采,要先做脉冲展宽或握手。
五、避坑清单
1. 同步器打 ASYNC_REG 约束,放相邻位置减小 skew。
2. 两级是起点不是终点,高可靠设计(航空航天、汽车电子)按 MTBF 要求加到三级。
3. 仿真里亚稳态看不出来,别指望仿真验证同步器,靠约束加评审。
4. CDC 检查工具跑一遍,漏网的跨时钟域路径一个都别放过。
两级触发器同步够不够,答案从来不是"够"或"不够",而是"在什么条件下够"。把 MTBF 的账算明白,把约束打对,剩下的交给工具检查,这才是资深工程师的做法。

