动态存储器模组的高效测试方法

文档序号:6034823阅读:398来源:国知局
专利名称:动态存储器模组的高效测试方法
技术领域
本发明涉及一种存储器故障的检测方法,特别是涉及一种动态存储器模组的高效测试方法。
背景技术
动态存储器模组是由多个DRAM MEMORY IC组成的应用于计算机工业的完整产品,对动态存储器模组的测试主要集中在对MEMORY IC的功能测试和对MEMORY IC之间的互相干扰的测试两方面。
由于目前主流动态存储器模组(SDRAM,DDR)均采用并行数据传输,故数据总线由各MEMORY IC的数据线组合而成。因此,对MEMORY IC的功能测试和对MEMORY IC之间的互相干扰的测试均可通过软件对数据总线的相应位进行读写进行。
如果要对内存储器进行完整测试,需要通过操作系统完全控制内存储器的操作。但DOS实模式下,操作系统和应用程序只能管理1M以下的内存空间;在DOS保护模式下,通过32位寻址确定内存单元,可管理内存空间达到4G,能充分满足内存测试的需要。为了获得1M以上内存的控制权,必须采用DOS保护模式内存编程技术。
现有技术有一种RMT测试软件方案,它是利用DOS保护模式内存编程技术实现简单的读写功能测试。该方案使用3种主要的测试手段检测内存错误从00110000H地址开始,对全局地址均写入05A5AH,然后读出校验,如果读出数据不为05A5AH,则内存读写功能出错;从00110000H地址开始,每隔4个BYTE,将32BIT地址值写入该地址本身,直至全局地址写完,然后从最末地址开始,每隔4个BYTE读出数据,校验是否等于当前地址,如果不相等,则地址译码错误或内存读写功能出错;
推进March测试即先全局地址写1111H,对每个地址读出比较是否为1,若正确则将0写入该地址,遍历全局地址后,再对每个地址读出比较是否为0,若正确则将1写入该地址,最后,对全局地址比较是否全部为1,可检测相邻内存单元之间的干扰。这种方案的缺陷在于测试类型太少,只有05A5AH、地址值、0000H,1111H四种,不能覆盖大多数的故障检测;测试手段单一,均全局地址写完测试类型后再检测数据有效性,不能覆盖内存全部的工作状态。
针对上述的半导体存储器件测试,国际上有公用的标准算法,不同的算法可以分析、检测半导体存储器件不同的工作状态,同时,不同算法的效率也有相当的区别。所以,迫切需要的是创建高效的、全面的测试算法组合而不是增加测试算法。
由于现有技术在故障覆盖率方面、或在测试效率方面、或在平台兼容性方面受到限制,不能单独满足研发、生产等方面的应用。因此,开发一种效率、故障覆盖率、兼容性兼优的软件测试方案已经成为必然。

发明内容
本发明的目的在于提供一种动态存储器模组的高效测试方法,使之兼容主流PC平台,能够全面检测各种动态存储器模组工作状态下可能发生的各种错误,并最大限度提高动态存储器模组的软件测试速度。
本发明是这样实现的一种动态存储器模组的高效测试方法,包括以下步骤完成初始化设置,程序进入保护模式,在保护模式内,内存单元的逻辑地址=物理地址,可以利用32位逻辑地址直接访问Ox00110000以上的地址空间;
进行随机地址RandomAddress的测试;进行读写测试读写测试Write&Read测试,内存存储列SdramBank测试;所进行数据总线反射LineBounce和推进式March测试;进行随机内存块RandomBlock测试;对内存自刷新Refresh、单元地址HouseNumber进行常规测试。
本发明通过改进算法,即重新组合算法可以全面的动态存储器模组检测,可以检测绝大部分DRAM缺陷和错误,具有很高的故障覆盖率;根据内存结构和操作系统优化软件技术,并根据各测试原理和效果优化测试流程,使测试效率提高到现有技术测试软件的3倍。


图1为本发明所述的8项测试的总流程图;图2为本发明所述方法中读写读写测试Write&Read的测试流程图;图3为本发明所述方法中LinkBounce的测试流程图;图4为本发明所述方法中单元地址HouseNumber的测试流程图。
具体实施例方式
以下结合附图和具体的实施例对本发明作进一步的详细说明本发明在完成初始化设置后,程序进入保护模式,在保护模式内,内存单元的逻辑地址=物理地址,可以利用32位逻辑地址直接访问Ox00110000以上的地址空间。接下来,本发明根据测试方案的需求和DOS保护模式内存管理的特点,进行8个测试类型的测试,即随机地址RandomAddress测试;读写Write&Read测试;内存存储列SdramBank测试;随机内存块RandomBlock测试;数据总线反射LineBounce;测试推进式March测试;单元地址HouseNumber测试;内存自刷新Refresh测试。以上8项测试可以同时进行,也可以依序进行。
本发明采取不同的策略对8种类型进行测试,对随机地址RandomAddress,读写测试Write&Read,内存存储列SdramBank 3种测试模式保证其测试质量,使测试软件可以覆盖绝大部分故障;同时提高读写测试Write&Read,内存存储列SdramBank测试效率;改进随机内存块RandomBlock测试,提高效率;改进数据总线反射LineBounce和推进March的算法,实现5-6倍的效率提升;还包括对Refresh、单元地址HouseNumber进行常规测试。
本发明所述方法中,对随机地址RandomAddress的测试主要是保证其测试质量,达到较高的故障覆盖率。随机地址RandomAddress测试方案并非直接对全局内存地址的检测,但通过容量因子确定随机地址RandomAddress数列,仅使用1/3和1/4的测试时间,即可检测绝大多数的错误模式。
测试过程是这样进行的对应不同容量的待测内存,RandomAddress分别给出一个适用的容量因子,真值表如下

容量因子的作用在于指导程序语言对地址的相应位做位(BT)操作,从而改变标志寄存器中的CF,继而通过CF被置位的数量(奇偶性)决定是否对该地址最末位置1。完成地址改造后,地址与容量/4做与操作后再×4,得到合法地址,并对该合法地址写入地址做与操作前的数值。
容量因子的作用在于能够保证地址在这样的循环操作中经过相当长的时间后会回到原来的值,此时即认为已遍历全局地址空间。运行过程中,程序语言会检验地址值,当回到原来的值时完成写操作进入同样流程的读循环。
该测试模式模仿内存实际使用时随机读写的情况,可检验地址译码错误及地址转换中的噪音。该测试模式通过程序语言的巧妙利用在很短的运行时间内达到了很高的错误覆盖率,成为本发明中错误覆盖率与测试效率完美统一的测试模式。
图1为本发明所述的8项测试的总流程图。如图所示,主程序开始后,首先进行初始化,然后进入保护模式。接着就开始8项测试,即随机地址RandomAddress测试;读写Write&Read测试;内存存储列SdramBank测试;随机内存块RandomBlock测试;数据总线反射LineBounce;测试推进式March测试;单元地址HouseNumber测试;内存自刷新Refresh测试。以上8项测试可以同时进行,也可以依序进行。
图2给出了本发明方法中读写测试Write&Read的流程图,对读写测试Write&Read的测试主要是保证其测试质量,达到较高的错误覆盖率,并提高测试效率。具体实施步骤如下首先进行初始化,包括设定起始地址、最大地址及给测试地址赋值;之后便开始读写测试,将测试数据按照一定的规律写入测试地址,本测试例按照“正正反正反正……”的规律写入,其中正、反分别表示测试数据和测试数据求反后的数据,即将测试数据写入测试地址,然后将测试地址加4,继续写入测试数据,再将测试地址加4测试数据求反之后判断测试地址是否小于最大地址,若小于则将求反后的数据写入测试地址,继续循环;若大于则开始进行读出比较过程,首先进行初始化,然后按照与写入相同的规律读出比较,若比较时出错则结束,若比较时一直未出错,当测试地址大于最大地址时结束。
由图2可以看出,与普通的读写测试相比,本发明在读写测试中增加了“测试数据求反”,即测试数据按照“正正反正反正……”的方式写全局地址空间。
同时,本发明用于读写Write&Read测试模式的测试数据多达24项,C71C71 Ch,33333333h,44444444h,0E739CE73h,8C6318C6h,77777777h,88888888h,0bbbbbbbbh,0cccccccch,0ddddddddh,0eeeeeeeeh,0ffffffffh,0f0f0f0fh,00ff00ffh,0000ffffh,92492492h,6db6db6dh,99999999h,0aaaaaaaah,55555555h,1111111h,22222222h,66666666h,0E38E38E3h,这些测试数据可以全面检测不同失效模式下的读写错误。本测试可以全面检测内存储器件的读写功能,并利用不同的测试数据检测各种失效模式。
本发明所述方法中,对内存存储列SdramBank的测试主要是保证其测试质量,达到较高的错误覆盖率,并提高测试效率。内存存储列SdramBank模式采用每2K地址写一次数据的方式,检测数据连续写入不同BANK中和从不同BANK中连续读出数据时内存的工作状态。对内存存储列SdramBank的测试是这样进行的,该模式的测试流程如下1)写入数据设定为0F0F0F0FH或0F0F0F0F0H;2)从00110000H每隔0800H(2K)写一次数据,同时写入数据左移一位;3)将起始地址加4后每隔0800H(2K)写一次数据,同时写入数据左移一位;4)重复第三步200H(512)次;5)到达最大地址后按同样的流程读出比较。
对随机内存块RandomBlock主要是改进测试方法,提高效率。该测试的关键在于随机数列的选择,本发明测试程序从标准随机数列中精选了长度为700的随机数列,每次测试随机内存块RandomBlock模式从阵列中选择512个数字循环写入全局内存空间,写完后检验数据是否正确。虽然该项测试与随机地址RandomAddress模式测试效果基本相同,但由于本发明将测试数据从32K减少到512个,测试效率提高了2倍以上。
其具体实施步骤如下首先进行初始化,包括设定循环次数EDX,此测试例中选循环次数EDX为容量/8000H,还有测试地址首址及数据块首址。之后进入输入测试过程,先设定源数据首址为数据块首址,再将源数据写入测试地址,然后将测试地址和源数据地址都加4,然后判断是否写完2000H次,若不到2000H次则继续将源数据写入测试地址,继续循环;若写完2000H次则将循环次数EDX减一,然后判断EDX是否等于0,若不等于0则返回设定源数据首址,继续循环;若等于0则进入读出比较过程。重新初始化,包括设定循环次数EDX,此测试例中选循环次数EDX为容量/8000H,还有测试地址首址及数据块首址,然后读出测试地址中的数据与源数据比较,比较结果若相等则将测试地址和源数据地址都加4,判断是否已读完2000H次,若不到20000H次则继续读出比较;若写完2000H次则将循环次数EDX减一,然后判断EDX是否等于0,若不等于0则返回设定源数据首址,继续循环;若等于0则循环结束。
图3为本发明所述方法中的LinkBounce测试流程图。对数据总线反射LineBounce主要是改进其算法,实现5-6倍的效率提升。数据总线反射LineBounce测试方案利用单1全0(如00001000H)和单0全1(如11110111H)两种数据的组合检测数据线上的干扰和反射,并且通过输入输出单0全1或单1全0的数据检测相邻信号线之间的干扰,可以很好的检测出多I/O内存储器的缺陷。从理论分析,32位微机系统,这两种数据的全部的组合将达到32×32×2=2048种,即全部检测需循环写1024种不同的模式,但这样的测试需要耗费大量的时间。
本发明在测试中令测试数据1+测试数据2=0FFFFFFFFH,故仅使用了其中64种有代表性的模式。在故障覆盖率和测试效率取得了较好的平衡。
如图4所示,具体实施步骤如下首先进行初始化,包括设定循环次数,此测试例中选为容量/100H,并设定测试数据1为00000001H。然后设定数据2为0FFFFFFFFH-测试数据1,接着给测试地址首址赋值,将数据按“1221122112211221”的规律写入,其中的1、2分别代表数据1和数据2,写入后测试地址加100H,随后循环次数ECX减1并判断循环次数ECX是否为0,若不为0则继续写入数据;若为0则交换测试数据1和测试数据2的值,并判断交换次数是否为2,若不为2则将交换后的数据再输入一遍,这样反向再次写入可以检测很多类型的错误,并且交换两次后数据又恢复了原值,不影响继续进行比较;若交换次数为2则开始读出比较过程,先进行初始化设定测试地址首址,然后比较测试数据和已输入的数据,若比较结果不一致则结束;若比较结果一致则测试地址加100H,随后循环次数ECX减1并判断循环次数ECX是否为0,若不为0则继续读出比较,若为0则交换测试数据1和测试数据2的值,接着判断交换次数是否为2,若不为2则将交换后的数据再比较一遍;若交换次数为2则将测试数据1乘2赋给测试数据1,然后判断测试数据1是否等于10000000H,若不等于则重新设定测试数据2的值再次循环,若等于则结束。
本发明所述方法中对推进式March测试主要是改进其算法,实现5-6倍的效率提升。
本发明通过采用标准的March 6N算法,改进了现有技术测试中推进March测试时间过长的缺点,从理论上可以覆盖地址译码错误、相邻数据扰等错误。在保证故障覆盖率的前提下提高了6倍的测试效率。本发明所述方法中,对March的测试是这样进行的,该模式的测试流程如下1)写0全局地址空间写0;2)读0写1从00110000H地址开始逐位读出比较,并改写该位为1;3)读1写0从00110000H地址开始逐位读出比较,并改写该位为0;4)读0检测全局地址空间是否全部为0。
图4为本发明所述方法中的单元地址HouseNumber测试流程图,对单元地址HouseNumber作常规测试,测试原理是将地址值写入该地址单元再读出比较,以检测地址线干扰,本发明的单元地址HouseNumber测试增加了对地址值求反后写入的检验项目,具有更高的测试覆盖率。
本测试利用地址值写入对应地址空间的方法,可以有效检测内存储器地址译码错误。其具体实施步骤如下首先进行初始化,包括设定起始地址、最大地址及给测试地址赋值。之后开始赋值检测过程,先将测试地址值作为数据写入测试数据,然后将测试地址加4,判断测试地址是否大于最大地址,若小于则继续写入测试数据继续循环;若大于则进入读出比较过程,先进行初始化,然后读出比较,比较结果若不正确则结束;比较结果若正确则测试地址加4,然后判断测试地址是否小于最大地址,若小于则继续读出比较继续循环;若大于进入数据求反比较过程,求反比较时为了提高测试的覆盖率。先进行初始化,然后将测试地址值求反的值作为数据写入测试数据。然后按照与前相同的流程进行数据写入和读出比较。
本发明所述方法中,还包括对Refresh的常规测试,对Refresh的测试是为了检验内存的数据保持能力,即写入数据后,延时2秒,再读取数据进行比较,可以有效检测内存的数据保持能力。对Refresh的测试是这样进行的,该模式的测试流程如下
①全局地址空间写0;②写操作全部完成后,不对内存做任何读写,这种状态保持2秒钟;③将全局地址空间的数据全部读出比较;④全局地址空间写1;⑤重复2,3操作后完成。
最后所应说明的是以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
权利要求
1.一种动态存储器模组的高效测试方法,包括以下步骤完成初始化设置,程序进入保护模式,在保护模式内,内存单元的逻辑地址=物理地址;进行随机地址RandomAddress测试;进行读写Write&Read测试,内存存储列SdramBank测试;进行数据总线反射LineBounce和推进式March测试;进行随机内存块RandomBlock测试;对内存自刷新Refresh、单元地址HouseNumber进行常规测试。
2.根据权利要求1所述的动态存储器模组的高效测试方法,其特征在于上述8种测试可以同时进行,也可以依序进行。
3.根据权利要求1所述的动态存储器模组的高效测试方法,其特征在于所述随机地址RandomAddress测试包括根据不同容量的待测内存,通过真值表,分别给出一个适用的容量因子。
4.根据权利要求3所述的动态存储器模组的高效测试方法,其特征在于所述随机地址RandomAddress测试中,选择容量因子的真值表为
5.根据权利要求1所述的动态存储器模组的高效测试方法,其特征在于所述读写测试包括首先进行初始化;之后便开始读写测试,将测试数据按照一定的规律写入测试地址;然后将测试地址加4,继续写入测试数据;再将测试地址加4并将测试数据求反之后;判断测试地址是否小于最大地址,若小于则将求反后的数据写入测试地址,继续循环;若大于则开始进行读出比较过程,重新初始化,然后按照与写入相同的规律读出比较,若比较时出错则结束;若比较时一直未出错,当测试地址大于最大地址时结束。
6.根据权利要求5所述的动态存储器模组的高效测试方法,其特征在于所述的读写测试的初始化包括,设定起始地址、最大地址及给测试地址赋值。
7.根据权利要求5所述的动态存储器模组的高效测试方法,其特征在于所述的读写模式测试中写入测试地址的数据的一定规律为“正正反正反正……”,其中正、反分别表示测试数据和测试数据求反后的数据。
8.根据权利要求5所述的动态存储器模组的高效测试方法,其特征在于所述的读写模式测试的测试数据包括24项,分别为C71C71Ch,33333333h,44444444h,0E739CE73h,8C6318C6h,77777777h,88888888h,0bbbbbbbbh,0cccccccch,0ddddddddh,0eeeeeeeeh,0ffffffffh,0f0f0f0fh,00ff00ffh,0000ffffh,92492492h,6db6db6dh,99999999h,0aaaaaaaah,55555555h,1111111h,22222222h,66666666h,0E38E38E3h。
9.根据权利要求1或5所述的动态存储器模组的高效测试方法,其特征在于所述内存存储列SdramBank测试包括1)写入数据设定为0F0F0F0FH或0F0F0F0F0H;2)从00110000H每隔0800H(2K)写一次数据,同时写入数据左移一位;3)将起始地址加4后每隔0800H(2K)写一次数据,同时写入数据左移一位;4)重复第三步200H(512)次;5)到达最大地址后按同样的流程读出比较。
10.根据权利要求1或5所述的动态存储器模组的高效测试方法,其特征在于所述进行随机内存块RandomBlock测试包括首先进行初始化;之后进入输入测试过程,先设定源数据首址为数据块首址,再将源数据写入测试地址,然后将测试地址和源数据地址都加4;接着判断是否写完2000H次,若不到2000H次则继续将源数据写入测试地址,继续循环;若写完2000H次则将循环次数EDX减一,然后判断EDX是否等于0,若不等于0则返回设定源数据首址,继续循环;若等于0则进入读出比较过程,重新进行初始化;然后读出测试地址中的数据与源数据比较,比较结果若相等则将测试地址和源数据地址都加4,判断是否已读完2000H次,若不到2000H次则继续读出比较;若写完2000H次则将循环次数EDX减一,然后判断EDX是否等于0,若不等于0则返回设定源数据首址,继续循环;若等于0则循环结束。
11.根据权利要求10所述的动态存储器模组的高效测试方法,其特征在于所述的随机内存块RandomBlock测试的初始化包括,设定循环次数EDX,及测试地址首址及数据块首址;
12.根据权利要求1或5所述的动态存储器模组的高效测试方法,其特征在于所述数据总线反射LineBounce测试包括首先进行初始化;接着给测试地址首址赋值,将数据按一定规律写入测试地址后测试地址加100H;随后循环次数ECX减1并判断循环次数ECX是否为0,若不为0则继续写入数据;若为0则交换测试数据1和测试数据2的值,并判断交换次数是否为2,若不为2则将交换后的数据再输入一遍;若交换次数为2则开始读出比较过程,重新设定起始地址及测试地址,然后比较测试数据和已输入的数据,若比较结果不一致则结束,若比较结果一致则测试地址加100H;然后循环次数ECX减1并判断循环次数ECX是否为0,若不为0则继续读出比较,若为0则交换测试数据1和测试数据2的值;接着判断交换次数是否为2,若不为2则将交换后的数据再比较一遍,若交换次数为2则将测试数据1乘2赋给测试数据1;然后判断测试数据1是否等于10000000H,若不等于则重新设定测试数据2的值再次循环,若等于则结束。
13.根据权利要求12所述的动态存储器模组的高效测试方法,其特征在于所述的数据总线反射LineBounce测试的初始化,包括设定循环次数ECX、数据1、设定数据2为0FFFFFFFFH-测试数据1。
14.根据权利要求12所述的动态存储器模组的高效测试方法,其特征在于所述的数据总线反射LineBounce测试,其中写入数据的一定规律为“1221122112211221”,其中的1、2分别代表数据1和数据2。
15.根据权利要求1或5所述的动态存储器模组的高效测试方法,其特征在于所述推进March的测试包括1)写0,即全局地址空间写0;2)读0写1,即从00110000H地址开始逐位读出比较,并改写该位为1;3)读1写0,即即从00110000H地址开始逐位读出比较,并改写该位为0;4)读0,即检测全局地址空间是否全部为0。
16.根据权利要求1或5所述的动态存储器模组的高效测试方法,其特征在于所述单元地址HouseNumber测试包括首先进行初始化;之后开始赋值检测过程,先将测试地址值作为数据写入测试数据;然后将测试地址加4,判断测试地址是否大于最大地址,若小于则继续写入测试数据继续循环;若大于则进入读出比较过程,比较结果若不正确则结束;比较结果若正确则测试地址加4,然后判断测试地址是否小于最大地址,若小于则继续读出比较继续循环;若大于进入数据求反比较过程,按照与前相同的流程进行数据写入和读出比较。
17.根据权利要求1所述的动态存储器模组的高效测试方法,其特征在于所述Refresh测试包括①全局地址空间写0;②写操作全部完成后,不对内存做任何读写,这种状态保持2秒钟;③将全局地址空间的数据全部读出比较;④全局地址空间写1;⑤重复2,3操作后完成。
18.根据权利要求1所述的动态存储器模组的高效测试方法,其特征在于可以利用32位的逻辑地址直接访问0x00110000以上的地址空间。
全文摘要
本发明公开一种动态存储器模组的高效测试方法,包括完成初始化设置,程序进入保护模式,进行随机地址的测试;进行读写测试,内存存储列测试;进行数据总线反射和推进的测试;进行随机内存块测试;对内存自刷新以及单元地址进行常规测试。本发明可以全面的动态存储器模组检测,可以检测绝大部分动态存储器模组缺陷和错误,具有很高的故障覆盖率;本发明根据内存结构和操作系统优化软件技术,并根据各测试原理和效果优化测试流程,使测试效率提高到现有技术测试软件的3倍。
文档编号G01R31/28GK1485623SQ0212924
公开日2004年3月31日 申请日期2002年9月27日 优先权日2002年9月27日
发明者姜泉, 黄山, 桂丙武, 姜 泉 申请人:记忆科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1