多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

IC可测性设计实操指南:Scan插入与ATPG工程落地

IC可测性设计实操指南:Scan插入与ATPG工程落地 简介本资源是Mentor Graphics官方发布的Tessent® Scan和ATPG用户手册2017.3版面向IC设计工程师、ATE测试工程师及高校微电子/集成电路方向高年级学生与研究人员聚焦可测性设计DFT中的核心环节——自动测试向量生成ATPG实践。手册系统讲解Scan链插入、测试模式生成、故障覆盖率分析及Tessent工具链操作流程覆盖DTF理念落地的关键技术路径。资源为单文件PDF大小10.33MB内容完整、排版规范含详细界面截图、命令行示例与导航式章节结构便于快速定位扫描插入配置、ATPG运行参数设置及结果解读等实操要点。目前已有682人学习下载是理解工业级ATPG流程、掌握Mentor Tessent工具使用方法的重要权威参考文档。1. 这份 ATPG-GD PDF 不是“说明书”而是 IC 可测性设计落地的实操地图你手头这份atpg-gd.pdf表面看是 Mentor Graphics 2017 年发布的 Tessent Scan 和 ATPG 用户手册但实际它是一张覆盖IC 级可测性设计DFT全链路的工程级操作地图——不是教你怎么点菜单而是告诉你当 RTL 已经签核、后端物理实现迫在眉睫、测试覆盖率卡在 92.3% 上不去时该翻哪一节、查哪个参数表、改哪几行 Tcl 命令、绕开哪些已知工具限制。它不讲抽象理论只记录真实流片项目里工程师反复验证过的路径比如为什么scan_insertion阶段必须禁用--no_merge_scan_chains才能避免 wrapper chain 冲突为什么atpg -fault_model stuck_at生成的 pattern 在 ATE 上 fail而换成atpg -fault_model transition后反而 pass为什么udfm文件里第 47 行的fault_location字段若漏写cell_pin层级定义会导致 bridge fault 覆盖率虚高 18.6%。这份文档服务的对象是正在调试 scan chain 时序违例的后端工程师、正被客户质疑 test coverage margin 的 DFT leader、或是刚接手 legacy design 需要快速定位 test point 失效根源的验证工程师。它解决的不是“ATPG 是什么”而是“我的 design 在 v2017.3 版本下如何让 ATPG 工具真正跑出可烧录、可复现、可归因的 pattern”。2. Scan 插入与 ATPG 流程从 RTL 到 test pattern 的硬核闭环2.1 Scan 结构插入阶段的关键决策点与参数控制Tessent Scan 的scan_insertion操作远非“一键插入”那么简单。其核心在于scan architecture 的显式建模而非依赖工具自动推导。文档第 35 页明确指出-scan_architecture参数必须显式指定为flat,hierarchical, 或wrapper三者行为差异极大flat适用于中小规模 design所有 scan cell 强制打平为单条长链便于 debug 但易触发 timing violationhierarchical保留模块层级各 submodule 独立 scan chain需额外配置scan_group映射关系wrapper针对 IP 复用场景要求外部 wrapper logic 显式声明scan_in,scan_out,scan_enable端口且必须通过-wrapper_file指向.sv描述文件。提示wrapper模式下若未提供符合IEEE 1500标准的 wrapper definition fileTessent 将拒绝插入并报错MG595892即标题中提到的链接失效问题根源此时必须切换为hierarchical并手动set_scan_group。实际命令示例# 正确的 wrapper 模式插入假设 wrapper 定义在 wrapper_def.sv 中 scan_insertion \ -scan_architecture wrapper \ -wrapper_file wrapper_def.sv \ -scan_clocks {scan_clk} \ -scan_chain_length 2000 # 错误示范遗漏 -wrapper_file 导致工具静默降级为 flat 模式后续 ATPG 无法识别 wrapper boundary scan_insertion -scan_architecture wrapper -scan_clocks {scan_clk}该命令执行后Tessent 会生成scan_insertion_report.txt其中关键字段Scan Chain Summary必须验证三项Total scan cells应与 RTL 中scan_flop实例数一致Max chain length不得超过 ATE channel buffer 限制通常 ≤ 4096Wrapper chains count若为 0则说明 wrapper 未生效。2.2 ATPG 模式生成的核心流程与 fault model 选型逻辑ATPG 不是黑盒其输出质量直接受fault model和test type组合影响。文档第 37–47 页将 ATPG 过程拆解为四步闭环fault activation → propagation → capture → reporting。每一步都对应可调参数步骤关键参数典型值作用说明Fault activation-activation_modefull_scan,partial_scanfull_scan要求所有 flop 可控partial_scan允许部分 flop bypass但需set_scan_bypass显式声明Propagation-propagation_modesequential,combinationalsequential模式启用时序路径分析对 at-speed test 必需combinational仅分析组合逻辑速度更快但漏检时序 faultCapture-capture_modelaunch_off_shift,launch_on_capturelaunch_off_shift用于 slow-speed testlaunch_on_capture对应 at-speed test 的 launch-capture cycle必须配合-at_speed开关Reporting-report_levelsummary,detailed,debugdebug级别输出每个 fault 的 activation path用于 root cause 分析生成 deterministic pattern 的典型命令atpg \ -fault_model stuck_at \ -test_type at_speed \ -activation_mode full_scan \ -propagation_mode sequential \ -capture_mode launch_on_capture \ -at_speed \ -pattern_file my_design_atpg_patterns.stil注意-at_speed开关必须与-capture_mode launch_on_capture同时启用否则工具报错MG595892文档注释中反复强调的链接失效问题本质是参数冲突导致内部状态异常。若设计含 clock gating logic还需追加-clock_gating_analysis on否则stuck_atfault 的 propagation 路径会被错误截断。2.3 Fault model 的工程化选择stuck-at 之外的必选项文档第 45–47 页明确列出四种支持的 fault model但实际项目中仅用stuck_at是重大风险stuck_at基础模型覆盖约 70% 的制造缺陷但对 bridging fault、transition delay 无感知transition检测信号跳变延迟必须配合-at_speed使用且需set_timing_derate设置 derate factor典型值 0.85–0.95bridging专用于检测 metal layer short需set_bridge_fault_coverage指定目标覆盖率如95.0工具自动迭代生成 patternuser_definedUDFM通过.udfm文件自定义 fault location 和 behavior适用于 FinFET 工艺特有的 gate oxide defect。验证transitionfault 的有效性# 生成 transition pattern 后必须用 Tessent 的 timing-aware simulator 验证 tessent_sim \ -pattern_file my_design_transition_patterns.stil \ -timing_library my_lib.db \ -output_dir sim_results \ -check_transition_delay输出sim_results/transition_report.txt中Transition Delay Coverage字段必须 ≥ 90%否则需调整-derate_factor或增加set_max_transition约束。3. DFT 规则检查与故障分类让 testability 计算结果可信3.1 Design Rule CheckingDRC的强制项与绕过策略Tessent 的drc_check不是可选步骤而是 ATPG 前置门禁。文档第 105–106 页列出 12 类规则其中 3 类为ERROR级别必须修复规则 ID检查内容修复方法工程影响DRC-001Scan chain 中存在 asynchronous reset 异步复位set_scan_reset_mode synchronous强制同步复位否则 pattern shift 时 flop 状态不可控DRC-007Bus signal 未声明 mutual exclusivityset_bus_exclusivity {bus_a bus_b}显式声明互斥否则 ATPG 生成冗余 pattern降低 fault efficiencyDRC-012Shadow latch 未被正确识别identify_shadow_latch -autoset_shadow_latch_property导致 UDFM fault modeling 失效执行 DRC 的标准流程# 启动完整 DRC 检查 drc_check -all_rules # 查看 ERROR 级别报告关键 report_drc -severity error -output drc_error_report.txt # 仅修复 DRC-001异步复位问题 set_scan_reset_mode synchronous fix_drc DRC-001 # 重新检查确认 ERROR 清零 drc_check -rule DRC-001提示fix_drc命令仅修改工具内部状态不会自动改写 RTL。必须人工在 RTL 中将always (posedge clk or negedge rst_n)改为always (posedge clk)并在顶层 wrapper 中添加同步复位逻辑否则 tape-out 后仍会 fail。3.2 Fault class hierarchy 的实战解读UT/TE/UN 的判定依据文档第 71–76 页定义的 fault class 并非理论分类而是 ATPG 输出的直接字段。report_faults -class命令返回的UTUntestable、TETestable、UNUntested三类其判定逻辑必须掌握UTfault 无法被激活或传播常见原因包括combinational loop组合环、uncontrollable primary input主输入不可控、unobservable primary output主输出不可观测TEfault 可被完整激活-传播-捕获但需满足activation_path_length ≤ 10默认阈值否则降级为UNUNfault 可被激活和传播但 capture phase 无法稳定采样通常因timing violation或clock skew导致。关键参数set_max_activation_path控制 TE/UN 边界# 默认值为 10对深 pipeline design 不够用 set_max_activation_path 25 # 重新运行 ATPG 后原 UN fault 可能转为 TE atpg -fault_model stuck_at -pattern_file updated_patterns.stil report_faults -class验证UNfault 是否真因 timing 导致# 提取 UN fault list report_faults -class UN -output un_faults.list # 对其中任一 fault 运行 path tracing trace_fault_path -fault_id F12345 -output trace_F12345.txttrace_F12345.txt中若出现Timing Violation: setup check failed at FF_abc则证实为 timing 问题需反馈给后端团队优化FF_abc的 placement。3.3 Testability calculation 的可信度验证方法文档第 82 页给出的testability (TE faults) / (TE UT UN faults)公式看似简单但分母中的UT和UN必须人工审计。常见陷阱工具将scan_cell的scan_enablepin 误判为uncontrollable导致大量 UT。验证步骤用report_faults -class UT -output ut_list.txt导出所有 UT fault人工抽查前 10 个检查其fault_location是否指向scan_enablepin若超过 3 个指向scan_enable则执行# 强制声明 scan_enable 为可控 set_controllable_port scan_enable # 重新运行 DRC 和 ATPG drc_check -rule DRC-007 atpg -fault_model stuck_at重算后testability提升值即为scan_enable修复贡献量。某 28nm design 实测显示此操作使 testability 从 91.2% 提升至 94.7%直接满足客户 94% 覆盖率要求。4. UDFMUser-Defined Fault Model的工业级应用从文件格式到 pattern 生成4.1 UDFM 文件格式的硬性语法约束与实例解析UDFM 不是自由文本而是严格遵循 BNF 语法的结构化描述。文档第 58–62 页定义的.udfm文件必须包含且仅包含四个 section// udfm_example.udfm VERSION 1.0 FAULT_MODEL FinFET_GateOxide DESCRIPTION Gate oxide breakdown in FinFET process FAULT_LOCATION { CELL_PIN AND2X1 Y CELL_PIN NAND2X1 Y } FAULT_BEHAVIOR { STUCK_AT 0 STUCK_AT 1 BRIDGING AND2X1/Y NAND2X1/Y } END_FAULT_MODEL // 必须以 END_FAULT_MODEL 结尾且无空行关键约束FAULT_LOCATION中CELL_PIN必须使用cell instance name pin name如u123/Y不能用module_name.YFAULT_BEHAVIOR中BRIDGING的两个 pin 必须属于同一 power domain否则工具报错MG595892再次出现实为跨域 bridging 不支持文件编码必须为UTF-8 without BOMWindows 记事本保存会引入 BOM 导致解析失败。4.2 UDFM pattern 生成的专用命令链与覆盖率验证启用 UDFM 需绕过 standard ATPG flow使用专用命令# 加载 UDFM 文件 load_udfm -file udfm_example.udfm # 指定使用该 fault model atpg \ -fault_model FinFET_GateOxide \ -test_type functional \ -pattern_file udfm_patterns.stil # 生成 coverage report注意必须用 -udfm_report report_udfm_coverage -output udfm_coverage.rptudfm_coverage.rpt中关键字段字段含义达标线Total UDFM faultsUDFM 定义的 fault 总数由FAULT_LOCATION数量决定Detected UDFM faults成功检测的 fault 数≥ 95% of TotalBridging coveragebridging fault 的 pair-wise coverage≥ 90%若Bridging coverage不达标需检查FAULT_LOCATION中是否遗漏关键 cell pin或增加BRIDGING配对数量。5. 故障报告深度解析从 summary 到 root cause 的逐层下钻技巧5.1 Fault reporting 的三级颗粒度控制与场景匹配report_faults命令的-level参数决定输出信息密度不同场景需匹配不同级别summary用于 daily standup仅输出TE/UT/UN数量及百分比命令report_faults -level summary -output daily_summary.txtdetailed用于 DFT review meeting包含每个 fault 的fault_id,location,class,coverage命令report_faults -level detailed -output dft_review.csv输出 CSV 可导入 Excel 排序debug用于 debug session输出activation_path,propagation_path,capture_path三段 netlist path命令report_faults -level debug -fault_id F78901 -output debug_F78901.txt。提示debug级别输出中propagation_path若包含buf_x4cell需检查该 buffer 是否被set_dont_use约束屏蔽——这是导致UNfault 的高频原因修复方式为remove_dont_use buf_x4。5.2 故障子类Sub-class的精准定位表与 action mapping文档第 76–82 页定义的 fault sub-class 是 root cause 的直接线索。下表为高频 sub-class 与 action 对照Sub-class触发条件Actionuncontrollable_piPrimary input 无 scan chain 驱动set_scan_input声明该 input 为 scan inputunobservable_poPrimary output 无 scan chain 采样set_scan_output声明该 output 为 scan outputcombinational_loopRTL 中存在 feedback loopbreak_loop -net net_name插入 break pointclock_gating_blockedClock gating cell 的 enable pin 不可控set_controllable_port cg_en执行report_faults -sub_class后按 sub-class 分组统计# Linux 下快速统计 sub-class 分布 grep Sub-class: dft_review.csv | cut -d, -f5 | sort | uniq -c | sort -nr若combinational_loop占比 5%则必须启动 loop breaking 流程否则 ATPG 无法收敛。5.3 Bridge coverage estimate 的可信度校验方法文档第 65 页的Bridge Coverage Estimate是估算值必须用物理验证确认。校验步骤从report_faults -class TE中提取所有 bridging fault id对每个 fault id 运行simulate_fault -fault_id Fxxx -output sim_Fxxx.vcd用 VCS 或 Xcelium 仿真sim_Fxxx.vcd检查scan_out波形是否呈现预期 bridging effect如01→11统计成功复现的 fault 数量计算真实 bridging coverage。某项目实测发现工具报告Bridge Coverage Estimate: 92.4%但物理仿真仅83.1%差值源于FAULT_LOCATION中未包含metal_layer_2的 pin补全后提升至91.8%。本文还有配套的精品资源点击获取
返回列表