ATPG基础:从概念到实战
大家好,我是你们的DFT讲师。今天咱们聊聊ATPG——自动测试向量生成。说实话,我刚入行那会儿,觉得ATPG就是个黑盒子,跑个命令就完事了。后来踩了不少坑,才明白这东西背后的门道有多深。
ATPG,全称Automatic Test Pattern Generation。说白了,就是让工具自动帮我们生成测试向量,用来检测芯片制造过程中有没有缺陷。你想想看,一颗芯片几亿个晶体管,人工写测试向量?那得写到猴年马月去。
核心要点:ATPG不是万能的,但没有ATPG是万万不能的。它解决的是“如何用最少的测试向量,覆盖最多的故障”这个核心问题。
故障模型:我们到底在测什么?
做测试,首先得知道我们要抓什么“坏人”。芯片制造过程中,缺陷千奇百怪。为了系统化地处理,我们把缺陷抽象成几种标准的故障模型。
Stuck-at 故障模型
这是最经典、最基础的模型。我习惯叫它“卡死模型”。
想象一根信号线,它本该在0和1之间自由切换。但制造缺陷导致它永远卡在0,或者永远卡在1。这就是Stuck-at故障。
- Stuck-at-0 (SA0):信号线永远为0
- Stuck-at-1 (SA1):信号线永远为1
举个例子,一个两输入与非门,输出Y = ~(A & B)。如果输出Y stuck-at-0了,那不管A和B输入什么,Y永远是0。正常情况Y应该是1的时候,它却输出0,这就出问题了。
我的经验:Stuck-at模型虽然简单,但覆盖了大约70%-80%的实际物理缺陷。我在一个28nm的项目中,光靠Stuck-at测试就抓出了90%以上的良率问题。别小看它。
Transition Delay 故障模型
芯片越做越小,频率越来越高。Stuck-at模型只能测“静态”故障,但芯片跑起来,信号翻转需要时间。如果翻转太慢,就会导致时序违规。
Transition Delay模型就是用来测这个的。它关注的是信号从0变1(上升沿)或从1变0(下降沿)时,是否能在规定时间内完成。
- Slow-to-Rise:从0变1太慢
- Slow-to-Fall:从1变0太慢
为什么会这样?可能是晶体管驱动能力不足,或者连线电阻电容太大。我在一个55nm的项目中遇到过,某条路径的Transition Delay测试老是报错,最后查出来是金属线宽度偏小,导致RC延迟超标。
注意:Transition Delay测试需要两个连续的时钟周期来施加向量。第一个周期初始化,第二个周期捕获。这和Stuck-at测试的时序完全不同,初学者很容易搞混。
ATPG工具使用入门
理论讲完了,咱们来点实际的。市面上主流的ATPG工具有Synopsys的TetraMAX、Mentor的FastScan等。我以TetraMAX为例,讲讲基本流程。
基本流程
- 读入网表:把综合后的门级网表喂给工具
- 读入库文件:标准单元库的时序和功能信息
- 定义测试模式:告诉工具我们用的是scan测试模式
- 构建故障列表:工具自动分析所有可能的故障点
- 生成测试向量:工具自动计算最优的测试向量
- 输出向量文件:生成ATE(自动测试设备)能识别的格式
嗯,这里要注意,读入库文件时一定要用对的版本。我曾经因为用了旧版库文件,生成的向量在ATE上跑出来全是错的,排查了两天才发现是库文件不匹配。
一个简单的TetraMAX脚本示例
# 读入网表和库
read_netlist top.v
read_netlist scan_lib.v
run_build_model top
# 设置测试模式
add_clocks 0 clk
add_scan_chain chain1 clk si1 so1
run_drc
# 生成故障列表
add_faults -all
run_atpg -auto_compression
# 输出向量
write_patterns top.stil -format stil
write_faults top.faults
这个脚本看起来简单,但每一步都有坑。比如run_drc这一步,如果设计规则检查不过,后面生成向量都是白费。我建议新手先跑一遍DRC,确保所有规则都通过,再往下走。
知识体系总览
为了让大家更直观地理解ATPG的整个知识体系,我画了一张图。
故障覆盖率:你的测试够不够?
ATPG跑完了,工具会报告一个故障覆盖率。比如98.5%。这个数字代表什么?
故障覆盖率 = (检测到的故障数 / 总故障数) × 100%
一般来说,Stuck-at测试要求达到98%以上,Transition Delay测试要求95%以上。但别太迷信这个数字。我记得有个项目,覆盖率报了99%,结果流片回来还是有几颗芯片有问题。后来发现是某些路径的Transition Delay故障没被模型覆盖到。
避坑指南:我曾经遇到过覆盖率很高,但实际测试良率很低的情况。后来发现是ATPG工具默认的故障模型不够全面。建议在跑ATPG时,加上-all_faults选项,确保所有类型的故障都被考虑进去。
ATPG的压缩技术
测试向量越多,测试时间越长,成本越高。ATPG工具提供了压缩技术,用更少的向量达到同样的覆盖率。
| 压缩方法 | 原理 | 压缩比 | 我的建议 |
|---|---|---|---|
| 静态压缩 | 合并冗余向量 | 2x-5x | 适合小规模设计 |
| 动态压缩 | 生成时优化 | 5x-10x | 推荐主流项目使用 |
| X-fill压缩 | 利用未知态填充 | 10x-20x | 需要设计支持X-masking |
我个人习惯先用动态压缩,如果覆盖率达标,再尝试X-fill压缩。但要注意,X-fill压缩对设计有要求,不是所有设计都能用。
实战中的几个关键点
最后,分享几个我在项目中总结的经验:
- DRC检查一定要过:DRC不过,后面全是白费。我见过有人DRC报错还硬跑ATPG,结果生成的向量全是无效的。
- 关注不可测故障:工具会报告哪些故障不可测。这些往往是设计中的薄弱环节,值得仔细分析。
- 向量文件格式要匹配:ATE设备支持的格式各不相同。TetraMAX默认输出STIL格式,但有些老设备只支持WGL格式。记得提前确认。
- 跑完ATPG后做仿真验证:生成的向量最好用仿真工具跑一遍,确保功能正确。我曾经因为库文件版本问题,生成的向量在仿真时就报错了,还好及时发现。
ATPG这东西,说难不难,说简单也不简单。关键是多动手、多踩坑。等你亲手跑过几十个项目,自然就摸出门道了。