CDC豁免说明文档模板:三要素把每条跨时钟例外写清楚
在 芯片验证 中,CDC(Clock Domain Crossing,跨时钟域)检查报告里总会剩下一些需要人工解释的路径。这份 CDC 豁免说明文档模板用于记录这些结论:某条路径为什么可以例外、依据是什么、谁承担复审责任。它与 验证计划模板 配套使用,但不替代功能验证,也不负责把警告状态改成通过。
最容易写坏的豁免只有一句「已加两级同步器,风险可接受」。它既没证明数据不会丢采样,也没指定设计变化后由谁重新判断。可审计的 waiver(豁免)必须把理由、证据、复审人绑在同一条路径上。
本文要回答的问题
- 一条 CDC 豁免至少要记录哪些路径信息,才能和报告逐项对应?
- 哪些情形可以申请豁免,哪些警告必须回到设计中修复?
- 同步器、握手协议和稳定性约束分别需要什么证据?
- 怎样写残余风险、失效条件和复审责任,避免豁免永久有效?
一、豁免不是消警告,而是一份有边界的技术承诺
CDC 工具根据结构识别风险,却未必理解项目协议。例如,配置总线没有逐位同步,但发送端承诺更新期间保持数据稳定,接收端只在同步后的请求到达时采样,这需要协议证据。豁免只表示「当前假设下无需按同一规则整改」,不代表「跨时钟传输绝对安全」。
读这张图要抓住三者的依赖关系:没有理由就不知道该证明什么,没有证据就只剩主观判断,没有复审人则证据过期后仍会被沿用。三栏必须同时成立;「工具没报错」「以前一直这样做」不属于任何一栏的有效内容。
| 情形 | 推荐处置 | 需要说明的重点 |
|---|---|---|
| 单比特控制信号,已有合适同步器 | 按项目规则判断是否需要记录豁免 | 同步级数、目标时钟、复位行为、脉冲宽度 |
| 多比特数据配合请求—应答握手 | 可申请有边界的协议类豁免 | 数据稳定窗口、采样点、应答与反向更新约束 |
| 准静态配置,运行期承诺不变 | 可申请配置类豁免 | 配置窗口、修改流程、违反承诺时的处置 |
| 异步复位释放 | 单独分析,不能套用数据同步结论 | 各时钟域释放顺序、复位同步与恢复条件 |
| 多比特总线各自加同步器 | 通常应修改设计 | 位间偏斜可能拼出从未发送过的组合值 |
| 单比特脉冲直接跨域 | 通常应修改设计 | 目标时钟可能漏采,毛刺也可能被采成有效电平 |
二、完整模板:一条豁免一份记录
下面内容可直接复制为项目中的 cdc-waiver-<ID>.md。尖括号全部替换;没有证据的字段保持「待补」,不要为了格式完整而写成「无风险」。报告编号、约束版本和代码版本是关联信息的占位,不应虚构。
# CDC-WAIVER-<ID>:<路径一句话说明>
## 1. 基本信息
- 当前状态:草稿 / 评审中 / 已批准 / 已撤回
- 设计负责人:<角色占位>;验证负责人:<角色占位>
- RTL 版本:<提交号>;CDC 规则与约束版本:<版本标识>
- 关联需求或接口规范:<文档章节>
- 申请日期:<YYYY-MM-DD>;到期复审日:<YYYY-MM-DD>
## 2. 跨时钟路径标识
- 源时钟域 / 源寄存器:<clock_a> / <完整层级路径>
- 目标时钟域 / 目标采样点:<clock_b> / <完整层级路径>
- 信号宽度与方向:<N> bit,<源模块> → <目标模块>
- CDC 工具规则与报告条目 ID:<规则名> / <原始条目 ID>
- 同组路径:<逐项列出;不同安全假设不得合并>
## 3. 业务行为与豁免分类
- 信号用途:<控制 / 配置 / 数据 / 状态>
- 预期传输行为:<电平、脉冲、单次更新或连续流>
- 分类:同步单比特控制 / 握手保护多比特数据 /
准静态配置 / 其他(必须展开理由)
- 申请豁免的理由:<工具结构判断与已定义协议之间的差异>
- 本豁免不覆盖:<毛刺、丢脉冲、位间偏斜、复位等其他风险>
## 4. 安全机制与证据
- 同步器证据:<实例路径、级数、目标时钟、专用单元或约束>
- 握手证据:<请求、应答、采样使能之间的协议说明及位置>
- 稳定性证据:<源数据从何时保持到何时;谁负责保证>
- 验证证据:<断言、形式验证、仿真场景或评审记录的定位信息>
- 实现约束:<最大延迟、总线偏斜、伪路径或静态路径约束的依据>
- 证据适用范围:<对应 RTL 版本、工作模式和假设条件>
## 5. 残余风险与失效条件
- 已接受风险:<仍可能出现的行为及其系统影响>
- 监控或缓解措施:<断言、错误检测、软件限制等>
- 立即复审触发器:路径或协议变化、时钟复位变化、同步器替换、
CDC 规则升级、约束变化、证据无法复现
- 失效处置:撤回豁免并恢复告警,创建设计整改项,不得顺延默认放行
## 6. 评审与批准
| 角色 | 责任 | 结论 | 日期 |
|---|---|---|---|
| <设计角色> | 确认路径、协议和设计假设 | <同意/驳回> | <日期> |
| <验证角色> | 确认证据覆盖适用范围 | <同意/驳回> | <日期> |
| <CDC批准角色> | 接受残余风险并批准期限 | <同意/驳回> | <日期> |
- 评审意见与整改项:<逐条记录>
- 下次复审人:<角色占位>;复审结论:<维持/修改/撤回>模板中的「同组路径」尤其要克制。只有源和目的、协议、稳定窗口、失效影响都一致的路径才可成组;把整份报告压成一个 waiver,会让复审无法定位变化,也无法按单条路径撤回。
三、填写示范:握手保护的两位配置更新
以下是一个虚构填写示例,只演示字段之间的关系,不代表任何工具结果或项目批准记录。场景是低速配置域向数据通路域更新两位模式值:源端先保持 mode,再发送请求;目标端同步请求后采样;源端收到同步应答前不得再次修改。
# CDC-WAIVER-CFG-01:两位模式配置经请求—应答握手跨域
- 源路径:u_cfg/mode_q[1:0];目标采样点:u_core/mode_d[1:0]
- 方向:cfg_clk → core_clk;信号宽度:2 bit
- 分类:握手保护多比特数据
- 理由:总线不逐位同步;模式值只在协议规定的稳定窗口内被采样。
- 握手证据:u_cfg/update_req 与 u_core/update_ack 遵循四相握手;
core_clk 域仅在同步后的请求有效边沿采样模式值。
- 稳定性证据:源端从拉高请求起保持 mode,直到收到同步应答;
接口断言检查请求等待期间 mode 不变。
- 不覆盖:update_req 自身的脉冲完整性、复位释放、实现后的总线偏斜;
这些项目分别保留独立检查。
- 残余风险:若软件绕过更新接口直接写配置,稳定窗口假设失效;
该写路径必须禁用,违反断言时不得沿用本豁免。
- 复审触发器:握手状态机、配置写入方式、时钟复位或总线约束任一变化。
- 到期复审日:<YYYY-MM-DD>;下次复审人:<CDC负责人角色>。这份示范没有写「因为有同步器,所以总线安全」。真正保护 mode[1:0] 的是稳定窗口加受控采样点,同步器只保护请求和应答控制信号。若两位数据分别穿过同步器,即使每一位最终都正确,也可能在不同周期到达目标域,组合成短暂或持久的错误模式;这类结构不能拿本示例套豁免。
证据还要回答:目标端未准备好时怎么办,复位后协议如何恢复,任一时钟暂停时稳定承诺是否成立。回答不了就补充验证,而不是把残余风险写成「概率很低」。
四、审批后的生命周期与常见退回项
豁免批准不是终点。下面流程中,红色表示原始问题,蓝色表示分析,橙色表示需要落实的动作,绿色表示具备批准条件,紫色表示长期复审责任。
读图时重点看两个回环:证据不足必须回到整改,不能靠批准跳过;每次复审都重新进入路径归类,因为原来成立的理由可能已不适用于新结构。批准只表示在明确期限和假设下接受残余风险,不会删除原始告警及其历史。
常见退回项包括:路径找不到层级;分类只有「异步信号」;证据未解释如何覆盖风险;残余风险写「无」;批准人与复审人留空;到期仅修改日期。复审必须核对当前代码、约束和证据,不能复制上次结论。
这一篇在知识体系里的位置
本文的 CDC 豁免说明文档模板解决跨时钟结论的可追溯性,上游可结合 验证计划模板:从 Spec 到覆盖率收口 安排协议断言和边界场景,下游则纳入 验证签核标准方法论 的例外清单。若项目使用 UVM 环境验证握手行为,可在 UVM 测试平台架构 对应的接口监测与断言位置登记证据。
总结
一份合格的 CDC 豁免说明文档模板,应当把每条跨时钟路径的业务行为、豁免分类、同步器或握手证据、残余风险、到期日和批准角色连成闭环。核心纪律是:waiver 不是把警告改成通过,「有同步器」也不能豁免多比特位间偏斜、毛刺或丢脉冲;只有证据覆盖明确边界、风险有人接受、变化有人复审,豁免才可暂时成立。