Altifigence Academy

34 / 37 · 概念

时钟域边界与亚稳态

理解两级同步器的适用范围,区分单比特、短脉冲与多比特传输。

来自其他时钟的输入没有边沿间隔保证

setupsetup 捕获时钟边沿之前,输入数据必须保持稳定的最短时间。违反建立时间就无法保证存储结果。了解更多、hold 条件保持时间 捕获时钟边沿之后,输入数据仍必须保持稳定的最短时间。需结合上下文,将此时序要求与普通的数值保持行为区分。了解更多要求数据在接收时钟边沿附近足够稳定。按钮或另一个独立时钟域的输出,与接收边沿之间的关系任意,因此很难始终保证这些条件。

这可能使触发器触发器 在指定时钟边沿存储输入,并保持到下一边沿的元件。输入必须满足 setup、hold 条件。了解更多内部状态在一段时间内无法迅速稳定到 0 或 1,即发生亚稳态(metastability)。普通 0/1 RTL 仿真并不直接表达这种模拟现象。测试波形干净,并不意味着跨时钟域传输安全。

两级同步器适用于保持足够长时间的单比特信号

SystemVerilog
module level_synchronizer (
    input  logic clk_dst,
    input  logic rst_dst,
    input  logic async_level,
    output logic synced_level
);
    logic first_stage;
    always_ff @(posedge clk_dst) begin
        if (rst_dst) begin
            first_stage  <= 1'b0;
            synced_level <= 1'b0;
        end else begin
            first_stage  <= async_level;
            synced_level <= first_stage;
        end
    end
endmodule

即使第一个触发器进入不稳定状态,该结构也在下一级读取前留出稳定时间。功能电路只使用最后一级输出,不直接分支使用第一级输出。上述 reset 假设与目的时钟同步。

实际实现需按工具和器件要求设置同步器同步器 使来自另一时序域的信号能够在接收时钟域中使用的电路。不能把用于单比特的多级触发器直接套用到多位数据。属性、缩短级间布线,并执行 STA、CDC 检查等。仅仅用了两个寄存器寄存器 存储多位状态的电路。本课程中的同步寄存器在时钟边沿存储指定输入。了解更多,并不保证布局和路径条件也已满足。

异步输入进入第一级,功能电路只使用末级输出。级间时间提供了稳定机会,但并不保证模拟亚稳态亚稳态 存储元件暂时无法稳定为 0 或 1 的模拟状态。同步电路降低其传播概率,但不能将发生概率降为零。一定消失。

单比特同步器的适用边界
  1. 异步电平: 与目的时钟没有固定相位关系
  2. meta FF: 可能出现不稳定状态
  3. synced FF: 在下一个目的时钟边沿捕获
  4. 功能电路: 只使用最后一级

降低失败概率,但不能降为零

在一种简化模型中,平均故障间隔 MTBF 呈现以下趋势。

MTBF ∝ eTresolve/τfdstfevent\mathrm{MTBF}\ \propto\ \frac{e^{T_{\mathrm{resolve}}/\tau}}{f_{\mathrm{dst}}f_{\mathrm{event}}}

TresolveT_{\mathrm{resolve}} 是可用于恢复稳定的时间,τ\tau 是器件特性参数,fdstf_{\mathrm{dst}} 是接收时钟频率,feventf_{\mathrm{event}} 是异步输入转换频率。实际计算需要器件专用常数,不能仅凭此公式给任意电路标出“安全若干年”的数字。

不同问题不能套用同一种电路

要传递的信息仅用两级单比特同步是否足够?应考虑的结构
保持足够长时间的电平满足概率与延迟要求时可用目的时钟域同步器
短于目的时钟周期的脉冲可能完全漏掉脉冲脉冲展宽、翻转编码、握手
必须同时解释的多位数据各位可能呈现不同时刻的值稳定总线配合握手、异步 FIFO
机械按钮触点反复弹跳是另一个问题同步后再消抖

例如四位数值从 0111 变为 1000 时,若分别同步每一位,可能短暂观察到从未实际存在过的组合。要保留总线一致性,必须设计整组数据与传输完成之间的关系。

延伸阅读:MIT OpenCourseWare — Synchronization, Metastability and Arbitration

自己试试

接收时钟为 50MHz,输入脉冲宽度为 5ns。加了两级同步器后,能否声称所有脉冲都会被检测?按钮弹跳也会一并消除吗?

阅读解释

50MHz 的周期为 20ns。5ns 脉冲可能在两个接收边沿之间出现并消失,连第一级都无法捕获。单纯增加同步器级数不能解决脉冲保留问题,需要脉冲展宽或握手等约定;按钮弹跳还需要另行消抖。

你的选择适用于此浏览器,可随时在页脚更改。