第三章CDC/RDC 时钟域与复位域交叉验证

CDC 基本概念

时钟域交叉是指信号从一个时钟域传递到另一个时钟域的情况。当两个时钟是异步的或频率/相位不同时,如果没有正确的同步,会导致亚稳态(metastability)问题。

时钟域(Clock Domains)

设计中由同一个时钟驱动的寄存器属于同一个时钟域。SoC 通常包含多个时钟域(如 CPU 时钟、总线时钟、外设时钟等)。

亚稳态(Metastability)

当触发器的建立/保持时间不满足时,输出可能进入亚稳态——既不是 0 也不是 1。在跨时钟域路径上,如果没有同步器,亚稳态可能传播导致功能错误。

Glitch(毛刺)

跨时钟域的组合逻辑路径可能产生毛刺,在目标时钟域被错误采样。CDC 信号应该直接通过寄存器输出,不应经过组合逻辑。

数据一致性(Data Coherency)

多 bit 信号跨时钟域时,即使每个 bit 都同步了,由于各个 bit 的延迟不同,目标时钟域可能采样到不一致的数据。

RDC(Reset Domain Crossing)

复位域交叉类似于 CDC,但发生在不同复位域之间。

CDC/RDC 概念示意
CDC/RDC 概念示意

常见同步方案(Synchronization Schemes)

控制信号同步

数据信号同步

复位同步方案

CDC App 工作流程

  1. CDC Configuration:配置时钟、复位和 CDC 参数
  2. Structural Analysis(结构分析):自动检测跨时钟域路径,识别同步器
  3. Functional Analysis(功能分析):验证同步器协议正确性
  4. Metastability Analysis(亚稳态分析):注入亚稳态,验证设计的容错性

CDC 意图捕获(Capturing CDC Intent)

时钟声明

# 声明时钟
clock -clk {clk1 clk2} -module top

# 声明异步时钟关系
clock -async -group {clk1} -group {clk2}

复位声明

reset -rst {rstN} -active_low -async

路径参数配置

通过 CDC Rules File 或命令配置路径参数:

用户自定义同步器

# 基于模块的同步器
cdc_synchronizer -module sync2ff -din d -dout q -clk clk -rst_n rstN

# 基于实例的同步器
cdc_synchronizer -instance top.u_sync -din d -dout q -clk clk

# 自定义同步器
cdc_synchronizer -type user_sync -din data_in -dout data_out

运行 CDC 分析

结构分析

# 运行 CDC 结构检查
check_cdc -structural

# 运行 RDC 结构检查
check_rdc -structural

功能分析(Protocol Check)

# 在 Formal 模式下运行协议检查
check_cdc -protocol -formal

# 在 Simulation 模式下运行协议检查
check_cdc -protocol -sim

亚稳态注入(Metastability Injection, MSI)

# Formal 模式 MSI
check_cdc -msi -formal

# Simulation 模式 MSI
check_cdc -msi -sim

调试 CDC 违规

Waiver 管理

# 单个违规豁免
waive_cdc -violation <id> -reason "2-FF synchronizer present"

# 成组豁免
waive_cdc -group <group_name>

# 按层级豁免
waive_cdc -hierarchy top.submodule

# 条件豁免(表达式)
waive_cdc -condition {mode == TEST}

# 自动/安全豁免流程
check_cdc -auto_waive

Waiver 可以导出/导入,便于团队协作和回归管理。

附录概要

CDC/RDC 更多界面截图

CDC 验证方法论

为什么传统仿真难以发现 CDC 问题

跨时钟域(CDC)问题的根本原因是亚稳态(metastability):当信号在一个时钟域变化、被另一个时钟域采样时,如果变化恰好落在采样时钟的建立/保持时间窗口内,输出端会进入亚稳态。亚稳态是物理现象,RTL 仿真使用 0/1/X 三值模型,无法真实模拟亚稳态行为。因此:

三级验证各解决什么问题

级别检查内容能发现不能发现
Structural(结构检查)识别跨域路径、同步器结构完全缺少同步器的路径同步器逻辑本身有 bug(如使能信号错误)
Protocol(协议检查)验证同步器行为正确同步器设计错误、握手协议违规亚稳态穿透同步器传播
MSI(亚稳态注入)在同步器第一级注入 X,验证不传播同步器不足以阻止亚稳态传播——(最严格的检查)
建议:不要只做 Structural 检查就 signoff。Structural 只确认"有同步器",Protocol 确认"同步器对不对",MSI 确认"同步器能拦住亚稳态"。三级都通过才算 CDC 验证完成。

CDC 验证常见误区

Waiver 策略

什么时候可以 waive CDC 违规?

来源文档

  • jaspergold_cdc_userguide.pdf
  • jaspergold_cdc_reference.pdf
  • example_jaspergold_apps/CDC/