RDC复位域跨域验证技术教程 - 第2节
2.1 为什么先理解复位?从验证视角看“起点稳定性”
在跨时钟域(CDC)验证中,复位是设计进入确定性初始状态的首要前提;而在复位域跨域(RDC)验证中,需要额外确认:跨域路径两端是否处于同一复位域?复位释放顺序是否正确?是否存在异步复位导致的亚稳态传播?这些问题,都建立在“同步复位 vs 异步复位”和“复位信号特性”这两个基础之上。
2.2 核心概念:三种基础复位方式
| 复位方式 | 触发条件 | 信号要求 | 典型场景 |
|---|---|---|---|
| 同步复位 | 仅在时钟有效沿到来时接收复位 | 复位信号需要满足时钟沿建立/保持时间 | 集成设计中局部逻辑复位,偏好DFT/ATPG的设计 |
| 异步复位 | 复位有效信号立即触发,无需等待时钟沿 | 对复位释放时机敏感,存在恢复/移除时间约束 | 芯片级全局复位、低功耗快速唤醒逻辑 |
| 异步复位同步释放 | 置位异步生效,释放通过同步器与目标时钟同步 | 释放沿对齐目标时钟域,规避亚稳态 | 主流SoC多时钟域复位树设计 |
RDC验证视角的结论: 复位域验证最关注的是“异步复位同步释放”结构,因为它同时涉及复位跨域和时钟跨域,是复位信号特性与CDC交汇的核心场景。
2.3 原理机制:复位信号在跨域中的关键特性
2.3.1 同步复位:与时钟强绑定
同步复位逻辑相当于把复位当作一种特殊的“数据输入”,其动作必须出现在时钟有效沿。因此复位信号与时钟之间天然存在时序关系(建立保持),在CDC验证中通常不会引入复位引入的亚稳态;但复位信号若来自异步时钟域,则必须先经过同步器,否则会产生“数据沿”违规。
2.3.2 异步复位:置位即时、释放危险
异步复位的主要问题不在“置位”,而在“释放”。如果复位释放时刻靠近时钟有效沿,触发器输出可能进入亚稳态——这种亚稳态通过复位树传播到多个触发器,会造成大范围数据不稳定。
// 异步复位同步释放(推荐写法)
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
rst_sync_1 <= 1'b0;
rst_sync_2 <= 1'b0;
end else begin
rst_sync_1 <= 1'b1;
rst_sync_2 <= rst_sync_1;
end
end
assign rst_sync_n = rst_sync_2;
2.3.3 复位信号的核心参数
| 参数 | 定义 | 验证关注点 |
|---|---|---|
| 恢复时间 Recovery | 复位释放沿到下一个时钟有效沿的最短时间 | 约束检查:释放沿与时钟沿可能形成竞争 |
| 移除时间 Removal | 时钟有效沿到复位释放沿的最短时间 | 约束检查:释放沿如果在时钟后过近,触发亚稳态 |
| 复位同步延迟 | 从复位释放到全部寄存器退出复位态的传播延迟 | 多级同步器的级数验证;跨域同步后的对齐性检查 |
| 复位树偏斜 | 复位叶子节点之间的释放时间差 | 影响多异步时钟域协同恢复的确定性 |
2.4 复位策略流程图:如何选择与验证
下面这张图给出 RDC 验证中的复位策略判断路径:从复位源出发,识别复位类型,明确是否异步释放,并最终落入验证方法。
流程图说明: 在“复位类型判断”节点中,如果判断为异步复位,则必须继续检查“释放路径”是否存在同步器;若存在同步器,还应进一步确认同步器是否使用目标时钟域的时钟,否则视为复位域冲突。
2.5 案例说明:异步复位同步释放典型场景
假设一个子系统同时使用 clk_a 和 clk_b 两个异步时钟,全局复位 rst_n 为异步复位源。设计上为每个时钟域分别做 rst_sync 同步释放,模块内部的同步逻辑代码已在上文给出。RDC验证时需要重点检查:
clk_a域产生的复位同步器释放沿,是否被clk_b域逻辑直接使用;- 两域复位释放先后顺序是否影响跨域握手信号(例如 ready/valid 被复位释放后过早置位);
- 复位释放沿是否通过组合逻辑形成额外 PLL 门控或时钟门控条件。
2.6 同步复位与异步复位:综合对比表
| 对比维度 | 同步复位 | 异步复位 |
|---|---|---|
| 时钟依赖 | 必须有时钟 | 无需时钟可置位 |
| 复位释放 | 天然对齐时钟沿 | 易产生释放亚稳态 |
| DFT友好性 | 较高,便于scan插入 | 需要额外release逻辑 |
| 毛刺过滤 | 可被时钟采样过滤 | 毛刺直接触发复位 |
| RDC验证重点 | 同步器跳变对齐检查 | 恢复/移除时间约束与释放同步器 |
| 低功耗优势 | 复位释放功耗波动集中 | 快速唤醒,减少时钟等待 |
2.7 误区提醒
误区1:异步复位信号可以在所有时钟域直接使用。
实际上异步复位信号在不同时钟域使用时,必须分别做同步释放;否则释放沿进入不同时钟域时,可能在一个域已释放、另一个域未释放,形成长时间“复位态不一致”。
实际上异步复位信号在不同时钟域使用时,必须分别做同步释放;否则释放沿进入不同时钟域时,可能在一个域已释放、另一个域未释放,形成长时间“复位态不一致”。
误区2:只用功能仿真就能验证复位释放。
功能仿真默认 0 延迟,无法体现恢复/移除时间竞争;必须使用门级仿真、形式化验证或基于断言的CDC/RDC工具检查释放路径时序关系。
功能仿真默认 0 延迟,无法体现恢复/移除时间竞争;必须使用门级仿真、形式化验证或基于断言的CDC/RDC工具检查释放路径时序关系。
2.8 实践清单:复位基础检查要点
- 【识别】列出所有复位源,标注是否为异步复位;
- 【检查】为每个时钟域确认是否存在复位同步器;
- 【验证】检查复位释放路径上的同步器是否使用目标时钟域的时钟;
- 【约束】为每个异步复位配置恢复/移除时间断言;
- 【交叉】确认跨异步时钟域的握手信号在复位释放后的时序是否满足协议;
- 【报告】获取 RDC 检查报告,确认复位树跨域路径全部覆盖。
本章小结: 同步复位与异步复位本质区别在于“动作与时钟沿的关系”,而RDC验证中最关键的是复位释放路径的同步性。掌握恢复/移除时间、复位同步器结构和复位树跨域路径,是后续理解“复位域约束传递”和“复位域跨域检查”的基础。