作者:来源:电子与封装/刘炎华1景为平21东南大学集成电路学院2南通大学上网日期:2007年01月18日1引言存储器是各种电子设备中保存信息的主要部件,随着存储器芯片的密度和复杂度的日益提高,设计一个良好的测试算法来测试存储器变得尤为重要,存储器按功能,主要可分为随机存储器(RAM)和只读存储器(ROM)。随机存储器(RAM)根据存储阵列所用的电路类型可分为静态随机存储器(SRAM)、动态随机存储器(DRAM),只读存储器(ROM)可分为掩模编程ROM和现场可编程ROM。2存储器的故障模型研究存储器的检测方法,就必须先建立存储器单元的故障模型,也就是要求把物理故障模型化为逻辑故障,通常可以用功能模型或灰匣子模型将存储器故障模型化,典型RAM功能模型如图1所示,该模型是由VandeGoor提出的简化功能DRAM模型[1]。对于图1的功能模型,存储器的故障主要表现有3类:(1)地址解码器故障(AF)[2],主要表现为4种形式(如图2所示)。(2)读写逻辑模块故障。主要表现为在读写电路中,某些检测放大器的出或者写入驱动器的逻辑部分,可能产生开路、短路或者I/O固定的故障,在读写电路的数据线之间存在交叉耦合的干扰。(3)存储单元阵列故障,由于存储单元阵列是存储器内规模最为复杂的一个模块,因此出现故障的概率最大,故障的类型也最为复杂,主要是由于存储器单元内的数据线开路、短路以及串扰所引起的。对于上述的功能模型去掉其中的某些逻辑模块,就可用于ROM的测试。3存储器的简化功能故障[2、5、6]基于以上各模块的故障表现形式,又由于地址译码故障和读写逻辑故障可以等效的功能映射为存储器单元阵列故障,故可把存储器故障简化为下列四种功能故障:(1)固定故障(stuck-AtFault,SAF)单元或连线的逻辑值总为0或总为1的故障,单元/连线总是处于有故障的状态,并且故障的逻辑值不变。(2)转换故障(TransitionFault.TF)转换故障是SAF的一种特殊情况,当写数据时,某一存储单元失效使得0→1转变或1→0转变不能发生,表现为固定故障的形式。(3)耦合故障(CouplingFault,CF)存储单元中某些位的跳变导致其他位的逻辑发生非预期的变化,它既可以发生在不同单元之间,也可以发生在同一单元不同位之间。(4)相邻矢量敏化故障(NeighborhoodPatternSensitiveFaults,NPSF)一个单元因相邻单元的活动导致状态不正确,一个单元的相邻单元可能有5个,也可能有9个,如图3的(a)、(b)所示。4存储器故障诊断算法分析针对存储器故障模型中的各种故障,人们提出了各种诊断算法,目前主要使用的算法有:Checkerboard算法(棋盘法)、Gallop算法(奔跳法)、March算法(进行法)等。4.1Checkerboard算法(棋盘法)[7]棋盘法的测试过程是首先对每一个存储单元赋值,使得每一个单元与其紧相邻的各个单元的值都不同,如图4所示,即把整个存储阵列分为两块a、b,然后采用如下过程对a、b进行读写;(1)对分块a(b)中的单元写0(1);(2)读所有单元;(3)对分块a(b)中的单元写1(0);(4)读所有单元;(5)该算法理论上操作的次数是O(N),其中N为存储器容量,可以检测SAF故障和相邻单元的桥接故障,其故障覆盖率较低。4.2Gallop算法(奔跳法)[5,7]Gallop算法也称为1(0)漫游或乒乓测试,测试过程如下:(1)部分地址单元清0(1);(2)A0写1(0),然后A1读0(1),A0读1(0),然后A2读0(1),A0读1(0),接着A3读0(1),A0读1(0),直到全部单元;(3)将A0改写为0(1),写A1为1(0),重复以上步骤。整个过程就像1(0)在整个阵列中漫游一样,图5表示1漫游的情况,该算法具有较高的故障覆盖率,能检测SAF故障、TF故障以及CF故障,单位该算法操作次数是O(N2)需要较长的测试时间。4.3March算法(进行法)[3,4](1)全部单元中写0;(2)读A0单元的0,然后再改写为1,然后读A1的0,再改写A1为1,直到An-1。这样所有单元均为1;(3)然后从An-1到A0作读1写0再读0的操作。该算法的操作次数为O(N),能检测全部的SAF故障、AF故障以及TF故障。5一种基于棋盘算法的改进及实现通过研究和对比上述3个算法发现,Checkerboard(棋盘)算法和March算法以线性方式进行读写,因此存储器操作次数与存储器容量N成正比,Gallop算法虽然有较高的故障覆盖率,但由于其对存储器刺激次数过多,因此,在实际测试中不是一种很经济的测试算法,Checkerboad算法只实现了0→1或1→0的读写,所以不能测试变迁故障。而March算法恰恰实现了这两个状态的转换,但March算法操作次数(6N)要多于Checkerboard算法的操作次数(4N),对于大容量存储器的测试,March算法将需要比Checkerboard算法更多的测试时间来完成整个测试过程,因此结合March算法的特点,对Checkerboard算法进行如下改进。(1)对分块a(b)中单元写1(0);(2)对分块a(b)中的单元写0(1);(3)读所有单元;(4)对分块a(b)中的单元写1(0);(5)读所有单元。这样整个存储器就同时经历了由0→1和1→0两个读写状态,就可以测试出变迁故障,写改进后Checkboard算法对存储器的操作次数为5N次,而March算法对存储器的操作次数则需要6N次,大大地节省了测试时间。以一个X(行地址)、Y(列地址)地址复用的128×128的存储器矩阵为例,按改进后的算法编写的测试图形片断如图6。实际的算法图形要配合读写的时序,因此图形更为复杂,但对存储器的操作次数与理论是一致的,改进的Checkerboard算法虽然使用了较少的存储器操作次数,但其只能诊断出部分AF故障,与March算法相比,是以牺牲故障覆盖率为代价来提高测试速度的。在实际的生产型测试中,地址译码模块由于结构较存储矩阵要简单得多,因此出现故障的概率远远小于存储矩阵,且改进的Checkerboard算法也能诊断部分的AF故障,是一种经济的测试算法。6结语文章在理解分析的基础上结合各算法的特点对Checkerboard算法进行了改进及实现,通过研究发现,任何事物都有两面性,每种算法对不同的类型故障的探测能力各有千秋,但不会尽善尽美,改进的算法虽然提高了测试速度,但这种改进牺牲了故障覆盖率。但就实际的测试需要而言,是完全符合要求且行之有效的,在实际应用中,要根据存储器的故障类型和测试需求来选择合适的诊断算法,才能达到满意的效果。