首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
芯片出厂前的体检:DFT扫描链与ATPG全流程解析
📅 2026/9/10 5:09:38
✍️ 爱科研究院
👁 阅读 3,247
芯片没测过的风险远比你想的可怕。一粒指甲盖大小的SoC内部晶体管数量动辄几十亿生产过程中只要有一个金属层桥接、栅氧化层针孔、或者是光刻胶残留造成的开路这颗芯片就是废品。但问题在于出厂时它是“沉默”的——你不主动想办法去问它“你身体里哪里坏了”它绝对不会告诉你。这就是DFT存在的意义。很多刚入行的数字前端工程师或者在校学生对DFT的印象停留在“后端那群人搞的东西”“综合之前插一堆寄存器进去”但真正做一次完整的DFT流程、看完Scan和ATPG的log之后你会发现这个方向水很深也很有意思。这篇文章我想结合自己做过的项目把芯片出厂前的这套“体检系统”从头到尾讲透包括它解决什么问题、用什么技术、流程怎么走、工具怎么用、还有踩过的坑。1. 为什么芯片要“出厂前体检”DFT解决的问题1.1 流片失败后的至暗时刻先讲个真实经历。我之前参与过一颗MCU芯片的验证前端功能仿真跑了几个月覆盖率勉强推到90%觉得稳了直接送去流片。回来之后焊到测试板上第一天调SPI不通第二天查I2C也不通第三天发现连基本的寄存器读写都异常。当时整个组都麻了因为从功能仿真的角度这些模块应该都是好的。后来求助DFT的同事他拿到芯片先用Boundary Scan把IO检查了一遍再用Scan Chain把内部逻辑全部灌入测试向量跑了一遍诊断测试十分钟就定位出一个横跨三个模块的长走线桥接缺陷。那一刻我才意识到DFT不是“增加测试点”这么简单它本质上是给芯片内部几百个模块建立了一套可观测、可控制的通道没有这套通道出了问题你只能对着示波器瞎猜。这个场景其实每天都在全球各个芯片公司上演。所以行业里有一句老话Design for Testability设计的另一半责任就是让故障无处可藏。1.2 DFT的核心目标与成本逻辑DFT的全称是Design for Test中文叫可测试性设计。它不是芯片的一个模块而是一整套设计方法论目的是让芯片制造完成之后能被高效、低成本地测试出是否存在制造缺陷。这里要重点理解一个概念制造缺陷不等于功能Bug。功能Bug是设计失误制造缺陷是生产过程中的物理问题。一颗芯片逻辑设计完全正确但光刻、刻蚀、沉积、CMP任何一个环节出现波动都可能产生短路、断路、阈值电压偏移。DFT不管你的设计对不对它只管“做出来的芯片物理上健不健康”。从成本角度看测试费用在芯片总成本里占比相当惊人。一颗28nm的芯片CPChip Probing加FTFinal Test两道测试流程测试时间每增加一秒单片成本可能增加几美分。听起来不多但月产百万颗的芯片一年下来就是几百万美元。所以DFT不只是提高故障覆盖率它还在拼命压缩测试向量长度、减少测试通道数、优化测试调度用最少的时间测出最多的故障——这套优化逻辑和快递公司规划派送路线是一模一样的。2. DFT的三大支柱技术扫描链、BIST、边界扫描2.1 扫描链Scan Chain让时序逻辑变成可控可观测数字芯片里绝大部分逻辑是时序逻辑——触发器Flip-Flop加上组合逻辑。正常工作时触发器每个时钟沿采样数据状态是随时间演进的你无法从外部直接强迫某个触发器进入指定状态也无法把所有内部状态一次性读出来。扫描链的思路很朴素把芯片切换到“测试模式”时所有触发器串联成一条或几条移位寄存器链。测试时外部通过Scan Clock和Scan Enable信号把测试向量从Scan In端口一位一位移入所有触发器然后切换回功能模式让组合逻辑跑一个周期再把结果从Scan Out端口移出来和期望值比对。听起来简单但工程实现有大量细节。比如扫描链的低功耗设计芯片进入测试模式时所有触发器同时翻转功耗异常高峰值动态电流超过功能模式的几倍很正常电源网络本来只为功能场景设计测试时可能直接IR Drop过大导致测试失败。解决办法包括在Scan Clock上加门控让不同时间段只有部分扫描链工作或者把触发器划分到多条短链上同一时刻只激活一条。还有一个问题是扫描链本身的故障。一条扫描链上有几千个触发器只要中间一个触发器坏了后面所有数据全部错乱。而且扫描链故障往往表现为大片逻辑“无法测试”这时候就要用Scan Chain Diagnosis去定位具体是哪个物理位置的触发器出了问题。2.2 BIST内建自测试让芯片自己给自己体检扫描链需要外部ATE自动测试设备配合向量很长测试时间也长。但有些模块比如SRAM、ROM这类存储单元有规律性缺陷模式——固定0、固定1、地址译码错误、单元间耦合干扰用March C算法可以很高效地覆盖。这类模块如果用扫描链去测费用高、效果差所以行业普遍采用BIST方案。BIST是Built-In Self Test的缩写字面意思就是芯片内置自测电路。在功能模式时它完全透明不参与任何工作测试模式时内部的状态机生成测试激励送入被测存储单元然后自动把响应结果压缩成特征值Signature最终输出一个Pass/Fail信号。很多人的误区是BIST只能测存储其实不然。逻辑BISTLBIST也能测数字逻辑它用LFSR线性反馈移位寄存器生成伪随机向量再用MISR多输入特征寄存器压缩结果。工业界的做法往往是LBIST用于系统自检比如汽车芯片上电时快速跑一遍自检确认逻辑链路健康而高端ATE测试还是用扫描链加ATPG因为随机向量的故障覆盖率不够高需要配合确定性向量补足。2.3 边界扫描JTAG从板级测试到芯片内部调试边界扫描也就是IEEE 1149.1标准大家更熟悉的名字是JTAG。它最初的目的是解决PCB板级测试难题——BGA封装焊点都在芯片肚子底下探针够不着而且板子密度越来越高传统的飞针测试已经不现实。边界扫描在芯片每个IO引脚旁边加一个移位寄存器单元所有单元串联成链可以从外部把数据“灌到”引脚上也可以“读出”引脚状态相当于从芯片外围建立了一条数字观察走廊。JTAG接口一般需要四根信号线TCK、TMS、TDI、TDO。很多人从单片机或者ARM开发的角度只把它当成烧录程序、调试固件的入口但做DFT的人知道它的真正价值在于芯片没进入系统时先用BSDL文件Boundary Scan Description Language做板级互连测试检查芯片之间走线有没有短路开路通过JTAG访问内部的测试接口比如TAP控制器、测试模式寄存器控制进入Scan测试模式、BIST模式还可以读取芯片IDCODE在产线上快速识别芯片批次和型号防止芯片装错板。2.4 DFT技术选型对照表技术测试对象核心原理优势劣势扫描链ATPG数字逻辑触发器串链外部移入/移出向量故障覆盖率极高确定性诊断向量长ATE测试时间长存储BISTSRAM/ROM内置状态机生成March向量并压缩结果覆盖率稳定测试时间短增加面积不适用于随机逻辑逻辑BIST数字逻辑LFSR生成伪随机向量MISR压缩可片上自检无需ATE高频协作覆盖率不如定向ATPG边界扫描IO引脚/板级互连边界寄存器串链外部读写无物理探针接触板级测试利器只覆盖IO边界不覆盖内部逻辑3. 从RTL到GDSIIDFT的完整实现流程3.1 DFT规划到底哪些模块要插入扫描链很多新人会问DFT是不是就是流片前在网表里跑一个insert_dft命令就完事了绝对不是。DFT设计是一个从架构阶段就要介入的系统工程。第一步是规划。RTL设计还在写的时候DFT工程师要和架构师、前端工程师一起决定几个关键问题哪些模块需要扫描测试哪些不需要。比如模拟模块、PLL、高速SerDes物理层通常不进扫描链它们有独立的测试策略时钟和复位怎么处理。扫描测试需要稳定的外部时钟芯片内部的PLL此时往往被旁路掉所有时钟域统一由一个外部测试时钟驱动存储模块用BIST还是直接通过扫描链测试。容量大的SRAM一般用BIST小块的寄存器堆可能直接扫IO引脚怎么分配。测试模式的激发信号如Scan Enable、Test Mode要和功能引脚复用还是用独立引脚兼顾封装成本。这个阶段的产出是一份DFT Spec里面写清楚每个测试模式的定义、时钟方案、IO复用方案。规范不写清楚后面所有工作都是夹生饭。3.2 扫描链插入用工具把触发器串起来RTL经过综合Synthesis之后变成门级网表此时的触发器虽然存在但彼此独立。扫描链插入就是把这些触发器的数据输入端改接到前一个触发器的输出端形成链状结构。这里涉及一个核心的电路改动正常触发器只有一个D输入扫描插入后变成带SDFScan Data Flip-flop功能的双输入结构数据端接功能逻辑扫描输入端接前一级触发器输出通过Scan Enable信号二选一。工业级的主流做法是用Synopsys的DFT Compiler或者DFTMAX以及Cadence的Modus DFT。很多招聘JD里写的“tessent dft”指的是Mentor现Siemens EDA的Tessent DFT工具套件它在Scan插入、ATPG、Diagnosis领域市场占有率极高。无论用哪家工具核心逻辑一致为每个触发器建立Scan Cell连接成Scan Chain通过Scan Clock和Scan Enable控制。插入完扫描链之后还要做DRC检查。扫描时钟是否统一、是否有组合逻辑穿过时钟门、Scan Enable信号能否在测试模式下被移位时钟安全地驱动、异步复位信号是否会被测试模式干扰。这些检查项在Tessent和DFTMAX里都有对应的dft_drc的规则比如违规的时钟域、跨域路径、不可控的复位等。DRC不过后面ATPG跑出来的覆盖率就是虚的。3.3 ATPG用算法生成测试向量扫描链插好了紧接着就是用ATPGAutomatic Test Pattern Generation自动测试向量生成工具生成测试向量。业界主流工具是Tessent TestMax和TestMAX ATPG以及Synopsys系TetraMAX现在整合到TestMAX里了。ATPG的核心算法基础是D算法D-Algorithm、PODEMPath-Oriented Decision Making、FAN算法。这些算法本质上都是搜索算法——在布尔网络里寻找一条路径把某个节点的故障效应传播到可观测输出。实际工程中对于复杂设计纯组合逻辑的ATPG已经不能用穷举法Tessent等工具会结合故障模拟Fault Simulation、动态压缩Dynamic Compaction等技术把几万个故障压缩进几千条测试向量。覆盖率是DFT项目里最核心的指标之一。业界常说的Test Coverage或者Fault Coverage指的是检测到的故障数占可检测故障总数的比例。一个设计如果可检测故障是100万个测出98万个覆盖率就是98%。良率合格的芯片覆盖率一般要求95%以上汽车电子ISO 26262或者航空航天应用覆盖率要求往往在99%以上。但覆盖率不是越高越好越到后面每提高一个点付出的向量增加量和测试时间成本都是指数级上升的所以DFT工程师的工作不是“无限逼近100%”而是“在预算内达到最好的覆盖率”。3.4 DFT SDC约束最容易出问题的环节跑ATPG之前工具必须知道每一根时钟、复位、异步信号的准确约束。DFT流程里这个文件叫DFT SDC可以理解为芯片功能SDC在测试模式下的“变体”。常见问题包括功能模式下的时钟约束是多个时钟域的但测试模式要用单一测试时钟去推动所有扫描链SDC必须正确定义测试时钟的频率和相位关系Scan Enable信号是测试模式的关键控制信号SDC里要给它设置set_case_analysis或set_false_path避免工具认为它是一个时钟异步复位信号在测试模式时一般保持无效状态需要在SDC中设置跨时钟域路径在功能模式下可能设置成set_false_path但在扫描测试模式下扫描链本身可能跨越时钟域这部分不能用false path直接屏蔽。SDC写错的表现很隐蔽——ATPG能跑出来覆盖率看起来也不错但到了仿真或者实际ATE测试时某些模式的测试结果就是不对。我自己就吃过这个亏有一版设计因为忘了在Scan Enable上设置时钟域同步约束导致Tessent插入的扫描链在某些频率下出现setup violation最终多花了两周来排查。4. DFT项目中的常见问题与排查技巧实录4.1 Pattern仿真通过ATE上却失败这是DFT工程师最头疼的问题Tessent生成的Pattern在RTL仿真、网表仿真里都正常Pass但一到ATE实机测试就啪一下挂掉。很多人第一反应是ATE时序没配好确实这是一大类原因但更深层的问题往往出在IR Drop和功耗。测试Pattern虽然逻辑正确但它是一组“最坏功耗场景”——扫描链移位时所有触发器同时翻转组合逻辑也全速切换此时芯片局部电源瞬间被拉低触发器保持不住数据。解决手段包括在测试Pattern里插入“分隔周期”gap给电源网络缓冲恢复的时间采用低功耗扫描结构比如Fused Scan、Clock Gating感知扫描或者在V93000、UltraFlex这类ATE上降低测试频率换取更大的时序裕量。4.2 覆盖率上不去别急着加向量ATPG跑完发现覆盖率只有88%目标95%这时候怎么办很多刚入行的做法是盲目加压向量压缩选项或者是把ATPG工具的时间参数放宽这类措施往往事倍功半。正确思路是回到源头去查“哪些故障没测到”Tessent和TestMAX都能输出Uncoverage故障列表拿到列表后逐一分类Uncontrollable/Unobservable某些触发器的时钟或复位在测试模式下不可控导致这条路径测不了。需要回到DFT Spec里确认时钟方案是否合理Constraint太紧SDC里设的约束把某些路径当false path忽略掉了故障变成了不可测。这种情况实际不是不可测是你自己把它“屏蔽”了模拟模块隔离边界数字逻辑和模拟模块交界的地方模拟模块的行为在测试模式下没有定义直接导致一片逻辑不可测。堵住了这些漏洞覆盖率往往能自然提升好几个点。4.3 测试时间太长扫描链分组的艺术假设一颗芯片内部有60万个触发器全部串成一条扫描链每个触发器对应移入1bit数据光移位就需要60万个周期一条测试向量就有120万周期移入移出。如果ATPG生成了2000条向量一共就是24亿周期2GHz测试时钟也要1.2秒一颗芯片这还没算上Apply周期和测试间隔一片下来完全不可接受。所以扫描链必须分组。业界一般把扫描链分成几十上百条每条几百到几千个触发器并行移位。但分链会占用更多芯片引脚每条链至少需要独立的Scan In和Scan Out引脚又受封装限制最终是一个折中。还有一类更进阶的做法是压缩扫描Compressed Scan比如Tessent的EDTEmbedded Deterministic Test技术通过片上解压缩器用少量输入通道驱动大量扫描链兼顾覆盖率和测试时间这也是目前主流的高端DFT方案。4.4 测试模式的功耗约束没过前面提到过测试模式功耗过高的问题但实际项目中这个问题往往到了Signoff前才暴露。芯片的功耗分析通常只做功能模式测试模式被忽略结果TestMAX跑出Pattern之后做功耗仿真发现超出功耗预算100%。解决思路有三层架构层分多条扫描链错峰激活或者划分Shift和Capture阶段Capture阶段所有扫描链关时钟只有组合逻辑翻转功耗天然低一半实现层在DC综合阶段就对扫描链做低功耗处理比如自动插入ICGIntegrated Clock Gating让测试模式下不相关的逻辑块时钟关断Pattern层在Pattern内嵌入Power-Aware的Mask逻辑允许工具生成Pattern时主动屏蔽一部分故障的检测换取功耗不超限。4.5 常见问题速查表现象可能原因排查方向Pattern在ATE上偶发FailIR Drop过压降频测试插入gap周期核对供电覆盖率低于目标SDC约束错误回看false path设置、时钟忽略设置覆盖率低于目标模拟边界不可控增加隔离逻辑或测试通路扫描链测试自身无法Pass扫描链上Hold违例检查Shift时钟偏移、扫描DFF的时序例外BIST测试报Fail存储阵列物理缺陷用诊断模式定位X/Y坐标云图还原测试时间超预算扫描链数量不足增加链数量或采用EDT压缩5. 芯片不同形态下的DFT差异5.1 SoC和MCU的DFT复杂度完全不同如果你主要接触的是STM32、ESP32这类MCUDFT层面的体验相对轻得多——这些芯片通常规模小、时钟域少、IP成熟度高流片前DFT验证主要是保证Scan Chain和BIST能跑通覆盖率做到95%以上就是稳健。但真正到了RK3588、BR100这类大型SoCDFT完全是另一个量级的工程。SoC里各种CPU、GPU、NPU、DSP、多媒体编解码器来自不同IP厂商每个IP都有自己的测试结构。DFT工程师要保证这些独立测试结构和总线的互连测试是完整的还要处理不同时钟域、不同电压域下的扫描链插入策略。做一颗复杂SoCDFT团队人数通常有几十人每人负责几个模块的Tessent/TestMAX流程最后在顶层做full-chip DFT集成。5.2 存储类芯片和专业芯片的DFT如果是Flash、DRAM这类存储芯片DFT的重心会偏向BIST和修复技术。比如Flash里存在坏块是常态出厂前要通过ECC和冗余行/列的方式把坏块替换掉这套逻辑也属于广义DFT的范畴。又比如电源管理芯片测试的重点可能是模拟参数——用DFT方式把运放的失调电压、基准电压的精确值引到测试引脚上让ATE直接数字化读取。6. DFT的未来方向以及给工程师的建议6.1 先进工艺下的DFT挑战进入7nm、5nm、3nm节点之后芯片缺陷模式越来越复杂。FinFET结构的亚阈值漏电增大、局部工艺波动加剧、多重曝光引入的光学邻近效应都让传统的“固定故障模型”不够用。业界正在逐步引入基于延迟故障Transition Delay Fault和基于路径延迟的测试这类测试需要更精细的时序分析对ATPG和扫描结构的约束也更严格。另一个大趋势是在系统中的应用内自测试。汽车自动驾驶芯片、工业控制芯片都要求开机时快速自检运行中还能周期性做BIST确保硬件没有因为老化或环境应力产生新的故障。这时候逻辑BIST的价值就体现出来了——它不需要外部ATE芯片自己就能完成整个体检。6.2 给准备入门DFT的工程师几句心里话在DFT领域工具本身的熟练度三个月就能摸熟真正的核心竞争力是对“故障模型”和“测试成本”的理解。我建议想入坑的朋友多去翻翻Tessent和TestMAX的用户手册尤其注意理解DRC报告里每一条错误的含义它们不是无意义的报错是工具在对你的设计做“体检”——就像这篇文章标题说的一样DFT本身就是芯片的体检医生而ATPG报告就是那张体检单。如果你现在在学校的课程设计里接触不到这么复杂的EDA工具可以先从FPGA上感受一下扫描链的移位逻辑。FPGA的触发器可以人为串成一条长链用JTAG或者自定义逻辑往里灌数据这种自己动手把设计“扒开来看”的感觉会让你对DFT的理解牢固很多。等真正走上工作岗位你手里握着的就不只是几行RTL代码而是整个芯片质量的生命线。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/9/10 5:09:38
三菱PLC与MCGS组态的广场喷泉控制系统设计实践
2026/9/10 5:04:38
用Slidev插件把年终总结做成数据可视化PPT
2026/9/10 5:04:38
Ubuntu 20.04无人机开发环境构建:LTS基座与实时性调优
2026/9/10 6:34:43
Hot100数组题全攻略:双指针、前缀和与哈希表套路详解
2026/9/10 6:34:43
SpringBoot马拉松赛事服务一体化平台:从需求到部署的完整实战复盘
2026/9/10 6:34:43
TVBoxOSC 快速上手指南:电视盒子应用的自动构建与版本追踪
2026/9/10 6:34:43
CANN/ge GetLocation API
2026/9/10 6:34:43
用ponytail技能包将零散素材一键收拢成结构化文章
2026/9/10 6:29:43
CANN/ge格式建模与API语义解析
2026/9/10 0:04:20
AI搜索的信任缺口:企业内容如何在答案时代自证可信
2026/9/10 0:04:20
Spring Boot+Vue+Node.js售后服务系统开发实战
2026/9/10 0:04:20
SpringBoot+Vue民宿预订管理系统开发实践:从架构设计到部署上线
2026/9/10 2:30:52
超人会飞不算本事:系统稳定依赖清晰规则与边界设计
2026/9/10 5:51:31
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
2026/9/9 5:25:52
基于CNN的调制信号识别:MATLAB实现时频图分类实战