1.Tessent ATPG流程
1.1 ATPG基本概念
ATPG:
-
- Auto-Test-pattern-Generation:自动化测试向量生成
- 基于故障或者电路结构,而非功能
- 生成向量集合
- 基于布尔逻辑运算的算法,将测试向量输入待测芯片,再对比芯片期望输出
- ATPG算法:工具首先会使用各种随机的测试向量检测容易检测的故障,难测的故障需要敏化路径的方式,分析故障前后逻辑,就算出测试电路,使得故障向后传播到可以观测的点
- D算法、布尔差分算法
ATPG核心流程:
-
- 建立故障模型:根据读入的电路设计,建立故障模型;
- 选择故障:选择单一故障,并选择对应的算法
- 激活故障:激活,分析故障点前后的逻辑追,确认将那些控制点置于某种状态才可激活该故障,并将该故障可传递到后面的某些观测点
- 生成向量
- 模拟故障:对向量进行模拟验证
- 移出故障:将故障从故障库中移出,然后故障库更新重新迭代
ATPG工具:
-
- Synopsys:TetraMax
- Mentor:Tessent Fastscan/TestKompress
- Cadence:Encounter Test/Modus
- 衡量工具实用度:故障测试覆盖率、生成测试向量大小、测试生成时间、占用机器的内存空间、工具使用难易程度
2. ATPG流程
2.1 Tessent ATPG工具流程
输入文件:
- 扫描网表:做完DFT的扫描网表
- 库文件
- DO文件
- Test Proc文件
大致流程
- 工具配置
- 读入网表、库文件、DO文件、Test Proc文件
- DFT设计规则检查
- 配置ATPG:选择故障库
- 产生测试向量:根据设计规模,设计规模越大时间越长
- 保存测试向量
具体流程
-
- 工具配置:set_context patterns -scan
- 读入扫描网表和库文件:read_verilog xxx.scan.v、read_cell_library all_cells.atpg、set_current_design
- 读入DO/TestProc文件:DO文件包含扫描链信息、配置管脚信息及初始化等,DO文件中会指定TestProc
- 指定测试初始化时InPUT值
- 指定clock,reset信号
- 指定扫描链
- 读入TestProc
- dofile atpg.dofile
- 规则检查:
- 时钟规则的检查
- 扫描链检查:可否追溯,数据是否稳定
- 网表检查:线,端口,门(是否有三态门、驱动竞争等)
- check_design_rules
- report violation
- 配置ATPG(重复):
- 指定故障类型
- set_fault_type:指定测试故障集
- set_fault_sampling:针对特性fault产生测试向量(也可用于早期测试覆盖率的考量)
- add_fault:手动对instance、Port、module进行操作
- add_nofault:手动对instance、Port、module进行操作
- 生成测试故障集,根据测试目的的不同,设置不同的type
- 产生测试向量(重复)
- create_pattern
- report_statistics:覆盖率、runtime、工具内部的故障分类
- 保存测试向量(重复)
- 向量的格式:
- ASCII或者二进制:重用或者诊断
- Verilog:后续仿真
- WGL/STIL:ATE使用的格式
- 串行、并行向量;扫描链测试向量
- write_patterns
- 向量的格式:
3.ATPG库文件和DOFILE文件
3.1 库文件
库文件方便tessent工具对基本单元进行建模,定义了底层门级单元的功能模型,例如,定义底层单元的输入输出等,并对单元的模型和用途进行一定说明。
类似于Verilog。同时,对于DFF和SDFF单元可以通过库文件知道两者对应关系,方便做scan insertion时将nonScanDFF替换成ScanDFF(非扫描寄存器和扫描寄存器的映射关系)。
3.1.1 获取途径
- 一般从工艺厂商直接获取;
- 可以从Verilog模型转换为ATPG库文件,通过libcomp(mentor)工具进行转换;
3.2 Do文件(相当于控制工具如何生成ATPG)
- 包含扫描链的基本信息(扫描链条数,扫描链名称,扫描链input);
- 包含用户配置的信息,如PI的设置等;
- 包含时钟,复位等定义;
- 输入管脚的自定义初始化值,例如Scan_enable、jtag_sel;
其中,add_scan_group scan_group1 scan_group1.testproc这个命令定义了scan_group,同时指定scan_group对应的testproc文件是哪个;
4.ATPG TestProc文件
TestProc文件定义测试时的操作,包括:
- TimePlates:定义测试时钟周期
- Test_Setup:定义PI(输入管脚)的初始化值
- Load_Unload/Shift:定义扫描向量在扫描链上的移入移出操作;
- Capture:定义扫描向量移入后的捕获操作;
4.1 TimePlates
- 定义测试时钟的周期;
- 一个testproc里可以定义若干个timeplates;
4.2 test_setup
- 定义测试时的初始化序列;
- 用于设置Load/unload操作时设置非扫描单元的状态;
4.3 Shift
- 定义扫描数据移入移出扫描链的单次操作;
- force scan_in的输入值,measure scna_out的输出值;
4.4 Load_unload
- 定义扫描数据移入移出扫描链的操作;
- 其中,apply shift 100表示执行shift操作100次;
- apply shift N,其中N表示最长扫描链长度;
4.4 capture
- 定义scan_en为0时的捕获操作;
5.测试覆盖率的计算
5.1 测试覆盖率(Test Coverage)
- 工具可以生成向量进行检测的故障与总的可测故障的百分比;
- test_coverage = (DT + PD*posdet_credit)/TE。DT :Detected Fault,PD:Possible Detect Fault,posdet_credit:小数,一般是可能被检查的故障影响因素,TE:Testable Fault总的可以被测试到的故障;
- 另外一种表达式,Test Coverrage = (DT + PT *posdet_credit)/(all faults - (UD +AU*au_credit))
- posdet_credit = 50% by default
5.2 故障覆盖率(Fault Coverage)
- 工具可以生成向量进行检测的故障数与总的故障数的百分比;
- fault_coverage = (DT + PD*posdet_credit)/FU
- 另一种表达式,(DT + PT*posdet_credit)/all faults
- au_credit = 0% by default
- 所以,在report_summaries报告中,一般看到test coverag比fault coverage稍微高一些,但在实际项目中,两者应该十分接近;
【问题】上述的UD、AU、au_credit分别指的什么?
5.3 Fault Class故障类型
5.3.1 FU FULL:Fault Universe,从生成测试向量角度
- 通过add_fault指定的故障集合;
- 通过add_nofaults把某些模块的故障踢出故障集合;
- 通过set_fault_sampling指定多少百分比的故障被纳入集合;
5.3.2 DI:Detect By Implication
- 测试路径上的故障称为DI,包括扫描链,测试时钟,扫描使能等;
- 可以用扫描链向量检测;
- 该故障不需要手动处理,工具在write扫描链pattern时会自动生成扫描链本身的测试向量;
5.3.3 DS:Detect By Simulation
- 指ATPG工具在做故障演练时可以被观测到的故障(Good Result正确结果 VS Faulty Result错误结果)
5.3.4 DT:Total Detected Faults
- DT = DS + DI
- 最终测试向量所要覆盖的故障;
5.3.5 Possible Detected Faults
- ATPG工具在做故障演练时发现的可能可以被观测故障 分为,posdet可理解为possibleDetected缩写:
- PT:Posdet-detectable
- PU:Posdet-undetectable
- 可以用set_possible_credit指定posdet的权重,通常为50%
5.3.6 AU:ATPG untestable
- ATPG工具无法找到相应的测试向量去测试这些故障,包括:
- UU:Unused,未被使用的端口;
- TI:Tied,故障点被用户接为常值(并非stuck-at故障)
- BL:Blocked,故障点被其他端口阻塞;
- RE:Redundant,冗余的逻辑设计;
- 通常是因为:
- 黑盒或者接0/1的逻辑阻止其他逻辑被测试;
- 非扫描单元和clock sequential depth不够;
5.3.7 UC&UO
- UC:Uncontrollable,无法设置电路状态来激活这个故障;
- UO:Unobservable,故障无法传递到后面的可观测点
- 在做ATPG之前,覆盖率报告会把所偶的testable faults归为UC;
- 在做ATPG后,某一个故障同时是UC和UO的话,归为UC;
- 设置ATPG abort limit导致的UC,UO,称为ATPG Abort:AAB;
- 所谓abort limit是指用户在ATPG生成设置后添加的限制条件,例如pattern、runtime等,不满足这些条件时工具就认为这些故障无法产生测试向量,其实用户只需更改限制条件,就可以生成对应故障的测试向量;
5.3.8 Coverage Report例子
- Fault_type:Stuck-At
- atpg_effectiveness:ATPG效率百分比 = (DT + PD*posdet_credit + (UC+UO但不包含AAB故障))/FU,体现工具在各种限制下的效率;
- basic_patterns:基于扫描链的测试向量个数;
- clock_sequential_patterns:非扫描单元产生的故障。例如,三个寄存器中,前后两个寄存器串在扫描链上,中间寄存器不在链上,如果要检测中间寄存器,就需要使用两个Capture时钟,第一个时钟将前SDFF的状态传递给中间DFF的PPIN,初始化状态,第二个Capture时钟才能将中间寄存器的状态传递给后SDFF进行捕获输出。对于这种未串在扫描链上的单元,工具可以设置检测深度,在深度内的DFF都可以采用这种方式检测,但是超过工具设置的deepth后,这种未串链的单元就不会产生测试向量,将其归为AAB;