Scan Test Point 插入全解析

------ 提升测试覆盖率与降低 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 ![](https://i-blog.csdnimg.cn/direct/2131277f07644be7866d34e7b5c25a27.png) *图 13a:Preview Test Points 输出示例* ![](https://i-blog.csdnimg.cn/direct/f3bfeec9afe8445eb1d25d6850aa9f5d.png) *图 13b:Preview 详细信息示例* 执行分析与插入: ![](https://i-blog.csdnimg.cn/direct/2eef1cd3961441a7b3338862b44e086e.png) *图 14:DC 中自动插入 Test Point 的完整脚本示例* ![](https://i-blog.csdnimg.cn/direct/65e6a88308ad4d8982ef0f2fccbd82f8.png) *图 15:Run Test Point Analysis 输出示例* |---------------------------------------------------------------------------------------------------------------------------------------------------------| | **�� 本节小结** DC 的 TP 插入分自动和手动两种方式。自动方式通过 SpyGlass DFT 分析,支持三种 Target(untestable_logic、x_blocking、random_resistant)。手动方式通过 set_test_point_element 直接指定位置。 | **四、Tessent + DC 混合流程** 在实际项目中,常常需要将 Tessent 的分析能力与 DC 的插入能力结合起来: ![](https://i-blog.csdnimg.cn/direct/54e992ddfbd14be78f15f8d602a6dfcc.png) *图 16:混合流程 ------ Tessent 分析 + DC 插入* ![](https://i-blog.csdnimg.cn/direct/aa9f27978e4b439480b63420a5dcd8e0.png) *图 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 进行整体优化。 |

相关推荐
DarrenHChen_EDA13 天前
【汽车芯片功能安全分析与故障注入实践 13】FMEDA Update:从 Measured DC 和 Residual FIT 到可追溯安全表格
dc·功能安全·fit·故障注入·汽车芯片·fmeda·measured dc
DarrenHChen_EDA16 天前
【汽车芯片功能安全分析与故障注入实践 09】Safety Mechanism 不是越多越好:如何选择 Parity/ECC/Lockstep?
dc·功能安全·ecc·汽车芯片·parity·lockstop
DarrenHChen_EDA16 天前
【汽车芯片功能安全分析与故障注入实践 08】Diagnostic Coverage 是怎么算出来的?
dc·功能安全·汽车芯片·fmeda
前网易架构师-高司机5 个月前
汽车充电口识别数据集,标注了3067张图片,可识别AC,DC 等多种类型快充,慢充插口,支持YOLO,COCO,VOC三种标记
汽车·dc·充电·ac·插口
Мартин.8 个月前
[Meachines] [Hard] Object Jenkins+DC+Logon Script+GenericWrite+WriteOwner
dc
課代表1 年前
Acrobat Reader 无法在 Windows 11及10 中打开的5种修复方法
windows·adobe·pdf·adobe acrobat reader·修复·dc
中古传奇2 年前
【DC系列教程2--Timing and Area Constrains】
dc
艾思芯片设计2 年前
巧用RTL原语实现MUX门级映射
dc·rtl·primitive
bcbobo21cn3 年前
MFC保存窗口客户区为图片
c++·mfc·dc·设备描述表·bitblt