首页> 中国专利> 板级时序电路测试矢量生成方法

板级时序电路测试矢量生成方法

摘要

板级时序电路测试矢量生成方法是一种用于板级故障检测快速高效地生成测试矢量,从而检测出板级电路的故障的方法,首先根据自己建立的数学模型为时序电路建立一组描述方程,然后结合一个代价函数和布尔差分函数不断地迭代或求解方程组从而推倒出测试矢量,该方法是一种行之有效的板级时序电路测试矢量生成方法。它能为板级故障检测快速高效地生成测试矢量,从而检测出板级电路的故障。

著录项

  • 公开/公告号CN1869723A

    专利类型发明专利

  • 公开/公告日2006-11-29

    原文格式PDF

  • 申请/专利权人 河海大学;

    申请/专利号CN200610085557.5

  • 发明设计人 曹宁;杨巨前;胡居荣;俞金龙;

    申请日2006-06-23

  • 分类号G01R31/28(20060101);G01R31/317(20060101);

  • 代理机构32200 南京经纬专利商标代理有限公司;

  • 代理人叶连生

  • 地址 210098 江苏省南京市西康路1号

  • 入库时间 2023-12-17 17:59:48

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-08-29

    未缴年费专利权终止 IPC(主分类):G01R31/28 授权公告日:20090107 终止日期:20110623 申请日:20060623

    专利权的终止

  • 2009-01-07

    授权

    授权

  • 2007-01-24

    实质审查的生效

    实质审查的生效

  • 2006-11-29

    公开

    公开

说明书

技术领域:

本发明是一种用于板级故障检测快速高效地生成测试矢量,从而检测出板级电路的故障的方法,属于电路测试的技术领域。

背景技术:

随着计算机技术的发展,在数字系统的设计、生产和维护过程中,都需要进行各种测试。测试码的生成是测试的中心问题,而测试生成方法则是自动测试生成(ATPG)的关键。在数字系统的生产、维护过程中的板级故障测试,其主要目的是检查印刷线路和线路与元件之间的连接以及元器件的“好与坏”,这类测试有其自身的特点、要求和难点。

对于组合电路总可以在有限的时间里面确定是否可测试,但对于时序电路里面的逻辑故障而言,由于存储单元和反馈线路的存在使得很容易出现反复的时帧迭代过程,因此对于时序电路不能保证在有限的时间里面确定一个故障是否可测,同时由于竞争冒险等问题存在,极易使本来有效的测试失效,基于这方面考虑,一般认为目前的时序电路的测试生成在理论上还没有完全的解决。

目前国内外学者对时序电路的测试生成方法的研究已经做了很多的工作,已经研究出了多种测试矢量生成方法。时序电路的测试生成有这样的几种方法:一、验证时序电路是否按状态表工作,即功能测试;二、把时序电路转换成一系列的组合电路,用组合电路的处理方法处理时序电路,然后用基于故障的确定性方法进行测试生成;三、可测试性设计。对于板级时序电路故障检测而言通常采用前两种方法进行。如果检测的只是一个模块那么通过功能检测就可以达到板级故障的目的(判断电路模块是否正常),但对于多模块级联的时序电路就必须定位到具体是哪个模块出问题,功能测试变的不那么实用了,此时可以采用第二种时序电路的测试生成方法。从20世纪80年代开始,基于路径敏化的多时段测试生成方法陆续问世,这类方法都是基于路径反向时间处理的方法,都是首先确定给定故障的电路输出,然后在时间上向后进行测试生成,始于原始输出,经过故障点,止于未初始化状态。各种STG方法和DVST方法都是基于D算法的多路径敏化方法。这些方法的优点是存储空间少,缺点是过于复杂和效率不高。许多故障测试生成方法都采用先前状态信息来增加效率和故障覆盖率,但至今还没有解决先前状态信息问题的好方法。而另一种方法,基于模拟器的测试生成方法,例如CONTEST(一种测试生成方法)方法,它是基于并行故障模拟的,这类方法的优点是对时序的个数没有什么限制,但用于测试生成的处理器的内存要足够的大,原因是这类方法实现时故障表中每一个故障对电路中每一个节点的效应都需要存储起来。

如上述所示,目前的时序电路的测试生成方法主要存在算法复杂度太高效率低或是对处理器内存要求太高等缺点,比如FASTEST(一种测试生成方法),它是基于PODEM算法、九值逻辑、时间向前处理测试生成和状态初始化的。其中的PODEM的思路为:对激活的故障向后追踪到原始输入,搜索所有可能的原始输入赋值,只要找到一个符合要求的即可作为测试图形。从PODEM算法思路中可以看出,它在构建一条从故障点到原始输出的敏化路径过程中由于对原始输入赋值的随机性,它需要寻找一种快速的穷举原始输入赋值的方法来找到测试图形,同时它也不能保证当前的选择是否便于FASTEST中状态初始化过程,FASTEST对电路的内部结构依赖性仍然很大。

在板级时序电路的测试生成过程中,检测的目的是检测板级连线或元器件的好坏问题,针对这样的一个应用背景,目前的时序电路的测试生成方法由于不是存在复杂度高就是存在对处理器内存要求过高等问题,对一些要求做到实时测试生成的应用场合还有一定的困难。同时在板级时序电路的故障检测过程中,还要做到门级和模块级的统一处理,这也是目前这些方法做不到的。

发明内容

技术问题:本发明的目的是针对数字系统的生产、维护过程中的板级故障自动测试生成而提供一种板级时序电路测试矢量生成方法,它能为板级故障检测快速高效地生成测试矢量,从而检测出板级电路的故障。

技术方案:本方法针对板级时序电路的测试生成特点,首先根据自己建立的数学模型为时序电路建立一组描述方程,然后结合一个代价函数和布尔差分函数不断地迭代或求解方程组从而推倒出测试矢量,是一种行之有效的板级时序电路测试矢量生成方法。本方法从宏观角度出发,充分利用电路的结构信息,将运算空间限制在电路的可到达的状态空间里面,这样相对于一般的方法就可以节省很多浪费在判决不可达状态上的时间,因此和一般算法相比减少了大量的计算量。故障的传播在这个过程中只是体现为函数表达式的搜索,与一般算法的故障敏化相比显得相对比较简单。在时序电路的测试矢量生成过程中,置初态一直是一个比较困难的问题,在本方法中采用给存储元件分配“置初态优先级”的方法来实现置初态目的。本方法从模块级着眼,将时序电路抽象为一组原始输入、一组原始输出、一组触发器和内部逻辑描述,电路的结构信息体现为逻辑描述,在解决模块级时序电路的模块及PI故障检测应用中能为其生成有效的测试矢量。

本方法是一种用于板级时序电路的测试生成的方法,其实现步骤如下:

1)获取原始电路输入:可以接受时序电路的网表描述方式或HDL硬件描述语言描述方式;

2)判断时序电路描述是否是网表描述方式:如果不是则将其转化为网表描述方式,否则直接跳转到步骤3);

3)从故障列表文件中选择一个故障,进行故障注入;

4)结合电路的网表描述和具体故障产生电路的方程描述模型。在生成方程组的过程中将整个时序电路抽象为如下模型:

在该模型中电路输入包括:电路的原始输入(PI)、电路的故障点、触发器的输出端;电路的输出包括:电路的原始输出(PO)、电路的故障点、触发器的除输出端以外的所有端口;逻辑描述模块指电路的内部结构信息的逻辑方程表示;

5)根据电路的方程组描述搜索故障激活路径,选择最优路径,同时推出故障激活时触发器组和原始输入所要求的逻辑值组Ss;这里的推导主要是利用了布尔差分法,通常求出的是一组能够激活故障的逻辑值;

6)从逻辑值组Ss中选择最优的一个作为状态起点能否成功:如果选择成功进入步骤7),否则进入步骤13);这里的选择是根据一个代价函数进行的,代价函数是一个关于元器件可控性参数等有关的函数;

7)从Ss中删除当前已选择的一个初始状态:目的是为下一次选择最优起点作准备;

8)判断当前状态是否需要向前迭代。如果不需要则进入步骤14),否则进入步骤9):这里判断的方法是看目前的迭代序列是否已经可以获取测试矢量或是根据迭代情况已经可以判断出出现了循环迭代;

9)判断当前状态能否向前迭代:如果不能就进入步骤12),否则进入步骤10):判断的标准是它是否是一个合法的状态,是否是有前驱状态的状态;

10)根据当前状态Sc求解前一个状态Sc-1:求解完还必须对所有解进行驱动方程的验证处理;在求解的过程可能会得到多个解,必须选择一个最优的作为下一次迭代的起点;

11)选择一个最优的解作为下一次迭代的起点:同时回到步骤8);优劣选择根据一个优劣函数进行的,这个函数会选择出最有利于状态初始化那个状态,这个函数是一个关于可控性参数、触发器的初始化可控级的函数;

12)选择下一个次优分支是否成功。如果成功跳转到步骤8),否则跳转到步骤6);

13)报告测试生成失败:进入结束状态;

14)测试矢量生成成功,整理获取的测试矢量:进入结束状态。

本方法中最为关键的两个点就是方程组的求解和对解进行优劣选择的选择函数。下面举例说明组的求解过程:(!为非运算符、&为与运算符、#为或运算符,运算优先级由高到底为:”!”,”&”,”#”)

现定义下面三种逻辑值:0、1、X,其中0表示布尔逻辑值0,1表示布尔逻辑值1,X表示是解方程时对此项没有要求不论它是1还是0都可以。在此基础上并定义两种运算交运算(∩),和包含运算(з)。见下面的运算举例:∩:1∩X=1;0∩X=0;1∩0=Ф(表示空);自身与自身的交为本身;з:X包含1或0;自身包含自身;分别记作:Xз1;Xз0;1з1;对于向量如(1XX0)∩(X1X0)=11X0;向量XX0X包含向量1X01记为:XX0Xз1X01。这两种运算用于求解方程组的解。(List_NO表示列号,Fun_Value表示函数值)

  List_NO  A  B  C  Fun_Value  1  0  1  X  1  2  1  X  1  1  3  X  4  0  X  X  0  5  X  X  0  0  6  X  7  1  X  X  1  8  X  1  1  1

                      表1

解这个方程组时先将上面表格中的第1、2行,第4、5行,第7、8行分别组成一个组,设其组号分别记为:Group1、Group2、Group3。先求Group1与Group2的交集为:01X;再用这个结果与Group3求交集为:011。如果最后求得的结果不止一项还需要进行对结果求并集,以免结果重复出现。这就是对布尔方程组的求解方法。优劣选择函数是一个关于可控性参数、触发器的初始化可控级的函数。

有益效果:本方法能够从模块级着眼,对时序电路进行方程组建模并在此基础上对方程组定义了两种运算,既能充分利用电路的结构信息又能避免敏化路径的复杂过程。整个过程起始于布尔差分法的故障激活条件的求取,接着就是不断的迭代和判断,在求解测试矢量的过程中必须依据一个代价函数和迭代时的优越判断函数。本方法采用一致向后的时间帧迭代完成板级时序电路的测试矢量生成,整个过程运算量相比其它方法要小的多,同时本方法结合硬件描述语言(HDL)可以做到模块级和门级的统一或是混合处理,它没有其它一般方法的路径敏化的复杂度,也没有其它方法的“盲目性”。是一种非常有效的板级时序电路的故障检测的方法。

附图说明

图1是本方法中时序电路抽象模型示意图,

图2是本方法中测试用例电路图示意图,

图3是国际上通用的用于检测测试矢量生成方法的10种基准电路中之一的S27示意图,

图4是串并转换电路示意图,

图5是方法流程示意图的上半部分。

图6是方法流程示意图的下半部分。

具体实施方式:

本实例采用典型的S27测试电路(国际上通用的用于检测测试矢量生成方法的10种基准电路中之一的电路图,其结构如图3所示)和一个串并转换器(记为shif_reg_3,其结构如图4所示)级联而成。检测的故障为图2中所标注的s-a-1(固定1型故障)故障。

具体步骤如下:

1)获取电路的描述:本电路的描述为网表描述;

2)通过判断知道由于本电路是用网表描述的,所以本电路不需要作描述转换处理;

3)从故障列表文件中选择一个故障,注入如图3中所标注的故障;此故障为模块接口固定1型故障;

4)可以根据电路的描述信息和步骤3)所注入的故障获取此时序电路的描述方程组为:(q_0_,q_1_,q_2_分别为图2中串并转换模块的输出;U1_u1_reg_q,U1_u2_reg_q,U1_u3_reg_q分别为图2中串并转换模块内部的触发器,这三个触发器的时钟输入端和D输入端分别记为U1_u1_reg_q.C,U1_u2_reg_q.C,U1_u3_reg_q.C,U1_u1_reg_q.D,U1_u2_reg_q.D,U1_u3_reg_q.D;shCP为图2中串并转换模块的时钟输入信号;CP为图2中S27点路的时钟输入信号;U2_reg_G5,U2_reg_G6,U2_reg_G7分别为图2中S27电路模块内部触发器,这三个触发器的时钟输入端和D输入端分别记为U2_reg_G5.C,U2_reg_G6.C,U2_reg_G7.C,U2_reg_G5.D,U2_reg_G6.D,U2_reg_G7.D;G0,G1,G2,G3分别为图2中S27点路模块的输入信号。)

子方程组<a>

> > >q>_>0>_>=>U>1>_>u>1>_>reg>_>q> > >q>_>1>_>=>U>1>_>u>2>_>reg>_>q> > >q>_>2>_>=>U>1>_>u>3>_>reg>_>q> > >s>

子方程组<b>

> > >U>1>_>u>3>_>reg>_>q>·>C>=>shCP> > >U>1>_>u>3>_>reg>_>q>·>D>=>U>1>_>u>2>_>reg>_>q> > >s>

子方程组<c>

> > >U>1>_>u>2>_>reg>_>q>·>C>=>shCP> > >U>1>_>u>2>_>reg>_>q>·>D>=>U>1>_>u>1>_>reg>_>q> > >s>

子方程组<d>

子方程组<e>

子方程组<f>

子方程组<g>

整个电路的方程组模型描述由:子方程组<a>、<b>、<c>、<d>、<e>、<f>、<g>组成。

5)根据电路的方程组描述推出故障激活时触发器组和原始输入所要求的逻辑值组Ss。本例中注入的故障(见图2)对应于原理图4上的触发器U1_u1_reg_q的D输入端的s-a-1(固定1型故障)故障,进行方程搜索处理以找到一个可以在原始输出端(PO)观测到故障效应的路径。本例中可以通过下面三条路径:U1_u1_reg_q到达q_0_;U1_u1_reg_q经过U1_u2_reg_q到达q_1_;U1_u3_reg_q经过U1_u2_reg_q经过U1_u1_reg_q到达q_2_;观测出故障效应。根据代价函数分别计算出这三条可观测出故障效应的路径的代价为:3、6、9。所以选择代价最小的一条路径即第一条路径。(路径搜索在本方法中变的非常简单,只是表达式的简单搜索过程)利用布尔差分法计算出故障激活时触发器状态,本例中计算结果为:只对触发器

U1_u1_reg_q有要求,其要求值为0,其对应的时钟深度为1,即当触发器U1_u1_reg_q的D输入端值为0时只要一个时钟就可以将故障效应传播到原始输出端q_0_。

6)本例中求得的状态组中只有一组状态要求值,所以选择的最优的为触发器U1_u1_reg_q的值为0。

7)从Ss中删除步骤6)所选择的一组状态。

8)通过判断当前状态需要迭代处理。

9)通过判断当前状态能够进行向前迭代处理。进入步骤10)进行继续处理。

10)根据当前状态Sc求解前一个状态Sc-1。当前状态要求结果为U2_reg_G5.D=>X;U2_reg_G6.D=>X ;U2_reg_G7.D=>X;U1_u1_reg_q.D=>0。通过解方程得解为:

  G0  G1  G2  G3  U2_reg_G5 U2_reg_G6  U2_reg_G7  0  X  X  X  0 1  X  X  0  X  1  0 X  0

                           表2

对结果进行驱动方程验证,由于驱动方程是受原始输入直接控制的,所以对解没有必要进行取舍。通过优劣选择函数分别求出这两组中最优的一组,本例中第一组优越值为13,而第二组的优越值为21所以选择第一组作为下一次迭代的起点状态。

11)根据上一步获取的状态起点,回到步骤8)进行判断得目前还不能获取测试矢量,需要进一步迭代,利用新的当前状态进行迭代处理,要求结果为U2_reg_G5.D=>0;U2_reg_G6.D=>1;U2_reg_G7.D=>X;U1_u1_reg_q.D=>X。通过解方程得解为:

  G0  G1  G2  G3  U2_reg_G5  U2_reg_G6  U2_reg_G7  X  0  X  1  0  X  0  0  X  X  X  0  1  X

                                  表3

先进行驱动方程验证处理,同样再通过优劣选择函数求出这两组解中最优的一组,第一组优越值为10,而第二组由于其出现了状态重复要求,所以其迭代值为一个非常大的值本方法里用-1来表示这个值。所以选择第一组作为下一次迭代的起点。

12)回到步骤8)进行判断处理,由于还需要迭代,故继续进行迭代,当前要求:U2_reg_G5.D=>0;U2_reg_G6.D=>X;U2_reg_G7.D=>0;U1_u1_reg_q.D=>X。通过解方程得解为:

  G0  G1  G2  G3  U2_reg_G5  U2_reg_G6  U2_reg_G7  0  X  1  X  X  X  X  X  0  X  1  0  X  0  0  0  X  X  X  X  0

                                     表4

还是先进行驱动方程验证,再进行优劣分析得第一组解优越值最小,所以选择第一组解为下一次迭代的起点。

13)回到步骤8)经过判断当前对触发器的状态已经没有要求,所以可以获取所需要的测试矢量了,迭代过程结束。迭代全过程如下:

  G0  G1  G2  G3  U2_reg_G5  U2_reg_G6  U2_reg_G7  U1_u1_reg_q  CP  shCP  X  X  X  X  X  X  X  0  X  1  0  X  X  X  0  1  X  X  1  X  X  0  X  1  0  X  0  X  1  X  0  X  1  X  X  X  X  X  1  X

                                              表5

本表中时钟信号CP、shCP的值为X表示对其没有要求,为n表示需要n个上升沿时钟信号,如果为-n表示需求n个下降沿时钟信号。

14)至此测试矢量生成成功,整理获取的测试矢量。反向求取便可以获取对应故障的测试矢量:(用类ABEL语法表示)

module Top

u,d,c,k,x,z=.U.,.D.,.C.,.K.,.X.,.Z.;″常量定义

″输入信号:

    G0,G1,G2,G3,CP,shCP pin;

″输出信号:

                                -10-

    q_0_,q_1_,q_2_pin;

    ″q=[q_0_,q_1_,q_2_];

″=================================================

Test_vectors

([CP,shCP,G0,G1,G2,G3]->[q_0_,q_1_,q_2_])

[c,x,0,x,1,x]->[x,x,x];

[c,x,x,0,x,1]->[x,x,x];

[c,x,0,x,x,x]->[x,x,x];

[x,c,x,x,x,x]->[x,x,x];

END

″==================================================

”此时如果实际电路的结果为0表示没有故障否则表示有故障。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号