摘要 基于一种适合于测试静态简化故障的March SS算法,提出了一种改进的嵌入式随机存取存储器测试算法-March SSE算法。该算法在测试长度不变的情况下,不仅能测出March SS算法所测试的全部的功能故障,而且还能检测出March SS算法所遗漏的固定开路故障,以及大部分的动态故障,故障覆盖率得到了大幅度地提高。
关键词 故障原语,静态故障,动态故障,存储器测试,故障覆盖率
1 引言
随着深亚微米VLSI技术的发展,大量的不同厂家的电路设计或核集成到一个芯片上。存储器密度的增长使存储器的测试面临着更大的挑战。嵌入式RAM存储器是最难测试的电路,因为存储器的测试通常需要大量的测试模式来激活存储器并将存储器的单元内容读出来与标准值进行比较。在可以接受的测试费用和测试时间的限制下,准确的故障模型和有效的测试算法是至关重要的。而为了保证测试时间和故障覆盖率,测试的好坏大大的依赖于所选的功能故障模型。
以前大部分关于故障模型的论文都是把故障的敏化固定在最多一个操作上(如一个读或一个写),这些功能故障被叫作静态功能故障。而基于缺陷注入和SPICE仿真的DRAM的试验分析表明:在没有静态故障的情况下存在另外一种多于一个操作才能敏化的故障(如一个连续的读和写操作),即动态故障。大部分的测试算法主要针对静态故障,对动态故障的覆盖率比较低,但动态故障的测试也是非常重要的[1]。
2 存储器故障模型
故障模型可以用故障原语(Fault Primitive)来表示。单个单元故障用符号表示,两个单元耦合故障用符号表示。S表示单个单元的敏化操作序列,Sa表示耦合单元的敏化操作序列,Sv表示被耦合单元的敏化操作序列,F表示故障单元的值F {0,1},R表示读操作的逻辑输出值R {0,1,-}。‘-’表示写操作激活故障,没有输出值。故障原语可以构成一个驱动所有存储器功能故障的操作序列的完整集合。
2.1单个单元静态故障
单个单元静态故障有12种可能的故障原语,而这12种故障原语可以看作是一个六个功能故障模型的集合,下面是这六种功能故障:1)状态故障(State Fault);2)转换故障(Transition Fault);3)写干扰故障(Write Disturb Fault);4)读破坏故障(Read Destructive Fault); 5)伪读破坏故障(Deceptive Read Destructive Fault);6)错误读故障(Incorrect Read Fault)。这些故障在文章[2]中有详细的解释。
在文章[3]中提到固定故障(Stuck-at Faults)的故障原语是< /0/->和< /1/->,所以固定故障被认为是状态故障与转换故障的并集。固定开路故障(Stuck Open Fault)[4]是由于断开的字线引起的,即0w1或1w0的操作是不能完成的,所以可以认为是转换故障;另外由于存储器的读出依赖于灵敏放大器,可以认为是错误读故障,所以把固定开路故障认为是转变故障和错误读故障的并集。
2.2静态耦合故障
静态耦合故障的故障原语有36种,可以被归纳为以下七种类型的功能故障模型[2]:1)状态耦合故障(State Coupling Fault); 2)干扰耦合故障(Disturb Coupling Fault); 3)转换耦合故障(Transition Coupling Fault);4)写破坏耦合故障(Write Destructive Coupling Fault); 5)读破坏耦合故障(Read Destructive Coupling Fault);6)伪读破坏耦合故障(Deceptive Read Destructive Coupling Fault); 7)错误读耦合故障(Incorrect Read Coupling Fault)。这些故障在文章[2]中有详细的解释。
2.3单个单元的动态故障
只考虑S=xWyRz这种情况。单个单元动态故障的故障原语有12种,可以被归纳为以下三种类型的功能故障模型:1)动态的读破坏故障(Dynamic Read Destructive Fault);2)动态的伪读破坏故障(Dynamic Deceptive Read Destructive Fault);3)动态的错误读故障(Dynamic Incorrect Read Fault)。这些故障在文章[1]中有详细的解释。
2.4动态耦合故障
主要分析两个单元的动态耦合故障,它可分为四种类型。只研究其中的两种(两个连续的操作都应用在耦合单元和两个连续的操作都应用在被耦合单元)。两个单元的动态耦合故障的故障原语有32种,可以被归纳为以下四种类型的功能故障模型[1]:
1)动态干扰耦合故障(Dynamic Disturb Coupling Fault): 耦合单元的连续的两个写,读操作使被耦合单元的值发生跳变。
2)动态的读破坏耦合故障(Dynamic Read Destructive Coupling Fault):耦合单元的某一特定值使被耦合单元的连续的两个写,读操作改变了存储单元的逻辑值并输出错误的值。
3)动态的伪读破坏耦合故障(Dynamic Deceptive Read Destructive Coupling Fault):耦合单元的某一特定值使被耦合单元的连续的两个写,读操作改变了存储单元的逻辑但输出正确的值。
4)动态的错误读耦合故障(Dynamic Incorrect Read Coupling Fault):耦合单元的某一特定值使被耦合单元的连续的两个写,读操作返回错误的值但存储单元的值没有发生改变。
3 存储器测试
在文章[2]中提到的March SS算法如图1所示,它被认为能测出上面所提到的所有的静态简化故障。在文章[3]中把固定开路故障认为是转换故障和错误读故障的并集,但是由于固定开路故障的敏化必须使上次读的值与本次所期望读的值反向,所以对它的测试的算法是不同于错误读故障的算法。通过对图1所示March SS算法的分析可以很容易的发现它不能测出固定开路故障,只须在它的四个元素M1,M2,M3,M4中任意一个元素的最后一个写操作的后面增加一个读操作就能测出固定开路故障(如在元素M1的w1最后面加一个r1)。为了规则性,可以在M1,M2,M3,M4四个元素的后面都增加一个读操作,得到March SS’算法,其算法如图2所示。
图1. March SS算法
图2. March SS’算法
增加的读操作只会影响由这个读操作所敏化的故障的检测。而对于其它的静态故障的检测,由于增加的读操作并不影响存储器单元的内容,所以也不会影响这些故障的覆盖率。在这些由读操作所引起的故障中,除伪读破坏故障和伪读破坏耦合故障以外的其它故障是由一个读操作敏化并且检测的,所以该算法只会增加不会减少对这些故障的覆盖率。最后对于伪读破坏故障和伪读破坏耦合故障,用March SS’算法的测试如表1中的(a)和(b)所示。其中“v>a”表示被耦合单元的地址高于耦合单元的地址,“v
表(a)March SS’算法对伪读破坏故障的覆盖率
表(b) March SS’算法对伪读破坏耦合故障的覆盖率
算法March SS’中的M1,M2,M3,M4四个元素的第二个读操作主要是为了检测由第一个读操作敏化的伪读破坏故障和伪读破坏耦合故障,而对其它的故障的检测没有任何贡献,所以去掉这些读操作并不影响对这两个故障之外的故障的检测。从表1的(a)和(b)可以看出,如果没有这四个读操作同样能测出伪读破坏故障和伪读破坏耦合故障。因此可以去掉March SS’算法中M1,M2,M3,M4四个元素的第二个读操作,得到一个如图3所示的改进的算法-March SSE算法。该算法同样能测出所有的上述的静态故障,另外还能测出固定开路这个不能被March SS测出的静态故障。故障覆盖率得到了提高。
图3. March SSE算法
下面分别来看March SS算法和March SSE算法对动态故障的测试情况,对单个单元的动态故障的测试如表2所示,表格的第三列所对应的是March SS对单个单元的动态故障的测试情况,第四列是March SSE对单个单元的动态故障的测试情况。可以看出March SS算法只能测出其中1/3的故障,而March SSE能够测出5/6的故障。
对于多个单元的动态耦合故障,以两个单元的为例。表3显示了两种算法对动态干扰耦合故障(dCFds)和动态伪读破坏耦合故障(dCFdrd)两种动态耦合故障的敏化和检测情况。而另外两种动态耦合故障动态读破坏耦合故障(dCFrd)和动态错误读耦合故障(dCFir)同理很容易被证明可以全部被March SSE算法测试,而March SS只能测出其中一半的故障。对两个单元的动态耦合故障的总体来讲,March SS算法只能测出其中3/8的故障,而March SSE却能测出7/8的故障。因此对动态故障的故障覆盖率有了大幅度的提高。
4 结论
本文通过对嵌入式存储器的几种不同的类型的动态和静态简化功能故障的分析,在原有的主要用来测试静态故障的March SS算法的基础上提出了March SSE算法。该算法长度为22N , N为存储器的字的个数,其中每个字包含一位。与March SS算法相比较,March SSE算法在测试长度不变的情况下,其故障覆盖率有了大幅度的提高。不但能测出March SS算法所测试的全部的功能故障,而且还能检测出March SS算法所遗漏的固定开路故障,以及85%以上的第2节所描述的动态故障,故障覆盖率得到了大幅度地提高。 |