宋建磊 许航 陆祥磊
摘要:存储器应用广泛,使用量大,发展迅速,随着近年来存储芯片容量不断增大,故障检测难度与成本也逐渐上升。从存储器的故障模型和测试技术出发,对比分析了不同测试算法的特点,以便在实际检测中选择合理的测试算法,同时提出了一种改进型的测试算法,在基本不改变测试时间长度的情况下增加了故障检测类型,是一种简单可行的方法。
关键词:存储器;测试算法;故障
一、前言
存储器作为一种能存储程序及各种信息的元器件,在汽车、工业控制、航空航天等领域都有着广泛的应用。随着电子信息技术的飞速发展,存储器在市场上的需求越来越大,特别是在航空航天领域的广泛应用,使得其可靠性越来越受到重视。在存储器装机使用前对其进行全面测试是提升其使用可靠性的有效手段。存储器测试又分为直流电参数测试、交流电参数测试以及覆盖全存储单元的功能测试[1],其中最关键但也最复杂的部分,就是覆盖全存储单元的功能测试。本文以存储器主要故障模型为切入点,介绍了常见的功能测试算法,通过分析不同测试算法的故障检出情况以及算法复杂度等,比较不同算法间的优劣,为实际检测中算法选择起到一定指导作用。本文中使用到的符号含义见表1。
二、存储器故障模型
功能正常的存储器其所有存储单元应能正确进行读取和写入。按照其不同的故障模式,存储器的功能故障主要可归纳为以下几种故障模型:
(一)固定故障(Stuck-At-Fault,简称SAF)
存储单元的逻辑值始终保持0状态(0状态故障)或者始终保持1状态(1状态故障),不受写入操作影响。
(二)转换故障(Transition-Fault,简称TF)
转换故障的表现形式为存储单元无法实现从1到0或者从0到1的状态转换,它与固定故障的区别是发生固定故障的存储单元状态始终不会转变,而转换故障单元其状态可能由于一些其他原因(非写入操作)而发生跳变。转换故障可通过对存储单元进行两次状态翻转操作检出。
(三)耦合故障(Coupling—Faul,简称CF)
发生耦合故障的单元(受主单元),其单元状态会受到其他单元(施主单元)的影响,导致其状态发生不期望的变化。当对施主单元进行读写操作时,受主单元的状态会受到影响发生跳变。当受主单元的施主单元只有一个时,成为双单元耦合故障。当施主单元数量为两个或以上时,称为多单元耦合故障。耦合故障主要有以下几个分类:
1.翻转耦合故障(CFin):施主单元从0到1或者从1到0的状态变化导致受主单元状态翻转,可用符号<↑|?>或<↓|?>表示双单元的翻转耦合。
2.等幂耦合故障(CFid):施主单元从0到1或者从1到0的状态变化导致受主单元状态变为0或1,可用符号<↑| 0>或<↑| 1>或<↓| 0>或<↓| 1>表示双单元等幂耦合。
3.状态耦合故障(SCF):特定的施主单元数据状态会导致受主单元状态改变为特定状态,可用符号<0|0>或<0 | 1>或<1 | 0>或<1 | 1>表示双单元状态耦合故障。
4.桥接故障[2](BF):是两个或两个以上单元连线之间的短路。有AND型以及OR型,可用符号<(0,0)|(0,0)>或<(0,1)|(0,0)>或<(1,0)|(0,0)>或<(1,1)|(1,1)>表示AND型桥接故障,可用符号<(0,0)|(0,0)>或<(0,1)|(1,1)>或<(1,0)|(1,1)>或<(1,1)|(1,1)>表示OR型桥接故障。
(四)地址解码故障(Address decoder Fault,简称AF)
表示地址解码器错误,正常情况下,地址和存储单元应该是一一对应的,地址解码故障可理解为单元与地址间没有了一一对应关系。根据不同的对应关系,故障又可分为以下四种情况,如图1所示:故障1表示一个地址并没有对应的存储单元;故障2表示存储单元没有对应的访问地址;故障3表示一个地址对应了两个或以上的存储单元;故障4表示多个地址对应一个存储单元。由于地址数量和单元数量是一样多的,所以一般来说,地址解码故障多呈组合情况出现,图2是地址解码故障的几种组合。
三、存储器测试算法与分析
存储器故障种类多,检测方式各不相同,所以在存储器的功能测试中,测试算法是非常重要的,其不仅关系到故障检出率,还影响检测效率等多个因素。目前主流的测试算法有:
(一)MSCAN算法
MSCAN算法又叫全0全1法,算法主要对所有单元完成W0,R0,W1,R1操作。执行方式如下:
1.从首地址开始,按照地址递增的方式把所有单元写入0;2.从首地址开始,按照地址递增的方式读取所有单元内存储的0;3.从首地址开始,按照地址递增的方式把所有单元写入1;4.从首地址开始,按照地址递增的方式读取所有单元内存储的1。
MSCAN算法遍历了所有单元,进行了2次读操作、2次写操作,测试算法的时间长度为4n,时间复杂度为O(n)。结合第二章介绍的存储器故障模型分析,MSCAN算法可以检测固定故障SAF,故障覆盖率较低。
(二)Checkerboard算法
Checkerboard算法又叫棋盘算法,其在MSCAN算法基础上进行了改进,将全0全1变为了01交替出现,将0用白色表示,1用黑色表示,则存储单元完成一次写入后呈现出的结果类似国际象棋棋盘,故得名棋盘法。图3描述了棋盘算法的执行过程,交替将存储单元分为a、b两块,则算法执行方式如图3所示:
1.从起始位置开始,按照地址递增的方式把a单元写入0,b单元写入1;
2.从起始位置开始,按照地址递增的方式读取所有单元;
3.从起始位置开始,按照地址递增的方式把a单元写入1,b单元写入0;
4.从起始位置开始,按照地址递增的方式读取所有单元。
此算法对所有存储单元完成了4次读/写操作,测试时间长度为4n,算法时间复杂度为O(n),可检测固定故障SAF,相邻单元的桥接故障,故障覆盖率较低。
(三)March算法
March算法有多种不同的改进型,本文以基础的March 6n算法为例,介绍March算法的执行方式如下:
1.全部单元写0;
2.读A0单元的0,然后A0单元写1,然后读A1单元的0,再A1单元写1,直到所有单元完成读0写1操作,此时所有单元应为1;
3.从An-1依次递减至A0完成读1写0操作,此时所有单元应为0;
4.读所有单元的0。
此算法对所有存储单元完成了3次写入操作和3次读取操作,测试时间长度为6n,时间复杂度为O(n),March算法指令相对简单,且其对所有单元多次逐个进行读写的操作,能够检测出固定故障SAF、地址解码故障AF、转换故障(TF),故障覆盖率较高[3]。
(四)Gallop算法(奔跳法)
Gallop算法也称为1(0)漫游或乒乓测试,1漫游测试过程如下:
1.所有单元写0;
2.A0写1,然后A1读0,A0读1,然后A2读0,A0读1,接着A3读0,A0读1,以此类推,直到An-1读0,A0读1;
3.将A0改写为0,A1写为1,重复以上步骤,直到最后一个存储单元An-1写1,完成2步骤描述的操作后从1改写为0。
整个测试过程就像1在整个存储阵列中漫游一样,图5表示1漫游的情况,0漫游算法同理。该算法测试时间长度为2(n+2)2,时间复杂度为O(n2),能够检测固定故障SAF、转换故障TF、耦合故障CF,故障覆盖率较高[4]。
(五)测试算法分析
将各个算法的测试时间长度、时间复杂度、故障覆盖率汇总如表2。从表中可看出,MSCAN算法与Checkerboard算法测试时间最短,但覆盖率最低,March算法与Gallop算法故障覆盖率都较高,但Gallop算法时间复杂度太高,不具备实际操作价值。综合评比本文中介绍的几种算法,March算法具备较高的故障覆盖率和较低的时间复杂度,是最优算法。在实际应用中,对于使用SPI等串行协议进行通信的存储器,其地址、数据以及指令都是通过SDI线串行输入,而March算法需要频繁地对单个存储单元进行操作,这样会增加大量的地址和指令的传输,极大地增加通信数据量,增加测试时间长度,同时也增加编程难度。故针对使用SPI等串行通信协议进行读写操作的存储器,为了提高测试效率,需要利用其自带的地址递增的写入与读取功能,故MSCAN算法与Checkerboard算法在实际操作上更具优势。同时,笔者在实际应用中,结合转换故障TF的特性,对Checkerboard算法进行了改进,使改进后的Checkerboard算法能够检出转换故障,其执行步骤如下:
1.从起始位置开始,按照地址递增的方式把a单元写入0,b单元写入1;2.从起始位置开始,按照地址递增的方式读取所有单元内的0或1;3.从起始位置开始,按照地址递增的方式把a单元写入1,b单元写入0;4.从起始位置开始,按照地址递增的方式读取所有单元内的1或0;5.从起始位置开始,按照地址递增的方式把a单元写入0,b单元写入1;6.从起始位置开始,按照地址递增的方式读取所有单元内的0或1。
与Checkerboard算法相比,改进后的Checkerboard算法增加了一次所有单元的状态翻转,即所有单元均完成0→1、1→0的翻转,测试时间长度增加到6n,故障覆盖率增加转换故障TF。
综上,March算法是最优算法,应该优先考虑,但采用改进后的Checkerboard算法,是一种经济有效的算法,就实际测试而言,也是符合要求且行之有效的。
四、结语
本文分别介绍了四种常见的存储器故障模型以及四种常见的存储器测试算法,对比分析各算法的特点,总结出March算法是最优算法,应该优先考虑,并提出Checkerboard算法的一种改进方案应用于SPI等串行通信存储器,在保持时间复杂度的情况下提高了故障覆盖率,在考虑测试效率的情况下,也是一个较为不错的选择。
参考文献
[1]龙永佳.存储器测试技术研究与二次筛选中的工程应用[D].陕西:西安电子科技大学,2020.
[2]陈如意.存储器故障与可靠性试验研究[D].广州:广东工业大学,2016.
[3]刘炎华,景为平.存储器故障诊断算法的研究与实现[J].电子与封装,2006,6(12):23-25+48.
[4]杨四洲.关于基于存储器故障的测试算法探讨[J].科技信息,2013(13):81+93.
作者单位:贵州航天计量测试技术研究所