DFT 深入:扫描压缩、at-speed 测试、覆盖率与物理实现影响
更新时间:2026-10-01。一颗几千万门的 SoC 出厂前要在 ATE(Automated Test Equipment,自动测试机)上跑几百万周期的测试向量,机台按秒计费,漏测一颗缺陷芯片流到车厂则可能召回。扫描链、ATPG(Automatic Test Pattern Generation,自动测试向量生成)与扫描压缩,决定的正是「测得准不准」和「测得起测不起」这两件事。入门原理可先看 DFT 可测性设计,本篇按专家篇深度讲压缩结构、实速测试与物理实现协同。
本文要回答的问题
- 全扫描链到底怎样让芯片内部任意一个 flop 变得「可控制、可观测」?
- ATPG 针对哪些故障模型生成向量,fault coverage 和 test coverage 的差别为什么能差出几个点?
- 测试时间和测试数据量为什么在大设计上失控,扫描压缩(EDT 这一类结构)靠什么把它压下去?
- at-speed 测试的 LOC 和 LOS 两种 launch 方式差在哪,为什么现在主流是 LOC?
- 移位与捕获功耗、IR-drop、多电压域和多周期路径,分别会造成什么假失败,怎么在向量侧和结构侧处理?
一、扫描链原理:把时序单元变成可控可观测的口子
功能模式下,一个 flop 的输入来自前面几十级组合逻辑,想给它置一个特定值可能要回溯上千个周期,这就是典型的「不可控」;它的输出若只喂给后面很深的逻辑,也「不可观测」。扫描插入(scan insertion)做的事很直接:把设计里普通的 D 触发器替换成带扫描功能的 mux-D 单元——多一个扫描输入 SI(scan in)和一个扫描使能 SE(scan enable)。SE=0 时是普通 D 触发器,功能模式时序完全不变;SE=1 时,本级 flop 的输入切到上一级 flop 的输出,所有时序单元串成一条或多条移位寄存器链,链头接芯片引脚 SI,链尾从 SO(scan out)引出。
一条测试向量因此分成三个相位:先 shift(移位)若干拍,把激励逐位铺进所有 flop;再给一拍 capture(捕获),SE 拉低,让组合逻辑的真实响应被 flop 采住;最后继续移位,把捕获结果从 SO 移出来比对,同时移入下一条向量的激励,两件事重叠进行。全扫描(full scan)设计里所有时序单元都在链上,组合逻辑被切成一级一级的「flop—组合云—flop」结构,ATPG 只需处理单拍组合问题,这是后面一切算法成立的前提。实际工程中少数异步、时钟分频、门控单元旁的 flop 无法入链,列为不可扫描点单独豁免,全扫描率通常要求 99% 以上。
二、故障模型与 ATPG:向量是怎么被算出来的
ATE 只能在引脚上施加 0/1,不能直接知道硅片内部哪根连线断了。中间的桥梁是故障模型(fault model):把物理缺陷抽象成逻辑层面的故障行为,ATPG 再为每个抽象故障找一条能在输出端把它「激活并传播」出来的向量。主流模型如下。
| 故障模型 | 抽象的物理缺陷 | 检测条件 | 主要用途 |
|---|---|---|---|
| stuck-at(恒定故障) | 短路到电源/地、开路 | 故障点置相反值,响应传播到观测点 | 基本签核,筛静态缺陷 |
| transition fault(跳变故障) | 小延迟缺陷、弱驱动 | 在故障点 launch 一个跳变,一拍内捕获 | at-speed 主力模型 |
| path delay(路径延迟) | 关键路径整体偏慢 | 沿指定长路径 launch 跳变并按时捕获 | 速度相关缺陷补充 |
| bridging(桥接故障) | 相邻线短路 | 两线置相反值并观测 | 先进工艺节点补充 |
ATPG 对单个故障的算法分两步:激活(justify)——回溯锥逻辑,给 flop 和主输入赋值让故障点出现与故障相反的值;传播(propagate)——把故障效应沿一条通路敏化到扫描 flop 或主输出。两步中任何一个赋值要求矛盾,这个故障就是不可测(untestable/ATPG-untestable),常见于冗余逻辑、恒配置 tie-off 信号。向量生成后在故障仿真(fault simulation)里整批「搭车」检测:一条为故障 A 生成的向量往往同时覆盖几千个其它故障,工具只对剩下未检测的故障继续生成,直到收敛。
覆盖率有两个口径,评审时混用会出事。fault coverage = 已检测故障数 / 故障清单总数;test coverage 则把已证明的 untestable 故障从分母里剔除,数值天然高几个点。签核一般同时报两个:stuck-at test coverage 常要求 99% 以上,transition 略低。剩下未覆盖点要逐个分类——是 AT(ATPG untestable,结构性不可测)、AU(analog/未建模)还是工具努力度不够可以补向量压缩(pattern compaction)再挤。这张未测故障分析清单和 DFT 可测性设计 里讲的可控性/可观测性分析是同一件事的两面。
三、测试时间与数据量:为什么需要压缩
先算一笔账。假设设计有 500 万个 flop,全扫描排成 16 条链,每条链长约 31 万位;stuck-at 加 transition 向量各几万条,每条向量的移位拍数等于链长。仅 transition 一项,3 万条向量就是近百亿移位周期,再乘以数百 MHz 以下的移位时钟(受 ATE 通道速率限制),仅数字逻辑测试就要占用 ATE 几十秒到几分钟。ATE 按小时收费,汽车电子还要多温度、多电压角测试,测试成本在先进节点可以占到芯片制造成本的两位数百分比。同时每多接一条扫描链,就多占用一对 SI/SO 引脚和 ATE 通道,引脚数封装定了就是硬上限。
| 成本因素 | 决定变量 | 不压缩时的量级 |
|---|---|---|
| 测试时间 | 向量条数 × 链长 / 移位频率 | 数十秒至数分钟 |
| 测试数据量 | 向量条数 × 链长 | 数十亿位 |
| ATE 通道/引脚 | 扫描链条数 | 几十到上百对 |
| 多条件测试 | × 温度角 × 电压角 | 成倍放大 |
矛盾很清楚:想要短链(少移位拍数)就得加链数,链数受引脚限制;想要少向量就得接受覆盖率下降。扫描压缩(scan compression)破的正是这个矛盾——用片上的解压器把少量外部通道「展开」成大量内部短扫描链,再用压缩器把响应折叠回少量输出通道。
四、扫描压缩结构:decompressor、compactor 与 EDT
以商用上最常见的 EDT(Embedded Deterministic Test,嵌入式确定性测试)一类结构为代表:输入端是一个解压器(decompressor),典型实现是一段带相位(phase)控制的线性反馈移位环,几个到几十个外部扫描通道喂进去,环上抽头上百个,驱动几百条内部扫描链;ATPG 生成向量时不再直接指定每个内部 flop 的值,而是在解压器的线性约束空间里求解——绝大多数故障的赋值要求都能在线性空间内满足,少数满足不了的故障靠少量「预留位」或切回旁路模式补。输出端是压缩器(compactor),常用异或网络(XOR compactor)或带掩蔽能力的空间压缩器,把几百条内部链的响应折叠到十几个外部输出。
压缩比(compression ratio)通常按内部链总位数与外部通道位数之比衡量,量产设计常见 50 倍到 200 倍,极限场景宣称数百倍。但压缩比不是免费调高的,权衡有三条:
| 压缩比拉高的代价 | 机理 | 工程对策 |
|---|---|---|
| 覆盖率轻微下滑 | 解压空间约束变紧,少量故障无法赋值 | 保留 bypass/预留通道兜底 |
| X 敏感 | 一个不确定位 X 经 XOR 网络污染多个输出 | X-tolerant 压缩器、X-bounding |
| 布线与面积上升 | 解压器扇出大、内部链接入多 | 压缩器分块、物理感知插入 |
X 处理是压缩结构特有的难点。未初始化的 SRAM、模拟模块、跨时钟域总线在捕获时会产生 X(未知态),压缩器若把它和有效响应异或,会掩掉一片真实故障信息。做法分两层:设计侧在源头堵——给跨域信号加 X-bounding 单元、测试模式下给存储阵列已知初值;结构侧用能容忍 X 的压缩器或在向量里做掩蔽调度。X 源清单必须在架构早期冻结,MBIST/LBIST 存储器内建自测 负责让存储在测试时不产生 X,两者是配套工程。
五、at-speed 测试:用片上时钟捕获真实速度缺陷
stuck-at 向量在慢速移位时钟下做捕获,查的是「逻辑功能对不对」,查不出「这拍来得及来不及」。晶体管开关变慢、金属线电阻偏大这类小延迟缺陷,功能在低速下完全正确,只在额定频率失效,必须用 at-speed(实速)测试:launch(发射)一个跳变进组合云,隔一个额定周期 capture,看跳变是否准时到达。实速脉冲由片上 PLL 或时钟控制模块产生,ATE 只给低速控制信号,这也是 时钟与复位架构 必须预留 OCC(On-Chip Clocking)接口的原因。
两种 launch 方式差别在「发射跳变的那一拍」怎么来:
LOC(launch-off-capture,又称 broadside)在移位结束后用两拍功能时钟:第一拍发射、第二拍捕获,SE 不需要在快速窗口内切换,时序容易收敛,是当前主流。LOS(launch-off-shift)用移位的最后一拍发射跳变,覆盖率模型上略高,但 SE 必须在一个实速周期内从 1 切到 0,相当于多了一条要按额定频率收敛的全局时钟式网络,时序签核代价大,通常只在对缺陷覆盖极敏感的局部使用。
| 维度 | LOC(broadside) | LOS |
|---|---|---|
| 发射拍来源 | 第一拍功能时钟 | 移位最后一拍 |
| SE 时序 | 低速切换 | 实速切换 |
| 覆盖率 | 略低 | 略高 |
| 工程代价 | 小,主流 | 大,局部使用 |
at-speed 假失败的头号来源不是缺陷而是时序例外没交底:多周期路径(multi-cycle path)功能上本来允许两拍以上到达,两拍捕获必然报错;异步路径同理。必须把 STA 用的同一套时序例外(见 MMMC 多模多角静态时序分析)完整转成 ATPG 的 X 约束和捕获时钟分组,跨时钟域路径在捕获时直接屏蔽。这套约束在设计、STA、DFT 三处必须同源,任何一处漏更新就是一片假失败。
六、功耗、IR-drop 与多电压域处理
移位时全芯片所有 flop 每拍同时翻转,时钟树又在全速摆,移位功耗往往显著高于功能峰值功耗;捕获瞬间虽然只有一拍,但 combinational 逻辑被确定性向量激励出的翻转分布极不均匀,局部 toggling 远超功能场景。后果不是烧坏芯片,而是供电网络瞬时塌陷(IR-drop):本该准时到达的跳变因电压下降变慢,好芯片在 ATE 上报 fail,这叫过测造成的假失败(yield loss)。签核要过 功耗签核与 IR-drop/EM 分析 同一套网格,只不过仿真的激励换成扫描向量。
多电压、多电源域还有结构性问题。带电源关断(power gating)的域在测试时必须上电,否则链是断的;隔离单元、保持寄存器的测试行为见 低功耗 UPF/CPF 与隔离保持,DFT 要保证扫描链跨域时经过的单元在测试模式下全部可激活。实用方案是按电源域重组扫描链、域内自洽,跨域只在捕获拍通过已约束的接口交互;电平位移器(level shifter)两侧电压角不同,at-speed 捕获的时序按哪一档算要在 test mode 表里逐个定义,多电压角测试也直接拉长 ATE 时间,和压缩比目标互相拉扯。
七、物理感知 DFT:扫描插入与后端协同
扫描结构不是逻辑正确就完事,它最终落在硅片上。早期流程在网表上插好扫描链再交给布局布线,链序按网表随便串,结果物理上一条链从芯片东南角绕到西北角,走线拥塞、扫描链本身还占绕线资源。现代流程把扫描重组(scan reorder)放到布局之后:保持链上 flop 集合不变,按物理邻近重排链接顺序,链走线长度可下降数倍。多比特 flop(MBFF,Multi-Bit Flip-Flop)进一步引入协同问题——后端为省功耗把多个单比特 flop 合并成多比特单元,合并后扫描顺序变了、个别 bit 不可独立替换,扫描插入必须感知 MBFF 合并映射,详见 多比特 flop 与功耗门控。
| 协同点 | 不感知物理的后果 | 现代做法 |
|---|---|---|
| 链序 | 长距离绕线、拥塞 | 布局后 scan reorder |
| MBFF | 替换冲突、链断裂 | DFT 与物理合并联合优化 |
| SE 网络 | 类时钟高扇出、时序差 | 当成时钟树综合对象 |
| 压缩器布局 | 局部热点、通道绕线 | 分块压缩、就近接入 |
ATPG 侧也在往物理走:physical-aware ATPG 在生成捕获向量时引入布局和功耗网格信息,对预计会引起 IR-drop 超标的向量提前规避或分裂,而不是等签核仿真发现再返工。时序上还要保证扫描 mux 加在 D 端后,功能路径新增的那点延时在 STA 里被准确建模,SE=0 的功能模式不能因 DFT 留下违例。整条链路的原则是:扫描结构在 RTL 冻结前定架构、综合后插入、布局后重组,DFT 工程师全程参与物理收敛,而不是网表一交了之。出片之后,硅后 Bring-up 与调试 依赖的 debug 观测链、硅验证 Shmoo 与特性表征 复用的时钟与扫描接口,也都在这个阶段埋下伏笔。
常见坑
- 多周期/异步路径只在 STA 里设了例外,没同步给 ATPG:at-speed 成片假失败,三处约束必须同源。
- 压缩比只看标称值:解压器线性空间约束导致的覆盖率损失、X 污染没算进去,要以实际 fault coverage 签核。
- 只盯 stuck-at 覆盖忽视 transition:慢缺陷漏到功能测试甚至客户现场才暴露。
- MBFF 合并与扫描替换各自为政:链断裂或单元替换冲突,必须联合优化。
- 移位/捕获功耗不过签核:IR-drop 造成好芯片 fail,向量要过功耗网格仿真。
- X 源不冻结:SRAM、模拟、跨域 X 经压缩器掩掉真实故障,源头 X-bounding 优先于输出掩蔽。
这一篇在知识体系里的位置
- 向上承接:DFT 可测性设计 给出可控性/可观测性与扫描入门,本篇展开压缩、实速与签核细节。
- 横向配套:MBIST/LBIST 存储器内建自测 管住存储阵列测试与 X 源,时钟与复位架构 提供 OCC 实速时钟接口。
- 物理协同:多比特 flop 与功耗门控、功耗签核与 IR-drop/EM 分析、低功耗 UPF/CPF 与隔离保持 分别对应 MBFF、向量功耗与多电源域问题。
- 向下游延伸:硅后 Bring-up 与调试、硅验证 Shmoo 与特性表征 复用本篇插入的扫描与时钟结构。
总结
扫描链把时序单元变成可移位控/观测的口子,ATPG 在 stuck-at、transition 等故障模型上以激活—传播两步生成向量并按 fault/test coverage 签核;扫描压缩用 EDT 式解压器和 X-tolerant 压缩器以几十上百倍比例压缩测试时间与数据量,代价是覆盖率、X 处理与布线的精细权衡;at-speed 以 LOC 为主、LOS 局部补充捕获真实速度缺陷,多周期与多电压域靠同源约束和分域捕获,功耗与 IR-drop 靠降频、分拍和物理感知 ATPG 兜底——最终扫描结构必须与 scan reorder、MBFF 合并、物理收敛协同到底。