
1. 从“黑箱”到“白箱”为什么我们需要DFT做硬件设计尤其是芯片设计的朋友肯定都听过DFTDesign for Testability可测试性设计这个词。但很多时候它就像一个“黑箱”——项目流程里必须过的一道关卡一堆脚本、一堆工具、一堆看不懂的波形和报告。后端工程师觉得它占用了宝贵的面积和时序裕量前端工程师觉得它打乱了自己优雅的代码结构测试工程师则对着成千上万的测试向量发愁。大家似乎都在为它“打工”却很少有人真正停下来想我们到底为什么需要DFT它解决了什么根本性问题我干了十几年数字芯片设计从最初的不以为然到后来的敬畏有加踩过的坑不计其数。最惨痛的一次教训是一颗流片回来的芯片功能仿真一切完美但就是有5%的芯片在ATE自动测试设备上死活过不了。排查了整整两个月最后发现是一个深藏在逻辑深处的触发器Flip-Flop在特定工艺角下无法被正常复位而我们的测试向量根本没有覆盖到这个点。那次项目延期和额外的测试成本让我彻底明白了DFT不是“可选项”而是“生存项”。简单来说DFT的核心目的就是让生产出来的芯片“可观察”和“可控制”。你可以把它想象成给一栋复杂的大楼芯片布设了完善的消防探头观察点和消防阀门控制点。大楼正常运行时你不需要它们但一旦起火制造缺陷你需要迅速定位火源故障点并切断相关区域隔离故障。没有DFT的芯片就像一栋没有探头和阀门的大楼一旦内部某个房间出了问题你从外面根本无从知晓更别提修复了。所以DFT要解决的根本矛盾是芯片内部电路的高度集成和复杂化与外部测试引脚极其有限之间的矛盾。我们不可能把芯片内部每一个节点的信号都引到管脚上来观察。DFT就是通过在设计阶段就植入一些额外的电路结构用最小的代价面积、功耗、性能换来对芯片内部状态最大程度的掌控力。接下来我们就一层层剥开DFT这个“白箱”看看它到底包含了哪些关键技术和设计哲学。2. DFT的核心三板斧扫描链、内建自测试与边界扫描谈到DFT技术虽然流派众多但有三项是基石中的基石堪称“三板斧”。几乎所有的复杂数字芯片都离不开它们。2.1 扫描链把状态“串”起来看这是DFT最经典、应用最广泛的技术没有之一。它的核心思想非常巧妙把芯片中所有或大部分的时序元件主要是D触发器改造成一种具有两种工作模式的特殊单元——正常功能模式和扫描测试模式。在正常模式下它们就是普通的触发器参与电路的功能运行。在测试模式下这些触发器会被首尾相连变成一条长长的移位寄存器链也就是扫描链。这样一来我们就可以通过少数几个专用的测试引脚扫描输入SI、扫描输出SO、扫描使能SE像串糖葫芦一样把特定的测试向量Test Pattern一位一位地“扫入”芯片内部覆盖所有触发器的状态。然后让电路运行一个功能周期在测试模式下组合逻辑的输入由扫描链提供再将新的状态一位一位地“扫出”来观察。实操要点与避坑经验链的划分与平衡一个大芯片通常不止一条扫描链。如何划分原则是平衡链长。如果一条链特别长测试时间就会很长测试时间与最长链的长度成正比。通常我们会根据物理布局和时钟域来划分尽量让各条链长度相近。我常用的做法是在综合阶段就定义好扫描链的拓扑结构而不是交给后端工具自动处理后者容易产生难以平衡的长链。时钟与时钟使能扫描链的时钟必须干净、可控。对于带有时钟门控的触发器要特别小心需要插入测试控制逻辑保证在测试模式下时钟门控被旁路时钟能直接驱动触发器。这里最容易出问题的是那些由组合逻辑生成的内部时钟必须处理。扫描压缩随着链长增加测试数据量向量大小和测试时间会爆炸式增长。扫描压缩技术应运而生它通过在扫描链的输入输出端加入解压缩器和压缩器用更少的测试引脚驱动更多的内部扫描链从而大幅减少测试数据量。但要注意压缩会引入一定的故障覆盖率损失需要在压缩率和覆盖率之间做权衡。注意插入扫描链会影响时序。工具在替换普通触发器为扫描触发器时会引入额外的选择器MUX这会增加触发器的D端到Q端的延迟通常称为扫描MUX延迟。在时序紧张的设计中这部分延迟必须被考虑进去否则可能导致建立时间违例。2.2 内建自测试让芯片自己“体检”扫描链主要针对的是芯片中的随机逻辑组合逻辑时序逻辑。但对于芯片中另一大类模块——存储器SRAM ROM Register File等和某些规则结构如PLL SerDes扫描链就力有不逮了。这时就需要BIST。MBIST针对存储器。它是在芯片内部集成一个小型测试引擎这个引擎能自动生成测试序列比如March算法能检测存储单元的各种故障粘滞故障、跳变故障、耦合故障等施加给待测存储器并比较读出结果。MBIST引擎通常由测试控制器、地址生成器、数据生成器和响应分析器组成。实操要点与避坑经验算法选择不是算法越复杂越好。复杂的March算法覆盖率高但测试时间长、面积开销大。需要根据存储器的用途、容量和可靠性要求来选择。例如对缓存Cache可能用较简单的算法对存放关键数据的存储器则需用更全面的算法。修复机制对于大容量存储器良率是关键。MBIST常常与冗余修复技术结合。当BIST检测到故障单元时会记录其地址并通过熔丝或电子熔丝技术用备用的冗余行/列来替换故障行/列。这部分的设计和流程非常复杂需要与Foundry的工艺特性紧密结合。时序收敛MBIST逻辑通常运行在比存储器本身更低的频率下但它的插入不能影响存储器在功能模式下的关键时序路径特别是地址和数据线的路径。2.3 边界扫描芯片的“外部诊断仪”如果说扫描链和BIST是针对芯片内部的那么边界扫描则是针对芯片与外部世界的接口以及多芯片组成的板级系统。它的标准是IEEE 1149.1也就是常说的JTAG。它在每个I/O引脚处插入一个边界扫描单元这些单元在测试模式下可以串成一条链。通过标准的JTAG接口TDI TDO TMS TCK我们可以控制芯片每个引脚的输出值。捕获芯片每个引脚的输入值。测试板级互连的短路、开路故障。实操要点与避坑经验不只是测试JTAG接口如今已远超测试范畴成为芯片调试、编程、内窥监控的必备通道。在设计时一定要为JTAG TAP控制器预留好接口和必要的内部访问总线如通过JTAG访问内部寄存器。安全性正因为JTAG功能强大它也成为安全攻击的潜在入口。对于安全敏感的芯片需要考虑JTAG的禁用或锁定机制。板级DFT在系统板上可以将所有芯片的JTAG链串接起来实现对整个板级互连的测试。这时要注意链上不同芯片的IDCODE冲突问题以及链过长导致的测试时钟TCK频率下降问题。3. DFT的实现流程一个与设计并行的生命线很多人误以为DFT是设计完成后的一个“附加步骤”这是大错特错的。DFT必须与前端设计、逻辑综合、物理实现等流程深度融合并行开展。一个典型的、基于扫描链和MBIST的DFT实现流程如下3.1 前期规划与设计约束在RTL编码阶段DFT工程师就需要介入。制定DFT架构文档明确哪些模块需要插入扫描链哪些存储器需要MBIST时钟方案如何测试模式如何切换电源域如何隔离等。定义测试协议确定扫描链的数量、长度目标、压缩比、时钟方案是否用ATE的时钟还是用内部PLL。对于混合信号芯片还要规划模拟测试总线。施加设计约束通过SDCSynopsys Design Constraints文件为综合工具指明哪些是测试时钟、测试信号以及它们在测试模式下的时序要求如时钟频率、信号转换时间。一个常见的错误是只做了功能模式的约束忘了测试模式导致插入扫描链后时序无法收敛。3.2 RTL级插入与验证在RTL综合阶段使用DFT工具如Synopsys的DFT Compiler Mentor的Tessent进行扫描链的插入。扫描替换工具将普通的触发器替换为扫描触发器。扫描链连接根据架构文档将扫描触发器连接成指定的链。测试逻辑插入插入时钟控制逻辑、复位控制逻辑、测试模式控制逻辑等。生成测试协议模型输出一个包含所有测试配置信息的模型文件供后续的ATPG工具使用。这个阶段必须进行充分的验证功能等价性检查确保插入DFT逻辑后的网表与原始网表在功能上完全等价Formal Equivalence Checking。测试协议验证通过仿真验证测试模式的切换、扫描链的移位操作、BIST的启动等是否正常。我习惯写一个简单的测试平台模拟ATE的行为对DFT逻辑进行基础验证。3.3 ATPG生成“检测试剂”ATPG是自动测试向量生成。你可以把它想象成根据电路结构和故障模型最常用的是固定型故障模型即某个节点 stuck-at-0 或 stuck-at-1自动生成一套最有效的“检测试剂”测试向量。核心步骤故障列表生成工具根据网表列出所有需要检测的潜在故障点。向量生成针对每个故障计算需要施加到原始输入和扫描链的输入值称为“激励”以及期望从原始输出和扫描链输出观察到的值称为“响应”。故障模拟用生成的向量去模拟电路看哪些故障能被检测出来并剔除能被同一向量检测的冗余故障。向量压缩与格式化将生成的向量压缩成紧凑的格式并转换成ATE设备能够识别的波形格式如STIL WGL。关键指标故障覆盖率。这是衡量测试向量有效性的黄金标准。通常要求达到95%甚至98%以上。覆盖率达不到怎么办分析未覆盖故障工具会报告未覆盖的故障点。常见原因有冗余逻辑故障无法传播到观测点、不可控的节点如某些异步逻辑、ATPG工具本身的算法限制。添加测试点对于难以控制和观测的节点可以在设计上增加额外的逻辑如与门、或门、触发器专门用于测试这就是“测试点插入”。这会增加面积但能有效提升覆盖率。3.4 物理实现与签核DFT后的网表需要走完物理实现流程布局布线。这里有几个关键点扫描链重排序为了减少布线拥塞和线长后端工具通常会对扫描链进行物理重排序即按照触发器的物理位置重新连接扫描链而不是按照综合时的逻辑顺序。这能显著优化绕线。测试时序签核必须对测试模式进行独立的时序分析STA。测试时钟频率通常低于功能时钟但测试模式下的路径可能与功能模式不同。要特别检查扫描链的移位路径shift path和捕获路径capture path是否满足时序。功耗分析扫描移位时大量触发器同时翻转会产生远高于功能模式的瞬时功耗IR Drop可能导致测试失败。需要在ATPG阶段采用低功耗测试技术如移位时关闭部分链或使用Launch-on-Capture的测试方式。3.5 测试程序开发与硅后验证生成最终的测试向量后需要将其转换成ATE测试程序。同时第一批硅片回来后DFT测试是验证芯片是否制造成功的首要关卡。调试测试程序在ATE上调试测试程序确保向量正确加载响应正确比对。这个过程常常会发现设计或流程中未预料到的问题比如电平不匹配、时序偏差等。良率分析与诊断对于测试失败的芯片可以利用诊断工具结合失效日志定位到具体的物理故障点如某个门电路、某段互连反馈给制造厂进行工艺改进。4. 高级议题与未来挑战基础的DFT三件套足以应对大多数情况但随着工艺演进和设计复杂化新的挑战不断涌现。4.1 低功耗设计下的DFT现代芯片普遍采用时钟门控、电源门控等低功耗技术这给DFT带来了巨大麻烦。时钟门控在测试模式下必须保证扫描链的时钟是自由的。需要插入测试控制逻辑旁路功能模式下的时钟门控。对于复杂的时钟门控网络这可能会变得非常复杂。电源门控当某个电源域被关断时其内部的扫描链状态会丢失也无法测试。解决方案包括在测试期间保持该域上电或者采用特殊的隔离和保持策略。这需要与电源管理单元进行精细的协同设计。测试功耗管理如前所述ATPG需要采用各种技术来降低测试期间的峰值功耗和平均功耗防止电压跌落和过热。4.2 高速接口与模拟混合信号测试对于SerDes PLL ADC/DAC等高速或模拟模块传统的数字DFT方法不再适用。基于逻辑的BIST为模拟模块设计数字化的BIST电路例如为ADC生成斜坡信号并通过数字逻辑分析其输出码的单调性、失码等。测试总线使用模拟测试总线如IEEE 1149.4将关键模拟节点的信号引到有限的测试引脚上。基于功能的测试更多依赖于在特定测试模式下通过数字逻辑配置模拟模块并测量其关键参数如PLL的锁定时间、抖动。4.3 系统级测试与硅后生命周期管理芯片不再是孤岛而是SoC片上系统的一部分。DFT需要向上延伸到系统级。Hierarchical DFT对于包含多个IP核的SoC采用层次化的DFT方法。每个IP核有自己的扫描链和BIST在顶层进行集成和控制。这有利于IP复用和并行开发。内建自修复结合BIST和eFuse/ROM在芯片上电时自动进行自检和修复提升出厂良率和可靠性。硅内监控与调试DFT基础设施如扫描链、JTAG在芯片出厂后可以成为现场调试、性能监控、甚至预测性维护的宝贵资产。5. 常见问题与实战排坑指南干了这么多年有些坑是反复出现的。这里列几个典型的希望能帮你绕过去。问题一故障覆盖率卡在92%上不去怎么办排查步骤看报告首先仔细阅读ATPG工具生成的未覆盖故障报告。工具通常会分类比如“不可控”、“不可观测”、“ATPG放弃”等。聚焦“不可控/不可观测”这类故障通常指向设计本身的问题。用调试工具追踪这些节点的来源。常见原因异步设计、三态总线、模拟黑盒、未初始化的存储器、由未扫描的触发器驱动的逻辑。检查设计约束确认SDC中的测试约束是否正确、完整。比如是否将所有的测试时钟、测试模式信号都正确定义了是否错误地将某些节点设为了常数考虑测试点插入如果未覆盖逻辑是关键路径或重要功能与设计工程师沟通评估添加少量测试点的可行性。调整ATPG策略尝试不同的故障模型如转换故障、路径延迟故障或者调整工具的算法努力程度effort level有时会有奇效。问题二ATE测试时扫描链移位失败但仿真通过。排查思路这几乎是硅后调试最经典的问题。原因一定是测试环境与仿真环境的差异。时钟与时序首先怀疑时钟。ATE驱动扫描时钟的精度、边沿陡峭度、与扫描使能信号的时序关系是否与仿真模型一致用示波器测量ATE引脚的实际波形。检查测试协议中时钟定义周期、脉冲宽度是否正确。复位状态芯片上电后扫描链是否处于一个确定的、已知的状态测试程序中的复位序列是否充分有些触发器的复位是异步的需要足够的复位脉冲宽度。电平与驱动ATE驱动器的电压电平Voh Vol是否与芯片的输入电平要求匹配特别是如果芯片使用了多种电压域。ATE的驱动能力是否足够向量格式确认ATE加载的向量格式STIL WGL是否正确有无位序反转、周期对齐错误。物理缺陷如果以上都排除了可能是硅片的制造缺陷如扫描链上的某个触发器损坏或链间短路/开路。这时需要借助诊断工具进行精确定位。问题三插入扫描链后功能时序出现违例。解决方案区分模式首先用STA工具分别分析功能模式和测试模式。确认违例是只在测试模式出现还是两种模式都有。扫描MUX延迟如果是测试模式特有违例重点检查扫描触发器的MUX延迟是否被正确建模并在时序分析中考虑。确保.lib库文件中扫描触发器的时序弧信息准确。时钟路径测试模式下时钟路径可能被切换例如从PLL切换到ATE时钟源。检查测试时钟树是否合理时钟延迟和偏斜是否可控。综合与布局约束在逻辑综合和物理布局时就对测试模式施加时序约束。可以适当放宽测试模式的时钟频率要求通常测试频率低于功能频率但必须保证没有保持时间违例。增量优化如果违例路径很少可以在物理设计阶段进行增量优化例如对这些路径进行局部尺寸调整或缓冲器插入。问题四MBIST运行时芯片电流异常大甚至导致压降。原因与对策MBIST尤其是并行测试多个存储器时会产生巨大的开关活动性。分时测试修改MBIST控制器不要同时启动所有存储器的BIST而是让它们分时、分批进行。这虽然增加了总测试时间但大幅降低了峰值功耗。降低测试频率MBIST不需要运行在最高功能频率下。在满足测试质量的前提下尽可能降低BIST时钟频率。电源网格加固在存储器阵列和MBIST逻辑周围布置更密集的电源和地线提供低阻抗的供电路径。片上监控在电源网络上放置电压跌落检测电路当检测到异常压降时可以暂停或减缓BIST操作。DFT的世界远不止这些还有针对延迟故障的测试、针对小延迟缺陷的测试、针对桥接故障的测试等等。它是一门在可靠性、成本、性能之间不断寻求平衡的艺术和科学。我的体会是一个好的DFT工程师必须同时是半个设计工程师、半个验证工程师、半个物理工程师和半个测试工程师。他需要在项目最早期的阶段就发出自己的声音把可测试性的DNA刻入芯片设计的每一个阶段。最终的目标是让测试变得透明、高效、可靠让制造出来的每一颗芯片都经得起考验。这不仅仅是技术更是一种对产品质量负责的承诺。