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

扫描链测试,说白了就是给芯片装个「体检通道」。我做了这么多年 DFT,最深的体会就是:扫描链要是出了问题,后面所有测试都白搭。今天咱们就聊聊这个核心环节——向量怎么生成、出错了怎么调、故障了怎么定位。

4.1 扫描链测试向量生成

向量生成这事儿,很多人觉得就是跑个工具完事。嗯,没那么简单。我见过太多人拿着工具吐出来的向量直接上机台,结果一片红。

4.1.1 向量生成的基本流程

工具生成扫描向量,核心就三步:

  1. 建立故障模型——最常见的是 stuck-at 模型,也就是固定为0或固定为1
  2. 自动测试向量生成(ATPG)——工具根据故障模型反推输入激励
  3. 故障仿真——验证生成的向量能不能真的测出故障

我个人习惯用 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 调试方法:从波形到根因

我的调试流程是这样的:

  1. 看 pattern fail 的分布——是随机 fail 还是固定 fail?
  2. 抓波形——用 VCD 或 FSDB 看具体哪个 cycle 出问题
  3. 定位到具体单元——看是哪个扫描链的哪个位置
  4. 查物理设计——看那个位置的 layout 有没有问题

举个例子,你看到 pattern 在 shift 阶段第 100 个 cycle 开始 fail。那大概率是链上第 100 个单元附近有问题。

// 调试命令示例(TetraMAX)
set_faults -model stuck
run_atpg -auto_compression
report_faults -class pt_chain_fail -verbose
注意: 调试时千万别只看一个 pattern。至少看 3-5 个不同的 pattern,确认 fail 模式一致。否则可能是随机噪声,不是真故障。

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%。

核心要点: 扫描链故障诊断不是玄学。有工具、有流程、有经验,大部分问题都能在 2-3 天内定位。

4.4 本章知识体系

下面这张图,是我自己总结的扫描链测试知识框架。建议你保存下来,做项目时对照着看。

扫描链测试知识体系 向量生成 故障模型建立 ATPG 自动生成 故障仿真验证 向量压缩优化 调试 失效模式分析 波形抓取与分析 定位到具体单元 物理设计检查 故障诊断 链诊断 单元诊断 物理诊断 候选故障列表 核心目标:高覆盖率 → 低向量数 → 快速定位故障 关键指标 测试覆盖率 > 95% 向量压缩比 > 5x 诊断精度 > 90% 调试时间 < 2天

这张图把扫描链测试的三个核心环节串起来了。向量生成是基础,调试是手段,故障诊断是目的。三者缺一不可。

好了,扫描链测试就聊到这儿。记住一句话:扫描链是 DFT 的基石,这块搞不定,后面所有测试都是空中楼阁。

可可精品资料库