2. CDC验证的工程目标与风险地图

CDC验证的工程目标不是“把同步器都跑一遍仿真”,而是要在流片前回答一个更本质的问题:当信号从一个时钟域进入另一个时钟域时,系统是否仍然保持功能正确、数据完整、状态可控?在Agilex这类多时钟、多电压域、含大量硬核IP的器件中,跨域路径往往分散在用户逻辑、HPS接口、收发器通道、DSP流水线和外设桥之间,任何一处处理不当,都可能在实验室表现为“偶发死机”“数据偶尔错一位”“复位后状态卡死”等难以复现的故障。因此,验证计划必须建立在一张清晰的风险地图上:先识别失效模式,再针对每种模式设计可观测、可判定、可覆盖的验证手段。

五类核心失效模式及其物理机理

亚稳态(Metastability)是最基础的跨域风险。当源域信号在目的域触发器的建立/保持窗口内跳变时,触发器输出可能在一段时间内停留在既非0也非1的中间电平,随后才随机收敛。若该不稳定输出被多个目的域负载直接使用,不同负载可能在不同周期采到不同值,形成“同一信号、多种解释”。亚稳态无法被消除,只能通过同步器把MTBF(平均无故障时间)提升到可接受水平。验证要关注的不是“是否出现亚稳态”,而是“同步器结构是否正确、是否被综合/布局布线破坏、MTBF是否满足系统要求”。

数据丢失(Data Loss)发生在多比特或事件型跨域中。典型场景是源域连续产生两个脉冲,而目的域采样时钟频率低于源域,或源域脉冲宽度小于目的域时钟周期,导致某个脉冲在目的域被完全“跳过”。另一种常见形式是使能信号与数据总线分离同步:使能已到达目的域,但数据仍在同步器中延迟,目的域采到旧数据或空数据。

数据相干性破坏(Data Coherence)针对多比特总线。若对总线各比特分别打两拍同步,由于各比特路径延迟和亚稳态收敛时间不同,目的域可能采到“半新半旧”的组合值。例如源域从0x0F变为0xF0,目的域可能采到0x00、0xFF等从未在源域出现过的非法码字。对地址、状态机编码、配置字而言,这种破坏比单纯丢一位更危险。

复位跨域(Reset Domain Crossing)是常被低估的风险。若异步复位在目的域时钟边沿附近释放,触发器可能进入亚稳态,或不同触发器在不同周期退出复位,导致状态机进入非法状态。更隐蔽的是“复位同步器缺失”:源域复位直接驱动目的域逻辑的异步复位端,而释放沿未做同步,综合工具可能将其优化为不同路径,造成局部先复位、局部后复位。

脉冲跨域(Pulse Crossing)是数据丢失的特例,但工程上常单独处理。源域单周期脉冲若直接进入目的域同步器,当目的域时钟较慢时,脉冲可能落在两个采样沿之间而完全丢失。正确做法是先将脉冲展宽为电平翻转(toggle),在目的域同步后再还原为单周期脉冲,或使用握手/异步FIFO传递事件。

CDC风险地图:失效模式 → 验证手段 → 覆盖判据 源时钟域 CLK_A 100 MHz 单比特控制信号 多比特数据总线 单周期脉冲事件 异步复位源 状态机编码 目的时钟域 CLK_B 156.25 MHz 同步后控制 相干数据总线 事件脉冲还原 同步复位释放 合法状态接收 跨域风险与验证手段 ① 亚稳态 双触发器同步器 / MTBF计算 / 时序约束 验证:CDC静态检查 + 门级仿真 + 约束审查 ② 数据丢失 脉冲展宽 / 握手 / 异步FIFO 验证:慢时钟采样、连续事件计数比对 ③ 数据相干性破坏 格雷码 / 握手 / 保持寄存器 验证:非法码字监测、总线一致性断言 ④ 复位跨域 复位同步器 / 异步置位同步释放 验证:复位释放时序、状态机恢复检查 ⑤ 脉冲跨域 Toggle同步 / 脉冲展宽 / 事件FIFO 验证:脉冲计数、丢失/重复检测 覆盖判据:CDC路径100%识别 · 同步器结构合规 · 无非法码字 · 事件计数守恒 · 复位释放无亚稳态 · MTBF满足系统指标

验证计划如何覆盖这些风险

风险地图建立后,验证计划应形成“静态检查—结构验证—动态仿真—时序约束—覆盖率闭环”的多层防线,而不是只依赖某一种手段。

第一层:CDC静态结构检查。使用综合或专用CDC工具(如Quartus/Questa CDC、SpyGlass CDC)扫描设计,识别所有跨域路径,并检查每条路径是否被合法同步器覆盖。关键输出包括:未同步的跨域路径列表、同步器类型(双触发器、握手、FIFO、脉冲同步)、多比特总线是否使用格雷码或握手、复位是否经过同步器。对Agilex设计,还需特别检查HPS与FPGA逻辑之间、收发器恢复时钟与系统时钟之间的跨域路径是否被工具正确识别。

第二层:结构断言与形式验证。对同步器本身建立SVA断言,例如:同步器第一级输出不得直接驱动组合逻辑;多比特总线在目的域必须整体稳定至少两个目的时钟周期;异步FIFO的读写指针必须使用格雷码且空满标志不得同时有效。形式验证可证明这些结构约束在所有输入下成立,弥补仿真覆盖不足。

第三层:动态仿真与故障注入。在仿真中构造源域与目的域的频率组合(如100 MHz对156.25 MHz、100 MHz对33 MHz),并注入以下场景:源域脉冲宽度小于目的域周期、源域总线在目的域采样窗口内跳变、复位在目的域时钟边沿附近释放、源域连续事件间隔小于目的域采样周期。观察目的域是否出现非法码字、事件计数是否守恒、状态机是否进入非法状态。对亚稳态,可在门级仿真中通过SDF反标和随机延迟注入,观察同步器输出是否被正确隔离。

第四层:时序约束与MTBF核算。CDC路径必须设置set_false_path或set_max_delay -datapath_only,避免时序引擎对跨域路径做无意义的建立/保持分析,同时保证同步器第一级到第二级的延迟可控。MTBF可按MTBF = e^(t_r/τ) / (T_0 × f_clk × f_data)估算,其中t_r为可用收敛时间,τ和T_0来自器件工艺参数。对Agilex,应使用厂商提供的MTBF计算器或工艺库参数,确保在目标频率和数据翻转率下MTBF远大于系统寿命。

第五层:覆盖率闭环。CDC验证的覆盖率不应只看代码行覆盖率,而应建立跨域专项覆盖:每条CDC路径是否被至少一个仿真场景激活;每种同步器类型是否被验证;每种失效模式是否被注入并观察到预期保护行为;复位跨域是否覆盖所有复位释放时序组合。只有这些专项覆盖率达到100%,才能认为风险地图被完整覆盖。

工程建议:在项目早期就建立CDC风险清单,把每条跨域路径的源域、目的域、信号类型、同步方案、验证手段、责任人、状态记录在案。随着设计迭代,清单同步更新,避免后期“补同步器”导致面积和时序连锁反应。