1. 多时钟SoC仿真与CDC验证全景

现代SoC几乎不存在单时钟设计。一颗典型的移动SoC里,CPU簇跑在2.0GHz,GPU在800MHz,DDR控制器在1600MHz,USB PHY在480MHz,I2C只有400kHz,再加上RTC的32.768kHz。这些时钟来自不同PLL、不同分频器,彼此相位和频率毫无固定关系。当信号从一个时钟域传到另一个时钟域时,就产生了跨时钟域(CDC, Clock Domain Crossing)问题。本节要建立的是全局认知:多时钟域仿真到底难在哪里、CDC验证要证明什么、Xcelium在其中扮演什么角色,以及从RTL到门级网表(GLS)的验证流程如何组织。

一、多时钟域仿真的三个核心挑战

第一个挑战是时钟建模的真实性。如果仿真中把两个异步时钟设成同频同相,CDC问题会被完全掩盖——亚稳态不会出现,同步器失效也看不出来。因此必须为每个时钟域定义独立的周期、相位偏移和抖动模型。例如:

// 典型多时钟激励建模(示例参数)
clk_cpu  : period = 0.5ns  (2.0GHz), phase = 0
clk_gpu  : period = 1.25ns (800MHz), phase = 0.3ns
clk_ddr  : period = 0.625ns(1.6GHz), phase = 0.17ns
clk_usb  : period = 2.083ns(480MHz), phase = 0.9ns
clk_rtc  : period = 30517.6ns(32.768kHz), phase = 0

第二个挑战是仿真性能。多时钟意味着事件密度成倍增加,一个包含数十个时钟域的SoC,RTL仿真可能跑几天才覆盖几毫秒。第三个挑战是亚稳态不可见。真实硅片中,触发器在建立/保持窗口内采样会产生亚稳态,输出在0和1之间振荡一段时间后才稳定。而标准RTL仿真器是二值或四值逻辑,无法自然表达这种中间态,必须借助专门的CDC检查工具或SDF反标来近似。

二、CDC验证的目标:不是“跑通”,而是“证明安全”

CDC验证的核心目标可以归纳为三条:结构正确——每个跨域信号都有合法的同步结构;协议正确——多比特信号传递时不会出现数据撕裂;时序收敛——同步器后的时序路径满足目标时钟域约束。常见的CDC结构包括两级触发器同步器(用于单比特电平信号)、脉冲同步器、握手同步器、异步FIFO(用于多比特数据流)以及格雷码计数器(用于指针传递)。

验证时要回答的具体问题包括:跨域信号是否经过了至少两级同步?同步器是否被综合工具正确识别并加了ASYNC_REG属性?多比特总线是否用了格雷码或握手?异步FIFO的读写指针是否真的跨域同步?复位信号跨域时是否做了复位同步?这些问题在RTL阶段靠CDC静态检查工具发现,在仿真阶段靠定向激励和断言验证。

三、Xcelium工具链的定位

Xcelium是Cadence的并行仿真引擎,在多时钟SoC验证中承担三个角色。第一是高性能仿真内核:它支持多核并行编译与仿真,对多时钟域设计的事件调度做了优化,能显著缩短长仿真时间。第二是与CDC检查工具集成:Xcelium可以与Cadence的CDC静态分析工具(如Conformal CDC)配合,把静态检查发现的跨域路径导入仿真环境,生成针对性的激励。第三是支持GLS流程:Xcelium能读取SDF文件进行时序反标,在门级网表仿真中暴露真实的建立/保持违例和亚稳态传播。

Xcelium的-mce选项可以启用多核仿真,-sdf选项用于GLS时序反标,-cdc相关流程则与静态检查工具联动。具体选项名以所用版本手册为准。

四、从RTL到GLS的验证流程

完整的CDC验证流程分为四个阶段。第一阶段是RTL功能仿真:用定向测试和随机测试验证同步器逻辑功能正确,配合SVA断言检查跨域信号是否满足同步协议。第二阶段是CDC静态检查:用工具扫描所有跨域路径,识别未同步、同步不足、多比特撕裂等结构问题,输出CDC报告。第三阶段是带时序的RTL仿真:在RTL中反标部分时序信息或使用CDC模型,模拟亚稳态传播效果。第四阶段是GLS门级仿真:用综合后的网表和SDF文件,在真实门延时下验证同步器是否满足时序,这是最接近硅片行为的验证。

下面这张图展示了多时钟域SoC中典型的CDC信号链与验证流程的对应关系。左侧是三个异步时钟域及其跨域信号路径,右侧是Xcelium在各验证阶段的作用。图中标注了同步器结构、跨域信号类型以及每个阶段要检查的关键点。

多时钟域SoC的CDC信号链与Xcelium验证流程 CPU 时钟域 clk_cpu = 2.0 GHz 控制寄存器 数据总线 GPU 时钟域 clk_gpu = 800 MHz 状态机 FIFO写口 DDR 时钟域 clk_ddr = 1.6 GHz FIFO读口 PHY接口 2级触发器同步器 单比特电平信号 ASYNC_REG 属性 异步FIFO 多比特数据流 格雷码指针 握手同步器 req/ack 协议 防数据撕裂 Xcelium 验证流程 ① RTL 功能仿真 定向/随机激励 + SVA断言 检查同步器逻辑功能与协议 ② CDC 静态检查 扫描跨域路径,识别未同步/同步不足 输出CDC报告,定位多比特撕裂风险 ③ 带时序的RTL仿真 反标部分时序/CDC模型 模拟亚稳态传播与恢复 ④ GLS 门级仿真 网表 + SDF时序反标 验证建立/保持违例与同步器时序 Xcelium 多核并行引擎贯穿四个阶段

五、一个具体的CDC验证场景

假设CPU域要向GPU域传递一个32位配置字。如果直接用两级触发器同步32根线,由于每根线的延时不同,GPU域可能采到“半新半旧”的值,这就是数据撕裂。正确做法是:CPU域先把数据写入一个寄存器,拉高req信号;req经过两级同步器进入GPU域;GPU域检测到同步后的req后,用GPU时钟采样整个32位数据总线,然后拉高ack;ack再同步回CPU域,CPU看到ack后才更新下一笔数据。这个握手过程在RTL仿真中要验证:req和ack不会同时有效、数据在req稳定前不会变化、同步器输出不会出现毛刺。在GLS中还要验证:两级触发器的建立时间是否满足,SDF反标后是否出现时序违例。

CDC问题在RTL仿真中往往“看起来正常”,因为RTL没有真实延时。真正的风险在硅片上才暴露。因此CDC静态检查和GLS是必不可少的环节,不能只用RTL仿真通过就认为CDC安全。

六、验证流程的组织要点

组织多时钟SoC验证时,建议按以下顺序推进:先建立完整的时钟定义文件,确保每个时钟域的周期、相位、抖动都有明确来源;再用CDC静态检查工具做全芯片扫描,生成跨域路径清单;然后针对每条高风险路径编写定向测试和断言;最后在GLS阶段用SDF反标验证时序。Xcelium的并行仿真能力在最后两个阶段尤其关键,因为GLS的仿真速度通常比RTL慢一个数量级,多核加速能显著缩短回归时间。

需要强调的是,CDC验证不是一次性的任务,而是贯穿RTL、综合、布局布线、GLS的持续过程。每次时钟结构变更、每次跨域信号增减,都需要重新跑CDC检查。只有把静态检查、动态仿真和门级时序验证三者结合,才能对多时钟域SoC的CDC安全性建立足够的信心。