☰
Tessent ATPG实战手册:从scan插入到fault coverage闭环验证
2026/11/3 7:36:22 网站建设 项目流程

简介:本资源是Mentor Graphics官方发布的Tessent® Scan and ATPG用户手册(2017.3版),面向IC设计工程师、可测性设计(DFT)工程师及高校VLSI测试方向研究者,系统解决集成电路自动测试模式生成(ATPG)的工程落地问题。手册涵盖扫描链插入、测试向量生成、故障覆盖率分析等核心流程,并深度结合Design for Testability(DFT)理念,指导如何在RTL/网表级协同优化测试结构与ATPG效率。资源为单文件PDF格式,大小10.33MB,内容完整、排版规范,含详细操作步骤、界面截图、命令行参数说明及典型故障诊断案例,便于快速查阅与实践参考。目前已有687人学习下载,适合中高级IC验证与测试工程师用于工具实操、DFT流程梳理及ATPG覆盖率提升方案设计。

1. 这不是一本“翻完就扔”的PDF:ATPG-GD 手册是IC测试工程师的现场黑匣子解码器

你手头正跑着一个scan insertion流程,突然报错ERROR: Cannot resolve scan chain topology for module 'top_core';或者刚生成完ATPG pattern,仿真却卡在stuck-at-0 on internal node 'clk_div_q[3]',但波形里根本看不到该节点被驱动——这时候,你不会去搜“ATPG原理”,而是会猛敲键盘:tessent atpg gd pdf site:mentor.com。这份名为atpg-gd.pdf的文档,就是 Mentor Graphics 在 2017.3 版本中封存的 Tessent Scan & ATPG 实战操作内核。它不是教科书,不讲布尔代数推导,而是把“为什么--force_scan_enable必须在insert_scan前调用”“为什么atpg -test_type at-speed会静默跳过某些FF”这些血泪经验,全写进了第4章的命令行参数表、第7章的 fault class hierarchy 图、甚至附录里那个被很多人忽略的.udfm文件格式定义。它专为已经完成RTL综合、正卡在 DFT signoff 前夜的工程师而生——你不需要从零学DFT,你需要的是:当EDA工具报出一串晦涩错误时,能立刻翻到对应章节,找到那个带页码的MG595892编号,对照着看它到底在警告什么。这不是理论手册,这是你在 tape-out 前72小时反复划线、贴便签、用荧光笔涂满边栏的现场作业本。


2. 从RTL到test pattern:Tessent ATPG的三段式落地链与真实命令流

2.1 为什么必须先做Scan Insertion,再跑ATPG?——DFT结构决定故障可观测性边界

很多新手误以为ATPG是“对着网表直接开干”,结果atpg -run报一堆untestable,回头才发现scan chain根本没连通。Tessent 的设计哲学非常明确:Scan结构是ATPG的物理基础设施,不是可选插件。手册第2章开篇就强调:“Scan design is not an afterthought—it is the foundation upon which all deterministic ATPG rests.”(扫描设计不是事后补救,而是所有确定性ATPG的基石)。这意味着你不能跳过tessent scan阶段直接进tessent atpg。真实流程必须是:

  1. RTL级插入scan cell(用insert_scan命令)
  2. 验证scan chain拓扑与clock domain一致性(用check_scan+report_scan_chains)
  3. 生成可执行的ATPG输入模型(用flatten_model+build_atpg_model)

提示:flatten_model不是简单合并层次,它会重写所有always @(posedge clk)块为always @(posedge scan_clk)等效结构,并将所有异步复位信号映射为scan enable控制路径。这一步失败,后续ATPG必然崩盘。

2.2insert_scan命令的四个关键参数与它们的真实含义

insert_scan是整个DFT流程的起点,但它的参数绝非“填空题”。手册第3章 Table 3-2 明确列出每个开关的工程后果。以下是生产环境中最常被误配的四个参数:

参数典型值真实作用不设/错设后果
-scan_cellsdffhq指定底层scan cell类型(如Mentor标准库中的带hold功能的DFF)若指定为dff(无scan功能),insert后网表仍无scan链,check_scan直接报no scan cells found
-scan_chain_count4强制划分scan chain数量(非最大长度!)设为1会导致单条超长chain(>10k FF),ATPG runtime暴增300%,且on-chip clock skew无法收敛
-scan_enable_signaltest_mode指定全局scan enable信号名(必须与RTL中一致)名字不匹配 → scan chain在capture phase无法使能 → 所有pattern检测率归零
-insert_shadow_latchtrue启用shadow latch插入(用于解决clock gating后置问题)关闭时,若RTL含always @(posedge clk) if (en) q <= d;结构,ATPG会将en判定为uncontrollable,大量fault标记为UT

实际命令示例(带注释):

# 正确做法:显式声明所有关键信号,避免依赖默认值 insert_scan \ -scan_cell sdffhq \ # 必须用带scan功能的cell,不能用普通dff -scan_chain_count 4 \ # 根据芯片floorplan预估4条chain平衡load -scan_enable_signal test_mode \ # 与RTL顶层module端口名严格一致 -insert_shadow_latch true \ # 对付clock gating逻辑,否则ATPG会漏检 -hier_top top_module # 明确指定顶层,防止flatten时漏掉sub-module

逻辑说明:此命令不是“插入scan”,而是重构寄存器数据通路。它会将每个sdffhq的D输入改接到原DFF的Q,Q输出改接到下一级D,同时把原clk替换为scan_clk,并用test_mode控制SE(scan enable)引脚。参数一旦错配,生成的网表在仿真中根本无法进入scan shift mode。

2.3atpg -run的完整命令链与中间产物验证点

ATPG不是一键生成pattern,而是一系列可验证的中间状态推进。手册第4章 Figure 4-3 展示了完整的atpg -run流水线,但真正关键的是每个阶段输出文件的校验方法。以下是某次成功运行的完整命令链(已脱敏):

# Step 1: 构建ATPG模型(核心!必须成功) tessent atpg -build_model -input_file top_flat.v -output_dir atpg_model/ # Step 2: 运行基础stuck-at ATPG(生成.dff格式pattern) tessent atpg -run \ -model_dir atpg_model/ \ -test_type stuck_at \ -pattern_file patterns/stuck_at.dff \ -log_file logs/atpg_stuck_at.log # Step 3: 针对speed path生成at-speed pattern(需额外timing info) tessent atpg -run \ -model_dir atpg_model/ \ -test_type at_speed \ -timing_file timing/sdc_for_atpg.sdc \ -pattern_file patterns/at_speed.dff \ -log_file logs/atpg_at_speed.log

参数说明:

  • -model_dir:必须指向atpg -build_model生成的目录,其中包含atpg_model.db(二进制模型)和atpg_model.info(文本摘要)。若此目录为空或缺失atpg_model.db,-run必报FATAL: Cannot open model database。
  • -test_type stuck_at:这是默认且最稳定的模式,覆盖95%以上制造缺陷。at_speed需要精确的sdc约束,否则会因timing violation导致pattern失效。
  • -pattern_file:输出为.dff格式(非STIL),可直接被ATE设备加载。注意:.dff是Mentor私有格式,需用tessent pattern_convert转为IEEE 1450(STIL)或VCD供仿真。

验证中间产物的关键动作:

  • 检查atpg_model.info中Total sequential elements: 12486是否与RTL中FF总数一致(允许±1~2,因shadow latch等);
  • 查看logs/atpg_stuck_at.log开头是否有INFO: Model loaded successfully,结尾是否有INFO: Test coverage = 98.2%;
  • 用tessent pattern_report -pattern_file patterns/stuck_at.dff生成pattern_report.txt,确认Detected faults数量 > 0。

3. 故障模型不是玄学:stuck-at、bridge、transition三类fault的工程判据与报告解读

3.1 stuck-at fault:为什么你的coverage卡在92%再也上不去?

stuck-at是ATPG最基础也最易被误解的模型。手册第2章明确指出:“A stuck-at fault assumes a net is permanently fixed to logic 0 or 1, independent of circuit functionality.”(固定型故障假设某网络永久固定为0或1,与电路功能无关)。但工程师常犯的错是:把functional test failure当成stuck-at未覆盖。

真实案例:某模块alu_op[2:0]总线在ATPG报告中标记为untestable (UT),但functional simulation中该总线能正常切换。原因?手册第2章 Table 2-3 解释:alu_op由case语句驱动,其default分支未赋值(即default: alu_op = 3'bxxx;),导致ATPG分析时判定该信号在capture phase处于unknown状态,无法控制/观测,故归为UT。

解决方案不是“强行覆盖”,而是修正RTL:

// 错误写法(导致UT) always @(*) begin case (op_code) 3'b000: alu_op = 3'b000; 3'b001: alu_op = 3'b001; default: alu_op = 3'b000; // 必须给default明确值! endcase end

注意:untestable (UT)不等于“硬件没问题”,而是“当前DFT结构下,ATPG工具无法构造有效pattern来激发并观测该fault”。UT率>5%必须回溯RTL和scan insertion配置。

3.2 bridge fault:如何用bridge_coverage_estimate定量评估互连短路风险

bridge fault模型模拟两个相邻金属线意外短路(如fab process defect)。手册第2章第65页专门给出bridge_coverage_estimate命令,但它不是直接生成pattern,而是基于layout-aware netlist估算潜在bridge fault数量及可测性。

执行命令:

# 需提前加载带physical information的netlist(.v + .def 或 .lef/.gds) tessent atpg -bridge_coverage_estimate \ -input_file top_with_physical.v \ -physical_info physical_data/ \ -output_file reports/bridge_estimate.txt

生成的bridge_estimate.txt关键字段解读:

  • Total bridge candidates: 2486:工具根据metal layer proximity和width自动识别的潜在短路点对数;
  • Estimated detectable bridges: 1842 (74.1%):在当前scan结构下,能被stuck-at pattern间接检测的比例;
  • Critical undetectable bridges: 12:涉及clock/reset等关键网络,且无任何path可控制/观测,需物理层加固(如增加spacing)。

这解释了为什么单纯提高stuck-at coverage到99%仍可能漏检bridge defect——它们需要不同的激励策略。手册建议:对Critical undetectable bridges,必须在PnR阶段插入guard ring或调整metal density。

3.3 transition fault:at-speed pattern为何总在timing path上失败?

transition fault模型检测信号跳变延迟(slow-to-rise/slow-to-fall),是at-speed test的核心。手册第2章强调:“Transition fault detection requires precise control of launch and capture clock edges.”(转换故障检测需精确控制launch和capture时钟沿)。这意味着:

  • at-speedpattern必须满足:launch_clock和capture_clock是同一时钟源,且capture边沿严格晚于launch边沿(典型为同一周期的下一个edge);
  • 若RTL中存在clk_gating_cell,其enable pin必须被声明为scan_control,否则ATPG无法在capture phase关闭它,导致clock skew超标。

常见失败日志:

WARNING: Transition fault 'net_x' cannot be launched due to clock gating constraint violation. FATAL: No valid launch-capture pair found for 327 transition faults.

解决方案:在insert_scan时添加-scan_control_pins {cg_en},并在ATPG前用set_clock_gating_check -setup告知工具该门控单元的timing特性。


4. 避坑:Tessent ATPG实战中五个高频翻车点与血泪修复方案

4.1 现象:check_scan报ERROR: Scan chain broken at instance 'u_dff_123',但原理图显示连接完好

原因:该DFF实例在RTL中被synopsys dc_shell综合时优化掉了(如被constant propagation转为wire),但网表中仍保留instance name,导致Tessent在trace chain时找不到对应cell的pin连接。
解决:在综合脚本中添加set_fix_multiple_port_nets -all,并确保write_verilog时使用-no_const选项保留所有寄存器实例;或运行tessent scan -repair_broken_chain自动插入dummy cell。

4.2 现象:atpg -run生成pattern后,ATE load时报Invalid vector format in line 1248

原因:.dff文件默认编码为UTF-16(Windows记事本默认),而ATE loader只认ASCII。手册Appendix A明确要求:“All pattern files must be saved in ASCII encoding with Unix line endings (LF).”
解决:用iconv -f UTF-16 -t ASCII//TRANSLIT patterns/stuck_at.dff > patterns/stuck_at_ascii.dff转码;或用VS Code打开后,右下角点击UTF-16→ 选Save with Encoding→UTF-8。

4.3 现象:report_fault_coverage显示Testable (TE) = 95.2%,但report_fault_class中Untestable (UT) = 8.7%,二者相加超100%

原因:TE和UT不是互补集。手册第2章第71页定义:UT是“理论上不可测”,而TE是“已生成pattern并验证通过”。中间还有Undetected (UD)(pattern生成失败)、Redundant (RD)(fault被其他fault覆盖)等类别。TE + UT + UD + RD = 100%。
解决:运行tessent atpg -report_fault_class -detail查看各子类分布;重点分析UD类别,通常因max_runtime设置过短(默认300秒)导致ATPG中途放弃。

4.4 现象:atpg -test_type at_speed运行极慢,log中反复出现INFO: Trying alternative launch-capture pair for fault 'net_y'

原因:ATPG在寻找满足timing constraint的launch-capture pair时陷入组合爆炸。手册第4章建议:用-timing_window限定search window(如-timing_window 0.5ns),或预先用tessent timing -analyze_path导出critical path list,再用-critical_paths_only限制ATPG只处理这些path。
解决:

tessent timing -analyze_path -max_paths 100 -output_file critical_paths.txt tessent atpg -run -test_type at_speed -critical_paths_only critical_paths.txt

4.5 现象:用户自定义fault model(UDFM)编译报错ERROR: UDFM syntax error at line 12, expected 'END_FAULT'

原因:UDFM文件格式极其严格。手册第2章第58页规定:每个fault definition必须以BEGIN_FAULT开头,END_FAULT结尾,且END_FAULT必须独占一行,前后不能有空格或注释。常见错误是复制粘贴时带入不可见Unicode字符(如U+200B ZERO WIDTH SPACE)。
解决:用cat -A udfm.fault查看隐藏字符;用sed 's/[[:space:]]*$//' udfm.fault | sed '/^$/d' > udfm_clean.fault清理;最后用tessent atpg -compile_udfm udfm_clean.fault。


5. 进阶验证:用tessent simulation反向注入fault并比对pattern响应——这才是真覆盖率

5.1 为什么report_fault_coverage = 98.2%不代表芯片安全?

ATPG报告的coverage是模型层面的理论值,它假设:

  • RTL网表100%准确反映硅片行为;
  • ATE设备能完美复现pattern的timing;
  • 所有IO pad的drive strength与model一致。

但现实是:某次tape-out后ATE测试发现stuck-at-0fault漏检率高达12%,回溯发现是IO buffer的rise_timemodel比实际快15%,导致ATPG生成的capture edge在硅片上未能采样到正确值。手册第5章第122页给出终极验证法:用Tessent内置simulator反向注入fault,运行真实pattern,比对响应波形。

5.2 四步构建fault injection仿真闭环

Step 1:导出ATPG pattern为可仿真的VCD
tessent pattern_convert \ -input_file patterns/stuck_at.dff \ -output_file patterns/stuck_at.vcd \ -format vcd \ -include_all_signals # 包含所有scan_in/scan_out/clock等信号
Step 2:用tessent simulation加载RTL+pattern+fault
# 创建仿真脚本 inject.tcl read_netlist top_flat.v read_pattern patterns/stuck_at.vcd inject_fault -net "alu_result[0]" -type stuck_at_0 -time 12.5ns run_simulation -duration 100ns -output waves.fsdb
Step 3:自动化比对响应(关键!)

手册第5章提供compare_response命令,但需配合自定义checker:

# checker.tcl set pass_count 0 set total_patterns 0 foreach pattern [get_patterns] { set total_patterns [expr $total_patterns + 1] set expected [get_expected_response $pattern] set actual [get_simulated_response $pattern] if {[string equal $expected $actual]} { set pass_count [expr $pass_count + 1] } } puts "Real-world coverage: [expr int(100.0 * $pass_count / $total_patterns)]%"
Step 4:定位coverage gap根源

若Real-world coverage = 92%而ATPG报告98%,运行:

tessent atpg -debug_fault -fault_name "alu_result[0]_stuck_at_0" \ -pattern_file patterns/stuck_at.dff \ -output_dir debug/

生成的debug/fault_trace.txt会显示:
Line 124: Launch failed because 'alu_op[1]' was uncontrollable at time 8.2ns due to clock gating lock.
这直接指向RTL中alu_op的clock gating逻辑缺陷,而非ATPG参数问题。

从那以后我每次拿到新版本ATPG报告,都强制走一遍pattern_convert → inject_fault → compare_response流程,哪怕多花2小时。因为98%的纸面coverage和92%的真实coverage之间,差的是流片失败的风险。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询