4、BIST(内建自测试)的陷阱:时钟、综合与覆盖率
BIST 这东西,听起来很美——芯片自己测自己,省了ATE测试时间,多好。但我见过太多项目,BIST 做完了,流片回来却发现根本跑不起来,或者测了半天啥也没测出来。
说白了,BIST 不是加个模块就完事的。它有三个最常见的坑:时钟不同步、逻辑被优化掉、覆盖率虚高。咱们一个一个说。
4.1 陷阱一:BIST控制器与系统时钟域不同步
这是最隐蔽的问题。BIST 控制器通常有自己的时钟,或者复用系统时钟。但很多设计里,BIST 启动时系统时钟还没稳定,或者 BIST 控制器和被测逻辑不在同一个时钟域。
我遇到过一回,项目都快 tape out 了,仿真时 BIST 一直报错。查了三天,发现 BIST 控制器用 PLL 的输出时钟,而被测逻辑用 PLL 的反馈时钟——相位差 90 度。仿真时没体现,但实际芯片上就是采样错误。
- BIST 启动时序与系统时钟域复位释放顺序不一致
- BIST 控制器与被测逻辑使用不同时钟源(如 PLL 与 RC 振荡器)
- 时钟门控(Clock Gating)在 BIST 模式下未被旁路
怎么解决?我个人习惯在原理图审查时,专门检查 BIST 模式的时钟路径:
- 确认时钟源:BIST 控制器和被测逻辑必须使用同一时钟源,且该时钟在 BIST 模式下不能被门控
- 检查复位同步:BIST 控制器的复位释放必须晚于系统时钟稳定时间
- 添加时钟旁路:在 BIST 模式下,所有时钟门控单元必须被强制打开
4.2 陷阱二:BIST的测试向量生成逻辑被综合优化掉
这个坑更气人。你辛辛苦苦写好了 BIST 控制器,综合工具觉得“这段逻辑没用”,直接给你优化掉了。
为什么会这样?因为综合工具很聪明,它会分析哪些逻辑在“正常模式”下永远不会被触发。BIST 控制器只在测试模式下工作,如果综合时没有正确设置 set_case_analysis,工具就会认为那些逻辑是冗余的。
我见过一个案例:某芯片的 BIST 控制器里有 128 位的 LFSR(线性反馈移位寄存器),综合后只剩 8 位。流片回来,BIST 覆盖率只有 6%,等于白做。
- 综合约束中是否对 BIST 模式设置了
set_case_analysis或set_dont_touch - BIST 控制器的所有状态机是否在综合时被保留
- 测试向量生成逻辑(如 LFSR、计数器)是否被工具识别为“不可达”
你想想看,综合工具把 BIST 逻辑优化掉,仿真时还能通过——因为仿真用的是 RTL 代码,不是综合后的网表。等到芯片回来才发现,那就晚了。
我的建议是:在综合后网表上跑一遍 BIST 仿真,确认所有测试向量生成逻辑都还在。这一步不能省。
4.3 陷阱三:BIST的故障覆盖率评估不足
很多人觉得,BIST 跑通了,覆盖率报告显示 95%,那就没问题了。其实不然。
BIST 的故障覆盖率评估,说白了就是看你的测试向量能覆盖多少种故障模型。但这里有几个常见的“注水”手法:
| 覆盖率注水方式 | 实际风险 |
|---|---|
| 只统计可测节点,忽略不可测节点 | 实际覆盖率可能只有报告的一半 |
| 使用单一故障模型(如 stuck-at) | 桥接故障、延迟故障完全没覆盖 |
| 忽略 BIST 控制器自身的故障 | 控制器坏了,测试结果全是假的 |
| 测试向量长度不足 | 某些故障需要特定序列才能激活 |
我在项目中遇到过,某芯片的 BIST 覆盖率报告显示 97%,但量产测试时良率只有 60%。后来一查,BIST 只覆盖了逻辑单元的 stuck-at 故障,而芯片的实际失效模式是信号线之间的桥接短路。
- 要求提供“不可测节点”列表,并分析为什么不可测
- 至少使用 stuck-at 和 transition delay 两种故障模型
- BIST 控制器本身需要独立的测试机制(如 IDDQ 或扫描链)
- 测试向量长度必须满足故障激活的序列要求
嗯,这里要注意:覆盖率不是越高越好,而是“够用”就好。但“够用”的标准是什么?我个人习惯是:对于汽车级芯片,stuck-at 覆盖率 > 98%,transition delay 覆盖率 > 90%;对于消费级芯片,可以适当放宽,但至少不能低于 85%。
4.4 知识体系:BIST 陷阱全景图
下面这张图总结了 BIST 设计的三个核心陷阱及其关联关系。你可以把它贴在原理图审查的 checklist 旁边。
4.5 审查清单:BIST 部分
最后,我整理了一份 BIST 原理图审查的快速清单。你可以在审查时逐项核对:
- 时钟域检查:BIST 控制器与被测逻辑是否同源?时钟门控是否被旁路?
- 复位时序:BIST 复位释放是否晚于时钟稳定?
- 综合约束:是否对 BIST 逻辑设置了
set_dont_touch或set_case_analysis? - 后综合仿真:是否在综合后网表上跑过 BIST 仿真?
- 覆盖率报告:是否包含不可测节点分析?是否使用多种故障模型?
- BIST 控制器自检:控制器本身是否有测试机制?
- 测试向量长度:是否满足故障激活的最小序列要求?
说实话,BIST 这东西,做对了能省很多测试成本,做错了就是白费功夫。我见过太多项目在 BIST 上栽跟头,归根结底就是这三个陷阱没避开。希望这份清单能帮你少走弯路。