4. 扫描链测试:向量生成、调试与故障诊断
扫描链测试,说白了就是给芯片装个「体检通道」。我做了这么多年 DFT,最深的体会就是:扫描链要是出了问题,后面所有测试都白搭。今天咱们就聊聊这个核心环节——向量怎么生成、出错了怎么调、故障了怎么定位。
4.1 扫描链测试向量生成
向量生成这事儿,很多人觉得就是跑个工具完事。嗯,没那么简单。我见过太多人拿着工具吐出来的向量直接上机台,结果一片红。
4.1.1 向量生成的基本流程
工具生成扫描向量,核心就三步:
- 建立故障模型——最常见的是 stuck-at 模型,也就是固定为0或固定为1
- 自动测试向量生成(ATPG)——工具根据故障模型反推输入激励
- 故障仿真——验证生成的向量能不能真的测出故障
我个人习惯用 TetraMAX 或者 FastScan。举个例子,一个简单的扫描链配置:
// 扫描链定义
set_scan_configuration -chain_count 8 -clock_mixing mix_edges
create_test_protocol -infer_clock -infer_reset
// 生成 stuck-at 向量
set_atpg -capture_cycles 2 -abort_limit 100
create_patterns -save_good_sim -save_failing_sim
这里有个坑:-capture_cycles 设成2还是3,直接影响覆盖率。我一般设2,除非有特殊时序要求。
4.1.2 向量压缩与优化
向量不是越多越好。你想想看,ATE 机台是按向量条数收费的。一条向量可能几块钱,几百万条下来...嗯,老板会找你谈话的。
| 压缩方法 | 压缩比 | 覆盖率影响 | 我推荐吗? |
|---|---|---|---|
| 静态压缩 | 2x-5x | 无影响 | 必做 |
| 动态压缩 | 5x-20x | 轻微下降 | 视情况 |
| X-fill 压缩 | 10x-50x | 可能下降 | 谨慎使用 |
我曾经在一个项目里,静态压缩就把向量从 300 万压到了 80 万,覆盖率一点没掉。所以我的建议是:先做静态压缩,不够再上动态。
report_summary。看看 test coverage 和 fault coverage 的差距。如果差太多,说明你的故障模型有问题。
4.2 扫描链测试调试
向量生成了,上机台一跑——挂了。这时候怎么办?别慌,我教你一套调试流程。
4.2.1 常见的扫描链失效模式
扫描链失效,说白了就几种情况:
- 链断路——某个扫描单元的输出没连到下一个的输入
- 链短路——两个扫描单元的输出短在一起了
- 时钟问题——扫描时钟没对齐,或者有毛刺
- 保持时间违例——数据跑太快,hold不住
我记得有一次,一个项目扫描链死活过不了。查了三天,最后发现是某个扫描单元的时钟门控没处理好。嗯,这种问题最坑人。
4.2.2 调试方法:从波形到根因
我的调试流程是这样的:
- 看 pattern fail 的分布——是随机 fail 还是固定 fail?
- 抓波形——用 VCD 或 FSDB 看具体哪个 cycle 出问题
- 定位到具体单元——看是哪个扫描链的哪个位置
- 查物理设计——看那个位置的 layout 有没有问题
举个例子,你看到 pattern 在 shift 阶段第 100 个 cycle 开始 fail。那大概率是链上第 100 个单元附近有问题。
// 调试命令示例(TetraMAX)
set_faults -model stuck
run_atpg -auto_compression
report_faults -class pt_chain_fail -verbose
4.3 扫描链故障诊断
故障诊断,就是找到芯片上到底哪个晶体管坏了。这活儿有点像侦探破案,需要逻辑推理加经验。
4.3.1 诊断流程
我一般分三步走:
- 第一步:链诊断——先确定是哪条扫描链出问题
- 第二步:单元诊断——再定位到链上的具体单元
- 第三步:物理诊断——最后看 layout 上那个单元周围有没有异常
你想想看,一个芯片几百万个扫描单元,要是没有这套流程,那真是大海捞针。
4.3.2 诊断工具的使用
主流工具都有诊断功能。我常用的是:
| 工具 | 诊断能力 | 输出格式 |
|---|---|---|
| TetraMAX Diagnosis | 链诊断 + 单元诊断 | DIAG 文件 |
| FastScan Diagnosis | 链诊断 | PAT 文件 |
| 第三方工具(如 Mentor Tessent) | 全流程诊断 | XML/JSON |
我个人更推荐 TetraMAX 的诊断,因为它能给出候选故障列表,按概率排序。省时间。
4.3.3 一个真实的诊断案例
去年有个项目,扫描链测试覆盖率死活上不去。我跑了一遍诊断,发现有一条链上第 42 个单元总是 fail。查 layout 发现,那个单元旁边有一条长走线,耦合噪声太大。
解决方案很简单:在那个单元的输出加一个 buffer。改完再测,覆盖率从 92% 升到了 98%。
4.4 本章知识体系
下面这张图,是我自己总结的扫描链测试知识框架。建议你保存下来,做项目时对照着看。
这张图把扫描链测试的三个核心环节串起来了。向量生成是基础,调试是手段,故障诊断是目的。三者缺一不可。
好了,扫描链测试就聊到这儿。记住一句话:扫描链是 DFT 的基石,这块搞不定,后面所有测试都是空中楼阁。
可可精品资料库