ATPG 与扫描链:自动生成「逼出制造缺陷」的向量
更新时间:2026-09-12。本文是「集成电路大类 · 芯片设计」**进阶层(intermediate)**数字逻辑第七十五篇。DFT 入门讲了为什么要为测试而设计,MBIST 管存储器,JTAG 管脚和板级。这一篇聚焦随机逻辑的两大支柱:扫描链让内部触发器可直接读写,ATPG 让算法自动找出能暴露制造缺陷的测试向量。
本文要回答的问题
- 为什么普通电路没法直接测内部节点?扫描链怎么把触发器变成「可进可出」?
- stuck-at-0/1 是什么模型?ATPG 凭什么能自动算出测试向量?
- 「激活—敏化—传播」一个故障到输出要满足什么?
- shift(移位)和 capture(捕获)两个阶段各干什么?at-speed 怎么做?
- 故障覆盖率怎么衡量?为什么还要测试压缩(EDT/MISR)和测试点插入?
一、扫描:把所有触发器串成一条移位寄存器
正常模式下每个 D 触发器接自己的功能逻辑。加一个 scan_mux(扫描多选),测试模式(scan_en=1)时把每个触发器的 D 输入从前级功能逻辑切到「上一个触发器的 Q」,于是芯片中成千上万个 FF 首尾连成一条(或多条)扫描链:
功能: comb ─►D[FF]Q ─► comb ─►D[FF]Q
扫描: SI ─►[FF0]─►[FF1]─►[FF2]─►…─►[FFn]─► SO
▲scan_en 把每个 FF 的 D 切到前一个 Q这样测试者能从 SI 把任意 0/1 组合移入所有触发器(获得完全的可控性),跑一拍功能让组合逻辑响应,再把所有触发器结果从 SO 移出观察(完全的可观测性)。深 sequential 电路瞬间变成近乎纯组合的可测结构,这是 ATPG 可行的前提。
二、故障模型:stuck-at 与延迟故障
ATPG 需要明确「在找什么错」。主流模型:
- 固定故障 stuck-at-0/1(SAF):假设某根线被永久粘在 0 或 1(短路到地/电源、开路、桥接的简化)。N 个节点约有 2N 个单固定故障,是覆盖率的基本计量单位;
- 跳变延迟故障(transition fault)/路径延迟(path delay):门变慢导致信号在规定频率到不了,用于**实速(at-speed)**测试,需要两个触发沿验证「能在一个周期内翻转并传播」;
- 还有桥接(两根线短接)、IDDQ(测静态漏电异常)等补充模型。
三、ATPG 三件事:激活、敏化、传播
给定一个目标故障(例如某与门输入 X 假设 stuck-at-0),ATPG 要找一组主输入/扫描触发器值同时完成:
- 激活(activate/控制):让好电路在 X 处的值与故障值相反(要让「粘在 0」暴露,就得让好值为 1);
- 敏化路径(sensitize):沿一条从 X 到某个可观测点(输出/触发器 D 端)的路径,把门的其他侧输入置成「放行」值(如与门非路径侧全置 1、或门全置 0),使 X 的差异能一路传下去;
- 传播(propagate)与蕴含(justify):反推这些控制条件所需的输入赋值。工具用 D 算法/PODEM 等回溯搜索,若逻辑上无法同时满足(被其他条件矛盾),该故障就是不可测(需要改 DFT 加控制点)。
生成的每个测试向量就是「一长串移入的 scan-in 初值 + 期望 scan-out 结果」。ATPG 用尽量少的向量覆盖尽量多故障,报出故障覆盖率(test coverage)——车规/高可靠通常要求 99% 量级,卡在此处的难测逻辑要插入测试点(test point:控制点/观测点)、复位可扫描化、时钟可直控。
四、移位与捕获:两条时钟节拍
一条扫描测试向量分三步:
- Shift(移位装载):scan_en=1,用较慢扫描时钟把激励逐位移入全链、同时移出上一条结果(链很长,占大部分测试时间);
- Capture(捕获):scan_en=0,切回功能时钟,发 1(或几个)功能速度的脉冲,让组合逻辑对载入的值响应、打进触发器;
- 再 Shift 把捕获结果移出比对。
实速测试为抓延迟故障,捕获脉冲要用真实工作频率:**LOC(launch-off-capture)**靠第一个捕获沿发射跳变、第二个沿捕获(对扫描移位约束小、最常用);**LOS(launch-off-shift)**靠最后一个移位沿发射(更快覆盖但对扫描使能时序要求高)。时钟树在测试模式必须能由 ATE 直接、低速或实速地驱动,PLL 可旁路,这正是 DFT 对时钟可控性的硬要求。
五、测试压缩、向量量与成本
现代 SoC 扫描触发器上百万,单链移位极慢,工业界普遍加片上压缩:输入端用解压缩器(有限状态机/环形发生器,少量扫描通道扩展成很多内部链),输出端用 **MISR(多输入签名寄存器)**把海量响应压成一个签名(基于 LFSR),通道数和测试时间可降一两个数量级。测试成本 ≈ 向量数 × 每向量移位周期 × ATE 机时,所以「高故障覆盖 + 短测试时间」是 ATPG 的双重优化目标。
| DFT 技术 | 对象 | 向量来源 |
|---|---|---|
| Scan + ATPG | 随机逻辑 stuck-at/延迟 | 算法确定性生成 |
| MBIST | SRAM | 内建 March 控制器 |
| LBIST | 随机逻辑现场自测 | PRPG 伪随机 + MISR |
| 边界扫描/JTAG | 管脚/板级互联 | 外部经 TAP |
与现有篇目的衔接
总结
一句话总结:随机逻辑内部节点既难直接置值又难直接观测,扫描设计给每个触发器加 scan_mux,测试模式下把成千上万个 FF 串成移位链,从而从 SI 移入任意初值获得完全可控性、跑一拍功能后从 SO 移出结果获得完全可观测性,把深时序电路化成近乎可测的组合结构;ATPG 则基于故障模型自动求向量——对单固定故障 stuck-at-0/1 依次完成激活(让好电路在故障点取相反值)、敏化(把传播路径各门的侧输入置放行值)和反推蕴含,用 D 算法/PODEM 搜索可满足赋值,并报告故障覆盖率,实速的跳变/路径延迟故障则靠 LOC 或 LOS 两捕获沿在真实频率验证;每条向量经历慢速移位装载、功能速度捕获、再移位比对三阶段,测试时钟必须可由 ATE/PLL 旁路直接控制;面对百万级 FF,用片上解压缩把少量通道扩成多链、用基于 LFSR 的 MISR 把响应压成签名,以在高故障覆盖(车规常达约 99%)和最短 ATE 机时间取平衡,难测节点则靠插入测试点、复位可扫描和时钟直控来提升,它与测存储的 MBIST、现场自测的 LBIST、测板级的 JTAG 共同构成完整 DFT 体系。