DFT笔记34

4.7.2.4 CASE Studies(案例研究)

这一节按照GA-based的发展情况介绍了一系列文献,拓展阅读。

4.8 ADVANCED SIMULATION-BASED ATPG

4.8.1 Seeding the GA with Helpful Sequences

想要看懂这一节,先得理解一个词:

seeding:上面讲的遗传算法对于测试生成是一种很有效的方法,但是对于一些复杂故障,GA-based methods又不如deterministic ATPGs,对于这样的故障,可以在初始的population中加入一些特定的individuals来引导GA,这就叫做seeding。

举个例子,一个故障在一个时序逻辑电路里面已经被激发并且传播到了一个或者多个flip-flops上,现在,GA想要把fault-effect从这些flip-flops传到primary output上,如果这时候已经提前知道了一些序列可以将fault-effects从a similar set of flip-flops传播出去,那么这些序列就可以被加到initial population,这样可以极大地帮助到GA。

有两种test generators就采用了这种seeding的方法:DIGATE和STRATEGATE。最开始是没有上面所说的序列的,这两种generators会在ATPG进行之前做一步预处理,就是生成一些序列在其中选符合要求的。本质上找这种序列就等同于区分电路的两种状态,说人话就是,找一个序列可以使电路输出不同,说明这种序列就可以将fault-effect传到primary output上。下图就是用四个向量组成的序列"1001, 0101, 1011, 0111"区分一对电路状态(11010, 11000)。

ATPG的主要任务是测试生成,而不是找distinguishing sequences,所以在找这些序列的过程上不宜花费太多。

在DIGATE和STRATEGATE这两种测试生成方法中,在GA的协助下,有两种generate distinguishing sequences的方法:

  1. statically(静态的)
  2. dynamically(动态的)

DIGATE这种方法相比于之前讲的GA-based ATPGs能得到很高的fault coverages。

尽管DIGATE的故障覆盖率很高,但是对于一些difficult-to-activate faults还是很难测到,这些故障的特点是他们没有被激活到任何flip-flop,seeding of distinguishing sequences也是没用的。这些故障需要specific states和justification sequences去让故障自己能够被激活并且传递到一个或者多个flip-flops。但是DIGATE的过程中是做不了这个的,所以会让故障覆盖率损失到最多30%的程度。

STRATEGATE test generator在DIGATE的基础上解决了这个问题,但是存储一个大型时序逻辑电路的所有电路状态是不可能的,因为有n个flip-flops的时序逻辑电路就有2^n个状态,STRATEGATE用线性列表(ATPG产生的测试向量)来引导state justification,因此电路状态的存储就仅仅基于测试向量的数量而不是电路中flip-flops的数量(少了很多,简化很多)。

在实现state justification的过程中,待挑选的states被存储在一个表中,对应的能让电路达到这个state的向量也一起被列出来,如下图:

这个过程得到的一些向量可能不是直接指向target state,但是这些向量中有些片段藏着重要的信息,比如说下图的例子,state 1X0X10需要被justify,现在只有两个序列T1和T2,但是T1仅没能justify第三个flip-flop值,T2仅没能justify最后一个flip-flop值,就像上面所说的他们俩虽然不是完整的解决方案,但是缺各自包含着重要的信息,他俩可以作为GA的seeds推出目标序列T3:

尽管STRATEGATE不能justify每一个目标state,但是它大大弥补了那30%的故障覆盖率gap,相比于其他方法普遍具有更高的故障覆盖率,性能优秀。

4.8.2 Logic-Simulation-Based ATPG

目前讨论的全是针对于目标故障做fault simulation收集信息得到test sequences,但是fault simulation的计算量比logic simulation大很多,所以有人提出用logic simulation实现ATPG。

Logic-simulation-based test generators的测试原理其实就是根据fault-free电路的某些特性得到测试向量。基于逻辑仿真的方法有:

  1. CRIS:将电路活动最大化,以便更好地检测故障
  2. LOCSTEP:对于时序逻辑电路就需要最大化电路状态数量,这样才能尽可能检测更多故障,包括难以检测的故障,但是在大型的时序逻辑电路中要得到这么多状态可能需要非常多的测试向量,这样反而会让故障覆盖率下降
  3. 还有一些其他的方法就是用到测试压缩,这是一块非常重要的内容,后面会单独讲

电路状态划分在logic-simulation-based test generators是比较重要的,划分的示例如下图:

上图假设一个电路有8个flip-flops,全局的状态S被划分成两部分S1和S2,每一部分用十六进制表示,例如"0101 1010"被表示为 (5, A)。全局状态中的(0, 0), (1, 1), (1, 2), (2, 3),可以被划分为S1和S2分别表示为{0,1,2}和{0,1,2,3}。基于划分后的状态信息,会发生两种情景:

  1. 有两个向量序列可以使现在的电路状态变化为两个新的状态 (2, 1) 和 (3, 1),现在要判断哪个状态更好(用哪个向量序列),用电路划分后的角度来看 (3, 1) 是更好的,因为3这个状态在S1中没有,它是一个新的状态,意味着可以检测出更多故障
  2. 还是一样的情景,两个序列可以使电路状态变化为两种不同的,比如(3,0) 和 (2,4),他们都是新的电路状态,但是用哪个要看哪个权重更高,也就是哪个状态对电路的影响更大

除了上面这种,还有一些别的划分电路的方式:

  1. control path flip-flops 和 datapath flip-flops分开
  2. 按照controllability values分开
  3. 按照不同的output cone分开

reset signal masking:避免重复访问reset状态,因为在DFT中很多时候用到复位或者部分复位的向量,这对搜索新的电路状态是不利的,所以要避免。

下图做个例子:

圈里的是容易达到的电路状态,圈外是不容易达到的电路状态,从圈里到圈外的边界状态有3个,A/B/C,例如要从B那拓展,就要避免B又走到A这种已经达到的电路状态,而向外走,所以通过控制primary inputs使B状态不往A走。

用到reset signal masking和state partitioning的算法如下:

这种算法在大型的时序逻辑电路里面能得到很高的故障覆盖率和非常少的计算量代价。对于某些电路而言,用上面这样的基于逻辑仿真的ATPG能得到比其他deterministic和simulation-based方法更高的故障覆盖率。

相关推荐
Li_RuiQi8 小时前
DAgger方法演进_独立学习笔记
笔记·学习·计算机视觉
Li_RuiQi12 小时前
DAgger与交互式模仿学习_ACT学习笔记
笔记·学习
He BianGu12 小时前
【笔记】C# 中BindingFlags的详细作用
笔记·c#
AI视觉网奇12 小时前
turtle 入门教程笔记
笔记
跨知易知识产权13 小时前
美国专利确权是什么,和专利诉讼有什么不一样?
笔记
杨逢昌工厂6S管理13 小时前
126-杨逢昌6S三环体系:越做越乱的现场熵增机理与基准化治理——一线现场诊断笔记
经验分享·笔记·职场和发展·学习方法
悟道书生13 小时前
若依 RBAC 权限控制学习笔记
java·网络·笔记·sql·学习·vue
陈哈哈111114 小时前
折腾了半天,总算把 Vim 9.2 装明白了
笔记
陈哈哈111114 小时前
折腾了半天,总算把 OpenGL 的开发环境给装明白了
笔记
深圳老胡15 小时前
STM32F103 硬件 SPI 与软件 IO 模拟 SPI 最高速度差异详解
笔记·stm32·单片机·代码规范·1024程序员节