4. 扫描链测试与调试:扫描链测试向量生成、扫描链故障诊断、扫描链良率分析
扫描链,说白了就是给芯片装了个「体检通道」。没有它,芯片内部那些寄存器就像黑箱一样,你根本不知道里面发生了什么。我入行那会儿,第一次看到扫描链的波形图,密密麻麻的,说实话有点懵。但后来发现,只要掌握了方法,这东西其实挺有规律的。
4.1 扫描链测试向量生成
测试向量生成,核心目标就一个:用最少的pattern,覆盖最多的故障。我个人习惯把流程分成三步走。
4.1.1 基本流程
- 加载网表与库:把综合后的门级网表和标准单元库喂给ATE工具。
- 定义扫描链:告诉工具哪些是扫描单元,链的输入输出端口在哪。
- 运行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 良率提升方法
- 优化扫描链结构:把长链拆成短链,每条链不超过500个寄存器。这样即使一条链坏了,损失也有限。
- 增加冗余链:关键模块可以加一条备用链。我习惯在顶层留2~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 知识体系总览
下面这张图,是我自己总结的扫描链测试与调试的核心逻辑。你一看就明白了。
这张图把三个模块串起来了。向量生成是基础,故障诊断是手段,良率分析是目标。三者缺一不可。
最后说一句:扫描链调试这事,经验很重要。多跑几个项目,多踩几个坑,自然就熟了。我刚开始那会儿,一个简单的stuck-at故障查了三天,现在基本半小时搞定。嗯,熟能生巧。