RDC复位域跨域验证技术教程 - 第3节

3.1 问题背景:复位的“域”为什么需要划分

在大型SoC中,芯片内部往往同时存在几十甚至上百个时钟域,而复位信号与时钟信号一样,天然具有“作用范围”和“同步边界”。如果没有进行明确的复位域划分,验证工程师面对的问题将是:

  • 复位行为不可预期:不同模块的复位信号来自不同源头,释放时刻不一致,导致逻辑初始状态不确定。
  • 跨域路径出现亚稳态:复位信号与目标时钟没有同步关系,释放时可能违反触发器的复位恢复/移除时间。
  • 验证环境难以建模:形式化验证和仿真中,无法准确描述复位信号对每个寄存器的生效范围。

因此,在RDC(Reset Domain Crossing)验证中,第一步就是对全芯片的复位信号进行“域”的划分,明确每一个寄存器的复位归属,才能进一步判断跨域路径是否存在风险。

3.2 核心概念:复位域的三要素

一个完整的复位域定义,由以下三个要素构成:

要素 说明 验证中的意义
复位源 复位信号的原始产生点,如电源管理单元(PMU)、外部复位引脚、看门狗定时器 决定复位树的根节点,是RDC分析的起点
复位网络 复位信号从源点经过缓冲、同步、分频后到达寄存器的路径 决定复位信号到达各模块的时序关系,影响同步释放策略
复位接收器 所有被该复位信号驱动的时序单元(触发器、存储器、锁存器) 决定复位域的边界,是跨域路径判断的基本单位

3.3 复位域分类框架

在RDC验证中,复位域可以从三个维度进行划分:复位域定义、复位树结构、同源与异源复位。三者之间的关系如下图所示:

复位域划分 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 定义步骤

  1. 收集芯片所有复位源,并去除直接由其他复位生成的“伪复位源”。
  2. 将每个复位源驱动的全部时序单元归入同一候选复位域。
  3. 检查同一复位域内是否存在跨时钟域的复位传递。
  4. 对经过异步复位同步释放逻辑后的信号,生成新的派生复位域。
  5. 最终形成全芯片复位域列表,并映射到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 复位域划分流程

  1. 输入准备:收集RTL网表、UPF电源意图文件、复位约束文件。
  2. 复位源识别:标注所有顶层复位端口及内部复位生成逻辑。
  3. 复位树提取:从复位源出发,遍历所有复位信号路径,生成复位树。
  4. 复位域聚类:将到达同一组寄存器的同路径复位信号归并为同一复位域。
  5. 同源/异源判定:比较各复位域对应的物理根节点,标注同源或异源关系。
  6. 输出复位域清单:生成复位域表,供后续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工具中建立复位域约束,纳入回归验证环境。