4. 扫描链测试与调试:扫描链测试向量生成、扫描链故障诊断、扫描链良率分析

扫描链,说白了就是给芯片装了个「体检通道」。没有它,芯片内部那些寄存器就像黑箱一样,你根本不知道里面发生了什么。我入行那会儿,第一次看到扫描链的波形图,密密麻麻的,说实话有点懵。但后来发现,只要掌握了方法,这东西其实挺有规律的。

4.1 扫描链测试向量生成

测试向量生成,核心目标就一个:用最少的pattern,覆盖最多的故障。我个人习惯把流程分成三步走。

4.1.1 基本流程

  1. 加载网表与库:把综合后的门级网表和标准单元库喂给ATE工具。
  2. 定义扫描链:告诉工具哪些是扫描单元,链的输入输出端口在哪。
  3. 运行ATPG:工具自动生成测试向量。这里有个关键参数——压缩率,我一般设到10x~20x,太高了容易丢覆盖率。

核心指标:测试覆盖率通常要求 >98%。如果低于这个数,就得回头检查约束是不是写漏了。

4.1.2 向量格式

生成的向量一般存成WGL或STIL格式。举个例子,一段简化的WGL片段长这样:

// WGL 示例
TIMESCALE 1 ns;
VECTOR 'shift_in'
  scan_in = 1;
  scan_en = 1;
  clock = P;
END;
PATTERN 'pattern_001'
  V 'shift_in'
  V 'capture'
  V 'shift_out'
END;

嗯,这里要注意:shift_in和shift_out的时序必须对齐。我曾经遇到过一个案子,ATE上跑pattern老是报错,查了两天才发现是timing文件里clock的沿设反了。

4.2 扫描链故障诊断

扫描链出故障,是DFT工程师最头疼的事。为什么?因为一条链上几百上千个寄存器,只要一个坏了,整条链就废了。诊断的目的,就是定位到具体是哪个cell出了问题。

4.2.1 常见故障类型

故障类型 表现 常见原因
Stuck-at故障 某个节点恒为0或1 短路、开路
Transition故障 信号跳变太慢 驱动能力不足
Hold time违例 数据保持时间不够 时钟树不平衡
Bridging故障 两条线短路 物理设计缺陷

诊断小技巧:先用ATPG工具跑一次fault simulation,对比fail pattern的预期值和实际值。如果fail pattern集中在某一段,那问题大概率就在那段附近。

4.2.2 诊断流程

我个人习惯用「二分法」来定位。举个例子:一条链有1000个寄存器,先测中间那个。如果中间点正常,说明故障在后半段;反之在前半段。如此反复,一般10次以内就能锁定目标。

为什么会这样?因为扫描链本质上是串行移位,每个寄存器的输出都依赖于前一个。只要找到第一个出错的位置,后面的就全错了。

避坑指南:我曾经遇到过一个案例,诊断结果显示某个寄存器有stuck-at故障,但换了一颗芯片又好了。后来发现是ATE的探针接触不良。所以,先排除测试环境问题,再怀疑芯片本身。

4.3 扫描链良率分析

良率分析,说白了就是看你的芯片在量产时有多少是好的。扫描链良率通常要求 >99.5%。如果低于这个数,就得赶紧查原因。

4.3.1 良率损失因素

  • 设计问题:比如时钟树不平衡导致hold time违例。我见过一个项目,良率只有85%,最后发现是scan_en的走线太长,信号衰减严重。
  • 工艺问题:比如金属层短路。这种通常需要做物理失效分析(PFA)。
  • 测试问题:比如ATE的timing设置不对。嗯,这个其实挺常见的。

4.3.2 良率提升方法

  1. 优化扫描链结构:把长链拆成短链,每条链不超过500个寄存器。这样即使一条链坏了,损失也有限。
  2. 增加冗余链:关键模块可以加一条备用链。我习惯在顶层留2~3条冗余链,以备不时之需。
  3. 调整测试条件:比如降低测试频率、放宽timing margin。你想想看,量产测试和实验室测试不一样,环境噪声大,留点余量是必要的。

良率分析报告示例:

Total chips tested: 10000
Pass: 9950
Fail: 50
Yield: 99.5%

Fail breakdown:
- Scan chain fail: 30 (60%)
- Logic fail: 15 (30%)
- Memory fail: 5 (10%)

如果扫描链fail占比过高,优先检查扫描链的物理设计和测试向量。

4.4 知识体系总览

下面这张图,是我自己总结的扫描链测试与调试的核心逻辑。你一看就明白了。

扫描链测试与调试知识体系 测试向量生成 故障诊断 良率分析 网表加载 ATPG运行 向量输出 Stuck-at Transition 二分定位 数据统计 原因分析 优化改进 目标:测试覆盖率 >98%,良率 >99.5%

这张图把三个模块串起来了。向量生成是基础,故障诊断是手段,良率分析是目标。三者缺一不可。

最后说一句:扫描链调试这事,经验很重要。多跑几个项目,多踩几个坑,自然就熟了。我刚开始那会儿,一个简单的stuck-at故障查了三天,现在基本半小时搞定。嗯,熟能生巧。

可可精品资料库