RDC复位域跨域验证技术教程 - 第3节
3.1 问题背景:复位的“域”为什么需要划分
在大型SoC中,芯片内部往往同时存在几十甚至上百个时钟域,而复位信号与时钟信号一样,天然具有“作用范围”和“同步边界”。如果没有进行明确的复位域划分,验证工程师面对的问题将是:
- 复位行为不可预期:不同模块的复位信号来自不同源头,释放时刻不一致,导致逻辑初始状态不确定。
- 跨域路径出现亚稳态:复位信号与目标时钟没有同步关系,释放时可能违反触发器的复位恢复/移除时间。
- 验证环境难以建模:形式化验证和仿真中,无法准确描述复位信号对每个寄存器的生效范围。
因此,在RDC(Reset Domain Crossing)验证中,第一步就是对全芯片的复位信号进行“域”的划分,明确每一个寄存器的复位归属,才能进一步判断跨域路径是否存在风险。
3.2 核心概念:复位域的三要素
一个完整的复位域定义,由以下三个要素构成:
| 要素 | 说明 | 验证中的意义 |
|---|---|---|
| 复位源 | 复位信号的原始产生点,如电源管理单元(PMU)、外部复位引脚、看门狗定时器 | 决定复位树的根节点,是RDC分析的起点 |
| 复位网络 | 复位信号从源点经过缓冲、同步、分频后到达寄存器的路径 | 决定复位信号到达各模块的时序关系,影响同步释放策略 |
| 复位接收器 | 所有被该复位信号驱动的时序单元(触发器、存储器、锁存器) | 决定复位域的边界,是跨域路径判断的基本单位 |
3.3 复位域分类框架
在RDC验证中,复位域可以从三个维度进行划分:复位域定义、复位树结构、同源与异源复位。三者之间的关系如下图所示:
以上三项共同决定了一个寄存器在RDC分析中的“复位身份”。只有先完成复位域划分,才能对跨复位域的数据路径进行有效的同步验证与结构检查。
3.4 复位域定义:从信号到集合
3.4.1 复位域的基本属性
一个复位域用四元组来唯一标识:
ResetDomain = { ResetName, ResetType, SyncType, TargetClockDomain }
| 属性 | 取值 | 验证影响 |
|---|---|---|
| ResetName | 如 por_rst_n, sw_rst_n, wdt_rst_n | 作为域的唯一标识,贯穿RDC报告 |
| ResetType | hard_rst / soft_rst / debug_rst | 决定是否参与功能复位验证 |
| SyncType | async / sync | 决定复位释放是否需要同步器 |
| TargetClockDomain | clk_a, clk_b, clk_c | 决定复位信号与时钟域的配对关系 |
3.4.2 定义步骤
- 收集芯片所有复位源,并去除直接由其他复位生成的“伪复位源”。
- 将每个复位源驱动的全部时序单元归入同一候选复位域。
- 检查同一复位域内是否存在跨时钟域的复位传递。
- 对经过异步复位同步释放逻辑后的信号,生成新的派生复位域。
- 最终形成全芯片复位域列表,并映射到RDC工具中。
3.5 复位树结构:从源头到寄存器的路径
复位树是复位信号从产生点到目的寄存器的完整传播路径。典型的复位树结构包括:
外部复位引脚 (ext_rst_n)
→ PMU 复位控制逻辑
→ 复位同步释放器 (reset synchronizer)
→ 时钟域 clk_a 的复位分发网络
→ 模块A寄存器组
→ 时钟域 clk_b 的复位分发网络
→ 模块B寄存器组
3.5.1 同步复位树
复位信号作为普通数据信号参与寄存器的功能逻辑,仅当时钟有效沿到来时复位才生效。优点是抗毛刺能力强,缺点是需要保证复位信号满足时序要求。
3.5.2 异步复位树
复位信号直接连接到寄存器的异步复位端(如 arst_n),不依赖时钟即可完成复位。优点是复位速度快,但释放时需要与时钟同步,否则会产生亚稳态。
特别注意:异步复位释放时,必须使用“异步复位、同步释放”电路。否则,如果复位释放时刻与时钟沿接近,会导致部分寄存器复位成功、部分复位失败,形成功能混乱。
3.5.3 复位同步释放标准电路
module reset_sync (
input wire clk,
input wire rst_n,
output reg rst_out_n
);
reg rst_n_meta;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
rst_n_meta <= 1'b0;
rst_out_n <= 1'b0;
end else begin
rst_n_meta <= 1'b1;
rst_out_n <= rst_n_meta;
end
end
endmodule
3.6 同源复位与异源复位
以复位信号的“最终来源”是否相同为标准,可以将复位域之间的关系划分为:
| 类型 | 定义 | 典型场景 | RDC验证重点 |
|---|---|---|---|
| 同源复位 | 两个或多个复位域最终来自同一个物理复位源,但经过不同的同步或分发路径 | 同一个外部复位分别生成 clk_a 域复位和 clk_b 域复位 | 检查各路复位释放时序偏差是否在允许范围内,防止复位释放不同步 |
| 异源复位 | 两个复位域来自完全独立的物理复位源 | POR复位域与软件复位域、看门狗复位域之间发生数据交互 | 检查跨复位域数据路径是否存在无保护逻辑 |
3.6.1 同源复位的典型树结构
por_rst_n (单一物理源)
├── clk_a 域复位同步器 → rst_a_n
└── clk_b 域复位同步器 → rst_b_n
rst_a_n 和 rst_b_n 属于同源复位。
3.6.2 异源复位的典型交互
por_rst_n → 复位 PMU 寄存器组
wdt_rst_n → 复位看门狗控制寄存器组
PMU 寄存器组输出信号进入看门狗控制逻辑 → 构成跨异源复位域路径。
经验值:在RDC检查中,同源复位域之间的路径风险等级通常低于异源复位域,但同源复位如果存在异步路径上的多级同步释放,仍然需要做结构化检查。
3.7 复位域划分流程
- 输入准备:收集RTL网表、UPF电源意图文件、复位约束文件。
- 复位源识别:标注所有顶层复位端口及内部复位生成逻辑。
- 复位树提取:从复位源出发,遍历所有复位信号路径,生成复位树。
- 复位域聚类:将到达同一组寄存器的同路径复位信号归并为同一复位域。
- 同源/异源判定:比较各复位域对应的物理根节点,标注同源或异源关系。
- 输出复位域清单:生成复位域表,供后续RDC检查使用。
3.8 案例说明:双时钟域视频处理芯片的复位域划分
背景:某视频处理芯片包含两个时钟域:clk_pix(像素时钟)与 clk_ddr(DDR控制器时钟)。芯片只有一个外部硬复位 ext_rst_n,同时内部有一个看门狗复位 wdt_rst_n。
复位源分析:
| 复位名 | 来源 | 作用范围 |
|---|---|---|
| ext_rst_n | 外部引脚 | 全芯片,包括 PMU、时钟发生器(PLL)等 |
| wdt_rst_n | 看门狗定时器溢出触发 | 仅复位视频处理核心逻辑,不复位PMU |
复位树划分结果:
ext_rst_n (物理根节点 R1)
├── PMU 内部同步释放 → pmu_rst_n
├── clk_pix 域同步释放 → pix_rst_n
└── clk_ddr 域同步释放 → ddr_rst_n
wdt_rst_n (物理根节点 R2)
└── 看门狗同步释放 → wdt_core_rst_n
结论:
pmu_rst_n、pix_rst_n、ddr_rst_n属于同源复位域,根节点均为 R1。wdt_core_rst_n与前三者属于异源复位域,根节点为 R2。- 视频处理逻辑与 DDR 控制逻辑之间的跨域路径,需要同时检查“时钟域跨越”和“复位域跨越”,确认是否存在同步保护。
3.9 表格总结:复位域划分关键维度
| 维度 | 核心问题 | 关键输出 | RDC工具对应功能 |
|---|---|---|---|
| 复位域定义 | 哪些寄存器共享同一复位行为? | 复位域清单 | reset domain report |
| 复位树结构 | 复位信号经过哪些路径到达寄存器? | 复位树结构图 | reset tree viewer |
| 同源异源复位 | 不同复位域之间是否存在公共根节点? | 同源/异源关系表 | reset domain crossing check |
3.10 误区提醒
- 误区1:将“异步复位”直接等同于“独立的复位域”。事实上,异步复位信号经过同步释放后,可能只是同一个物理复位源在不同时钟域的派生域。
- 误区2:忽略复位树上的缓冲延迟与同步器级数差异。即使同源复位,如果到达两个模块的时间差过大,也可能导致模块间状态不一致。
- 误区3:将软件复位(soft reset)全部归入同源复位。软件复位往往由CPU写寄存器触发,其物理路径与硬件复位不同,应单独定义复位源。
- 误区4:只关注时钟域交叉,不关注复位域交叉。在复位释放期间,即使时钟域相同,如果复位域不同,仍然会产生数据传输问题。
3.11 实践清单
- 完成RTL中所有复位信号的名称、类型、作用范围统计。
- 绘制全芯片复位树结构图,标记每个复位同步器。
- 检查是否存在“异步复位异步释放”的违规电路。
- 整理同源复位域之间的释放时序偏差预算。
- 为每一个跨复位域路径建立跟踪清单,标注是否需要CDC/RDC同步保护。
- 在RDC工具中建立复位域约束,纳入回归验证环境。