首页 > 其他分享 >第四章 测试向量的生成

第四章 测试向量的生成

时间:2023-07-22 11:13:18浏览次数:31  
标签:credit 扫描 故障 向量 测试 ATPG 第四章

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.实训

标签:credit,扫描,故障,向量,测试,ATPG,第四章
From: https://www.cnblogs.com/jihexiansheng/p/17462273.html

相关文章

  • 测试md文章
    @TOC欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器,可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我......
  • 标识符测试
    /*测试标识符的使用1.什么是标识符?Java中给变量、方法、类等要素所命的名(字符序列),称为标识符。技巧:凡是自己可以起名字的地方都叫标识符。比如:类命、方法名、变量名、包名、常量名等。2.标识符的命名规则(若未遵守规则,则编译不通过)>由26个英文字母的大小写,0-9,_或$组成......
  • 20230721巴蜀暑期集训测试总结
    T1似乎想复杂了。搓了一个\(O(Q\sqrt{n\logn})\)的做法,成功跳过正解。结果考后发现普通分块就可以\(O(Q\sqrtn)\)。而且似乎还WA了一些点。根据题意可以发现\(b_i\)为\(1\)当且仅当\(i\)在二进制下有奇数个\(1\)。这个可以用来快速求\(b_i\)。再观察性质,发现\(......
  • gitlab的CICD中自定义钉钉发送内容(通过sh脚本发送测试结果)
    背景:这里报告是allure,提取数据可以用data/categories.csv这个文件思路跟上一篇的python是一样的,这里就简单贴下代码 这里需要注意的是json的转义,message变量需要用双引号括起来。CICD中配置如下 ......
  • 3种跳过测试的方法
    1.闪电按钮 2.细粒度控制跳过测试,也就在pom文件中使用代码跳过测试   3.使用指令 ......
  • 数字孪生in电力终端:高效虚拟环境实现测试“左移”
    ​电力资源是现代社会发展必不可少的清洁型可再生资源,在清洁性、高效性、便捷性和适用性等方面优于传统化石能源,是如期实现2030年前碳达峰、2060年前碳中和的“双碳”目标的关键。2006至2019年前,电力行业累计为全社会减少了约159.4亿吨的碳排放,是终端能源消费中最有增长潜力的能源......
  • ShardingSphere水平分表策略配置和测试实战
    概念水平分表把一个表的数据分到一个数据库的多张表中,每个表只有这个表的部分数据核心是把一个大表,分割N个小表,每个表的结构是一样的,数据不一样,全部表的数据合起来就是全部数据针对数据量巨大的单张表(比如订单表),按照某种规则(RANGE,HASH取模等),切分到多张表里面去......
  • 测试发送消息到Microsoft Teams
    创建测试频道:点击团队右侧“···”,点击添加频道: 然后完善频道信息: 创建好频道之后,点击频道右侧“···”管理频道: 可以进行频道人员的添加与删除管理: 点击频道右侧“···”连接器: 在搜索框中,搜索webhook进行搜索: 将IncomingWebhook 添加到频道中: 可......
  • 网络性能测试工具iperf3
    1.创建两个容器#创建第一个容器dockerrun-d--namecontainer1ubuntu:latestsleepinfinity#创建第二个容器dockerrun-d--namecontainer2ubuntu:latestsleepinfinity2.查找第一个容器的ip地址dockerinspectcontainer13.进入第一个容器,并安装iperf3。......
  • 基准测试工具 --- BenchmarkDotNet
    介绍今天介绍一个非常强大的基于.Net的基准测试工具BenchmarkDotNet。BenchmarkDotNet已经被14300多个项目采用,包括非常多的知名开源项目,例如dotnet/performance(.Net所有运行时的基准测试项目)dotnet/runtime(.Net运行时库),Roslyn(c#和VisualBasic编译器),Mono、ASP.NET......