2. 基础知识

在跨域时序告警定位与 RTL 修复的整个工作流中,最容易被忽视、却最影响判断效率的,是对基础术语的精确理解。很多“告警定位错误”并非工具问题,而是工程师把时钟域、跨时钟域信号、亚稳态、建立保持时间这几个概念混在一起使用。本节先把这些概念拆开,再建立它们与真实告警之间的对应关系。

一、时钟域:同步的边界,而不是时钟名字

时钟域(Clock Domain)是指由同一个时钟源驱动、且彼此之间具有确定相位与频率关系的一组时序单元。判断两个寄存器是否属于同一时钟域,不能只看时钟端口名字是否相同,而要看它们是否来自同一个根时钟、是否经过同一组分频/倍频/门控路径,以及是否存在确定的相位对齐关系。

常见的时钟域关系有三类:

  • 同步同频同相:同一 PLL 输出直接扇出,属于同一时钟域,普通建立保持检查即可覆盖。
  • 同步但频率/相位不同:同源分频或倍频,仍属同步关系,但需要多周期路径(MCP)约束。
  • 异步:来自不同晶振、不同 PLL,或虽同源但相位关系不确定,必须按跨时钟域处理。
判断口诀:先看根时钟,再看相位关系,最后才看频率。频率相同不代表同步,频率不同也不一定异步。

二、跨时钟域信号与亚稳态

跨时钟域信号(CDC Signal)是指从发送时钟域进入接收时钟域、且两个时钟之间没有确定相位关系的信号。由于接收端触发器在采样瞬间可能正好落在数据跳变窗口内,其输出会进入既非 0 也非 1 的中间电平,这就是亚稳态(Metastability)。

亚稳态不会永久保持,它会在一定时间内随机衰减到稳定值,但衰减时间不可预测。若在衰减完成前被下游逻辑采样,就会产生不可复现的功能错误。因此 CDC 处理的核心目标不是“消除亚稳态”,而是给亚稳态足够的衰减时间,并阻止其传播。

下图展示了发送域、接收域、亚稳态窗口与两级同步器之间的关系:

跨时钟域信号采样与两级同步器 发送时钟域 clk_a 源寄存器 FF_A 数据在 clk_a 沿更新 相位与 clk_b 无关 data_a 接收时钟域 clk_b 同步级 1 同步级 2 亚稳态在此衰减 MTBF 由两级共同决定 data_b 下游逻辑 功能采样 只看到稳定值 不再受亚稳态影响 采样窗口 = 建立时间 + 保持时间

三、建立时间与保持时间:亚稳态的物理来源

建立时间(Setup Time, Tsu)是数据必须在时钟有效沿之前保持稳定的最短时间;保持时间(Hold Time, Th)是数据必须在时钟有效沿之后继续保持稳定的最短时间。两者共同构成触发器的采样窗口。

当数据跳变落在采样窗口内,触发器内部无法在有限增益下快速判决,输出进入亚稳态。因此,建立/保持违例是亚稳态的直接诱因,而跨时钟域只是让这种违例变得不可预测且无法通过约束完全消除。

建立时间检查:T_clk - T_setup_uncertainty - T_skew >= T_co + T_logic + T_su
保持时间检查:T_co + T_logic >= T_h + T_skew

跨时钟域场景:
  T_clk 与 T_su/T_h 的关系不确定
  → 静态时序分析无法给出有意义的通过/失败结论
  → 必须改用 CDC 检查 + 同步器结构保证

四、时序告警的基本术语与常见场景

时序告警是工具在静态时序分析(STA)或 CDC 检查中给出的违例提示。理解告警名称背后的检查类型,是定位的第一步。下表列出常见术语与典型场景:

术语 含义 常见场景
Setup Violation 数据到达太晚,未满足建立时间 组合逻辑过长、时钟频率过高
Hold Violation 数据变化太早,未满足保持时间 短路径、时钟偏斜过大
CDC Violation 跨时钟域信号缺少同步结构 单比特直接跨域、多比特未做握手
Unconstrained Path 路径未被任何时钟约束覆盖 遗漏 create_clock、虚假路径未声明
Recovery / Removal 异步复位释放相对时钟沿的时序检查 复位同步器缺失、复位释放过晚
MTBF 平均无故障时间,衡量同步器可靠性 同步级数不足、时钟频率过高

五、案例:一个被误判的 CDC 告警

某设计中,工具报告 data_valid 从 clk_core 到 clk_io 存在 CDC 违例。工程师第一反应是“加两级同步器”,但复查后发现:data_valid 是单比特电平信号,加两级同步器后功能正常;真正的问题在于同一组 8 位数据总线 data_bus[7:0] 也直接跨域,且未做任何握手或格雷码处理。

如果只修 data_valid,总线仍会在接收端出现多位同时跳变、采样到中间组合值的风险。正确做法是:

  1. 确认 data_bus 是否在发送域保持稳定足够长时间;
  2. 若不能保证,改用握手同步或异步 FIFO;
  3. 对 data_valid 使用两级同步器,并确保其与总线之间的时序关系被约束;
  4. 在 CDC 约束文件中显式声明跨域路径与同步结构。
常见误区:把“跨时钟域”等同于“加两级触发器”。两级同步器只适用于单比特电平信号;多比特数据、脉冲信号、复位信号需要不同的同步策略。

六、复盘:术语清晰才能定位准确

回到告警定位本身,工程师需要建立一条清晰的判断链:先判断两个寄存器是否属于同一时钟域,再判断信号是否真正跨域,接着判断跨域信号类型(单比特/多比特/脉冲/复位),最后才选择同步结构并检查约束是否完整。任何一步混淆,都会导致“改了 RTL 但告警仍在”或“告警消失但功能出错”。

本节的核心结论可以归纳为三点:时钟域的本质是相位关系而非时钟名;亚稳态的根源是建立/保持窗口内的采样;时序告警的名称直接对应检查类型,读懂术语才能选对修复手段。掌握这些基础,后续的告警定位、约束审查与 RTL 修复才有稳定的判断依据。