第四章 测试向量的生成

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.vread_cell_library all_cells.atpgset_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;

6.实训

实训环节后续补充

posted @ 2023-07-22 11:00  几何0814  阅读(2726)  评论(0编辑  收藏  举报