------ 提升测试覆盖率与降低 Pattern 数量的关键技术
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
在实际芯片设计中,即使完成了 Scan Insertion,仍然会存在许多"难以控制"或"难以观测"的内部节点。这些节点导致部分故障无法被测试到,最终体现为测试覆盖率不达标或 Pattern 数量爆炸。解决这个问题的关键技术就是 Test Point。
本文将深入讲解 Test Point 的基本概念、四种类型的区别与应用场景,以及在 Tessent 和 DC 中如何配置和插入 Test Point。
一、Test Point 基本概念
1.1 为什么需要 Test Point?
在完成 Scan Insertion 之后,即使所有寄存器都被连入了 Scan Chain,仍然会存在许多内部节点难以被控制或观测到。常见的原因包括:
• 深层组合逻辑导致从 Scan Cell 到目标节点的路径过长,随机 Pattern 无法有效控制
• 某些逻辑对特定输入组合敏感,随机 Pattern 难以覆盖
• 反馈环路、复杂的多路径逻辑等结构导致观测困难
• 不可测试逻辑(Un-testable Logic)无法通过常规手段覆盖

图 1:Test Point 的目的 ------ 对难以控制/观测的内部节点增加测试电路
解决方案就是在这些"盲区"插入额外的测试电路,即 Test Point,从而提高测试覆盖率或降低 Pattern 数量。
1.2 Test Point 的四种类型
根据功能不同,Test Point 分为四种类型,每种类型都有其特定的应用场景:

图 2a:Control 0/1 Test Point 电路

图 2b:Observe Test Point 电路

图 2c:Force 0/1 Test Point 电路

图 2d:Force Test Point 另一种视角
|-----------|---------------|-----------------------|-------------------|
| 类型 | 功能 | 原理 | 应用场景 |
| Control 0 | 将目标节点强制为 0 | 通过寄存器控制与门打开,推动值为 0 | 难以通过随机激励控制到 0 的节点 |
| Control 1 | 将目标节点强制为 1 | 通过寄存器控制或门打开,推动值为 1 | 难以通过随机激励控制到 1 的节点 |
| Observe | 观测目标节点的值 | 将目标节点连接到寄存器进行 capture | 难以从输出端观测到的内部节点 |
| Force 0/1 | 强制目标节点为 0 或 1 | 直接连接到 VDD/GND(需三态驱动) | 对特定节点的精确控制 |
1.3 Test Point 共享机制
为了减少额外寄存器的数量,Test Point 支持共享机制------多个 Test Point 可以共享同一个寄存器:

图 3a:共享 Control Test Point 示意

图 3b:共享 Observe Test Point 示意
默认情况下,每 8 个 Test Point 共享一个寄存器(可通过命令配置)。这种共享机制显著降低了 Test Point 的面积开销。
1.4 Test Point Register 的 Clock 选择

图 4a:Source Test Point Register 的 Clock 选择

图 4b:Sink Test Point Register 的 Clock 选择
• Clock 匹配原则: Source Test Point Register(提供控制信号)的 Clock 与 Capture 数据的目标寄存器 Clock 保持一致
• Sink Test Point Register(观测信号)的 Clock 与 Drive 数据的源寄存器 Clock 保持一致
|----------------------------------------------------------------------------------------------------------|
| �� 时钟匹配的重要性 如果没有显式指定 Clock,工具会根据相关逻辑的 fan-in/fan-out 自动选择恰当的 Clock Domain。但在多时钟域设计中,建议显式指定以避免跨时钟域问题。 |
1.5 Test Point 对 Timing 的影响
插入 Test Point 会对电路的 Timing 产生影响,需要在以下两个方面关注:
• Shift Timing: Observe 和 Control TP 都需要满足 Setup & Hold 时序要求
• Capture Timing: Observe TP 的 Capture Timing 需要检查;而 Control TP 可以通过将 control_tp_enable 设为 0 来跳过 Capture Timing 检查
Timing 优化策略
• 使用 set_test_point_analysis_options -max_control_points_per_path 限制同一条 Path 上的 Control TP 数量
• 读入相关 SDC 文件,对关键路径(MCP/FP)避免插入 TP
|-----------------------------------------------------------------------------|
| �� 面积与功耗评估 Test Point 的插入会增加额外的寄存器和组合逻辑,对面积和功耗的影响需要与其他团队(如前端/后端团队)进行评估。 |
|---------------------------------------------------------------------------------------------------------------------------------|
| �� 本节小结 Test Point 是提升测试质量的重要手段。四种类型(Control 0/1、Observe、Force 0/1)分别解决"难以控制"和"难以观测"的问题。通过共享机制可以有效减少面积开销,但需要注意对 Timing 的影响。 |
二、Tessent 中的 Test Point 插入流程
Tessent 支持基于 Gate-level Netlist 进行 Test Point 的分析与插入。以下是完整的操作流程。

图 5:Tessent Test Point Insertion 流程总览
2.1 选择 Test Point 类型
工具支持两种主要的 Test Point 类型选择,可以根据实际需求灵活配置:

图 6:使用 set_test_point_types 选择 Test Point 类型
|---------------------|-----------------|----------------------------|
| 类型 | 目标 | 适用场景 |
| edt_pattern_count | 降低测试 Pattern 数量 | 使用 EDT 压缩时,减少 Pattern 体积 |
| lbist_test_coverage | 提升 LBIST 测试覆盖率 | 对测试覆盖率有严格要求的场景 |
| 不指定 | 两种类型同时指定 | 默认情况,兼顾 Pattern 和 Coverage |
选择专注于降低 pattern 数量
set_test_point_types edt_pattern_count
选择专注于提升覆盖率
set_test_point_types lbist_test_coverage
同时指定两种类型(默认)
set_test_point_types {edt_pattern_count lbist_test_coverage}
2.2 指定分析目标
工具在分析 Test Point 时,需要指定一个停止分析的判断条件。常见的三种目标设置方式:

图 7:Test Point 分析目标设置示例------三种典型配置
• Example 1: 指定最大 TP 数量限制
• Example 2: 指定目标覆盖率
• Example 3: 指定 Pattern 数量目标
2.3 Control/Observe TP 控制信号
默认情况下,test_point_en 信号同时使能 Control 和 Observe Test Points。但建议将它们分开控制,以便未来灵活配置:

图 8a:默认方式 ------ 单一使能信号

图 8b:推荐方式 ------ 分开控制信号

图 8c:分开控制信号的电路实现
|----------------------------------------------------------------------------------------------------------------------|
| �� 分开控制的优势 将 Control TP 和 Observe TP 的使能信号分开后,可以独立开关。例如:在某些场景下只需要 Observe TP 而不需要 Control TP,这样可以减少对 Timing 的影响。 |
2.4 自定义模块配置
排除特定模块
并非所有模块都适合插入 Test Point。常见的不插入 TP 的模块包括:
• 关键路径上的逻辑(插入 TP 会影响 Timing 收敛)
• DFT/Power/Clock 控制逻辑
• User 自定义的其他模块

图 9:使用 set_test_point_analysis_options 排除特定模块
手动指定 Test Point
如果对某些模块或电路已经有明确的 TP 需求,可以使用 add_control_points 和 add_observe_points 手动指定,避免工具的复杂分析:

图 10:使用 add_control_points / add_observe_points 手动指定 TP
MCP/FP 路径保护

图 11:通过 SDC 文件或命令选项保护关键路径
可以通过以下方式保护关键时序路径:
• 通过 read_sdc 加载 SDC 文件,工具会自动识别 MCP 和 FP,避免在这些路径上插入 TP
• 使用 -avoid_cross_clock_domain_paths 选项,工具对跨时钟域的 Path 不会进行 TP 分析与插入(默认关闭)
2.5 执行分析与插入

图 12a:Tessent 执行 Test Point 分析与插入命令

图 12b:Test Point 分析结果报告示例
|------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| �� 本节小结 Tessent 的 TP 插入流程:选择类型(edt_pattern_count / lbist_test_coverage)→ 设置分析目标(覆盖率或 Pattern 数量)→ 分开 Control/Observe 控制信号(推荐)→ 排除关键模块 → 保护 MCP/FP → 执行分析与插入。 |
三、DC 中的 Test Point 插入流程
在 DC(Design Compiler)中插入 Test Point 有两种方式:自动插入和用户指定插入。
3.1 自动插入 Test Point
Step 1:启用 Testability 功能
在 DRC 之前启用自动 TP 插入
dc_shell> set_dft_configuration -testability enable
Step 2:配置 Test Point 参数
配置测试性参数
set_testability_configuration \
-clock_signal clock_name\] # 为 TP reg 指定 clock \[-control_signal control_name\] # 指定使能信号 \[-test_points_per_scan_cell n\] # n个 TP 共享一个 reg,默认 8 \[-max_test_points n\] # 最大 TP 数量限制 **Step 3:设置分析目标(Target)** DC 工具会自动调用 SpyGlass DFT 进行 Test Point 分析。不同的 Target 专注于可测性的不同方面: |------------------|------------------|-------------------| | **Target** | **功能** | **说明** | | untestable_logic | 测试不可测逻辑 | 侧重于获得最大覆盖率 | | x_blocking | 阻断 X 传播 | 在 X 源头处阻断,避免向下游传递 | | random_resistant | 提升随机 Pattern 覆盖率 | 解决随机激励难以控制的节点 | # 同时启用多个 target set_testability_configuration \\ -target {untestable_logic random_resistant} # 排除特定 instance set_testability_configuration \\ -exclude_elements \[list
3.2 用户指定 Test Point
如果已经知道需要插入 TP 的位置和类型,可以直接告诉工具,跳过复杂的分析过程:
启用 testability
set_dft_configuration -testability enable
配置 user-define test points
set_test_point_element \
-type force_0|force_1|control_0|control_1|observe \
-control_signal control_name \
-clock_signal clock_name \
-test_points_per_source_or_sink n\] \\ {pin_port_list} **3.3 Preview 与执行** 在正式插入之前,使用 Preview 命令查看 TP 分配情况: # 查看将要插入的 test point dc_shell\> preview_dft -test_points all  *图 13a:Preview Test Points 输出示例*  *图 13b:Preview 详细信息示例* 执行分析与插入:  *图 14:DC 中自动插入 Test Point 的完整脚本示例*  *图 15:Run Test Point Analysis 输出示例* |---------------------------------------------------------------------------------------------------------------------------------------------------------| | **�� 本节小结** DC 的 TP 插入分自动和手动两种方式。自动方式通过 SpyGlass DFT 分析,支持三种 Target(untestable_logic、x_blocking、random_resistant)。手动方式通过 set_test_point_element 直接指定位置。 | **四、Tessent + DC 混合流程** 在实际项目中,常常需要将 Tessent 的分析能力与 DC 的插入能力结合起来:  *图 16:混合流程 ------ Tessent 分析 + DC 插入*  *图 17:Tessent 分析结果传递给 DC 的工作流* **• Step 1:Tessent 分析** 使用 Tessent 执行 Test Point 分析,得到需要插入何种类型 TP 的 Location 信息 **• Step 2:导出结果** 使用 report_test_points 将分析结果打印出来 **• Step 3:生成脚本** 将分析结果写成 dofile 或脚本 **• Step 4:DC 插入** 在 DC 中使用用户定义方式(set_test_point_element)完成 TP 插入,与普通 Scan Cell 同时完成 insertion |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **�� Post-Scan 插入注意事项** 工具支持在已经完成 Scan 的 Design 上插入 TP,但这种方式不推荐,因为会导致 Scan Chain 做得不够优化。如果必须在已有 Wrapper Chain 的 Design 上插入 TP,可以将 TP Flop 插到 Core 外围电路并单独串 Chain,作为 Scan Insertion 的补充。 | **五、完整命令汇总** |------------|---------|-------------------------------------------------|--------------| | **步骤** | **工具** | **命令** | **说明** | | 1. 启用 TP | DC | set_dft_configuration -testability enable | 启用自动 TP 插入 | | 2. 选择类型 | Tessent | set_test_point_types {edt_pattern_count ...} | 指定 TP 优化目标 | | 3. 分析目标 | Tessent | 在 analyze 命令中指定 coverage/pattern 目标 | 设置停止条件 | | 4. 控制信号 | Tessent | 分开定义 control/observe enable | 灵活控制(推荐) | | 5. 排除模块 | 两者 | set_testability_configuration -exclude_elements | 排除关键路径/DFT逻辑 | | 6. 手动指定 | 两者 | set_test_point_element / add_control_points | 跳过分析直接指定 | | 7. 保护路径 | Tessent | read_sdc / -avoid_cross_clock_domain_paths | 保护 MCP/FP | | 8. Preview | DC | preview_dft -test_points all | 查看 TP 分配 | | 9. 执行插入 | DC | run_test_point_analysis / insert_dft | 分析并插入 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **�� 实操建议** 1. 优先使用 Tessent 进行 Test Point 分析,其算法更加成熟精确。 2. 将 Control TP 和 Observe TP 的使能信号分开,便于后期灵活调整。 3. 必须排除关键路径上的 TP 插入,否则会严重影响 Timing 收敛。 4. TP 的面积和功耗影响需要提前与相关团队评估。 5. 建议在 Scan Insertion 之前完成 TP 插入,以便工具对 Scan Chain 进行整体优化。 |