0 引言
随着超大规模集成电路的制造工艺的进步,在单一芯片上动态随机存储器实现了更高密度的比特位,使得计算机系统在计算速度迅猛发展的同时,内存容量极大的扩大。伴随着集成度的提高,存储器单元呈现失效的可能性随之增大,失效的形式和原因也趋于更加复杂化。存储器测试的目的是确保其每个单元能够存储数据并且惟一的寻址、读、写。存储器的测试面临两方面的要求:较高失效类型覆盖率,尽可能检测出潜在的存储器故障;较少的存储器操作,以便缩短检测时间。因此存储器测试应能够在一定的测试时间内得到可能的最佳故障覆盖率。由于对存储器进行物理检测是不可能的,可行的办法是将待测存储器的访存结果与认定无故障的存储器的访存结果做比较。
1 DRAM的原理及失效模型
动态内存的结构和ROM及SRAM有较大的不同。图1是动态内存的总体结构。内存单元按照行、列组成阵列。地址首先分为行地址和列地址,行地址经过译码器,选中一行内存单元。列地址选择数据输出到数据输出端。
图2是内存单元的结构图。动态内存使用一个晶体管和一个电容来存储一位数据。由于电容量很小,数据读出消耗电容上存储的电荷,读取以后需要重新对电容充电。并且由于电容自身的漏电,动态内存需要定期刷新。
图3是读写控制电路示意图。图中显示了读取1位数据的过程。假设这个单元存储的数据为“1”初始状态(图3(a)),电容电压为V,数据线D和电压均为0.5 V,T1,T2,T3均截止。首先,T3导通,电容上的电荷使数据线D上电压为0.5 V+a。放大器对信号放大,使得数据线D上电压为V,上电压为0,读出数据“1”(图3(b)),同时对电容充电,电容电压为V(图3(c))。然后T3截止,T1,T2导通,数据线D,上电压恢复为0.5V。电路恢复初始状态(图3(d))。
假设存储器实效仅仅被单元状态的跳变所激活,即不考虑不改变状态的写操作时出现的失效。存储器的失效模型可以表述为如下:
(1)粘滞实效(Stuck-at Faults,SF)。一个或多个存储器单元固定为s,s∈(0,1),不因对该单元的读写而发生状态的变化。
(2)组合实效(Coupling Faults,CF)。存储器某些位的跳变导致其他位的逻辑值发生非预期的变化。组合失效的产生归咎于单元物理上毗邻所产生的分布电容或者是单元间的电流泄漏。2个存储单元之间的组合失效称双组合实效。例如:对于单元j的一个0→1或是1→0的写操作将会改变i单元的内容,使之状态翻转。但是反之i单元的状态改变并不一定也会对j产生影响。
(3)地址译码故障(Address Decoder Faults,AF)。有4种情况:某地址不能访问任何单元;某单元无法被任何地址访问;某地址可以同时访问多个单元;某单元可被多个地址访问到。
2 测试用数据
由前节讨论可知,动态内存除了内存单元,还有地址译码器,选择器,控制器,放大器等部件。为此针对不同的部件,设计了不同的数据和读写方式来进行测试。
2.1 普通数据
普通数据就是全“0”或者全“1”。写入全“0”或者全“1”的数据,然后读取校验,来验证内存单元是否正常工作。
2.2 棋盘数据
图4表示了棋盘数据。在内存单阵列中写入如国际象棋棋盘一样的数据。由于与每一位数据相邻的数据都不一样,棋盘数据可以用来检测内存单元间的泄漏。
2.3 行带状数据
图5表示了行带状数据。采用行带状数据可以检测Word线之间的泄漏。
2.4 列带状数据
图6表示了列带状数据,用来检测Bit线(数据线)之间的泄漏。
2.5 移位数据
读取内存数据时,Word线选中一行内存单元,数据还要通过选择器,经过列地址选择,到达数据线。使用移位数据,使得每次只有一个数据引脚为1,其余都为0,检测相互是否有影响。
2.6 Waltz数据
前面介绍了使用行带状数据检测Word线之间的泄漏,为了检测相隔行的微弱的影响,可以使用Waltz数据。如图7所示。
3 测试用读写方式
为了检测内存潜在的问题,除了设计一些测试用的数据,还设计了一些读写方式,和数据相结合来检测。
3.1 MSCAN
MSAN读写方式是按地址递增顺序,首先写入0,然后仍然按照此顺序读出校验。MSCAN用来检测内存单元。
3.2 MARCH
MARCH读写方式的检测对象是地址译码器。如果地址译码器有问题,就会产生多重选择的问题,即同一个地址对应多个内存单元,或者多个地址对应同一个内存单元。可以采用如下的读写方式来检测这种问题。如图8,首先顺序写入“0”,然后顺序校验,校验一个数据后立即将数据改为“1”,然后逆序校验,校验后立即将数据改为“0”。
3.3 MASEST
MASEST读写方式的检测对象也是地址译码器。不过侧重于地址译码器的翻转噪声。按照图8中的顺序写入行带状数据,此顺序的目的是让地址译码器译码每次输出都尽可能多的翻转。然后在按此顺序校验,校验同时把数据翻转。最后顺序读取数据校验。
3.4 CMD
CMD读写方式检测内存单元间的相互干涉。如图9,首先写入棋盘数据。然后按照如图9顺序校验。
3.5 ROW/COL组合
ROW/COL组合测试的对象是内存控制电路。内存单元阵列分为行和列,某一个行地址有效时,对某一个单元进行读/写组合的操作,由于内存单元需要定时刷新,这种操作可能对刷新造成影响。ROW/COL组合读取方式固定某一行,对一个单元进行读/写组合操作,验证刷新的影响。然后对同一行的下一列进行相同的操作。
4 测试系统
上面讨论了用于测试内存的数据和读取方式。在实际组成的系统中,针对特定的测试对象,两者总是结合使用的。下面的表1列出了本测试系统测试的项目和相对应使用的数据和读取方式。
前节讨论的数据和读取方式的时候,都是基于动态内存的实际结构,从内存单元矩阵行地址,列地址来分析的。实际应用过程中,内存控制器总是把内存单元矩阵映射成线性连续空间的。不同的芯片组会给出不同的映射方法。图10是Intel BX 440芯片组的内存行列地址映射(128 MB)。本测试系统测试的时候需要了解硬件的结构,才能有效的找出内存潜在的缺陷。
测试系统基于嵌入式Linux操作系统,采用命令行方式运行,所有的输入采用配置文件来设定。下面给出了一个配置文件的例子:
在正常和DRAM系统有故障的嵌入式系统下面分别得到了如图11的检测结果,从实验中可以发现有故障的系统在测试过程中某些测试项目无法通过,根据具体的情况就可以大致判断出故障的原因,这样就给系统设计者指明了改善系统性能的方向。
5 结语
本文研究从动态内存的失效模型出发,针对不同的部件可能发生的问题,设计了检测用的数据和读取方式,将它们组合起来进行测试,可以更有效地检测动态内存中潜在的缺陷,具有高的失效类型的覆盖率。同时,动态内存测试作为嵌入式Linux测试系统的一个子系统得到了国际计算机系统制造商富士通公司的认可。