RAM和DDR测试方法的原理与测试案例设计PPT资料.ppt
《RAM和DDR测试方法的原理与测试案例设计PPT资料.ppt》由会员分享,可在线阅读,更多相关《RAM和DDR测试方法的原理与测试案例设计PPT资料.ppt(26页珍藏版)》请在冰豆网上搜索。
(对于这种存储颗粒我们称之为4194304x8模块或者4Mx8,注意这里的“M”不是“MByte”而是“Mbit”)。
RAM模块基础知识,关于Bank的问题前面我们讲述的都是8bit的内存,现在这种东西我们基本上都接触不到了,更常用的是32bit、64bit或者128bit。
由于前面我们已经讲到了4Mx1bit模块实现bit输入输出的方法,所以我们很容易想到我们把足够多的芯片放在一个模块中就可以了。
不过在实际应用中,仅仅这样做还是不行的,这里就需要引入bank的概念,bank是由多个模块组成的。
请看右边的示意图:
RAM模块基础知识,上面的示意图显示的是由4组8bit模块组成的一个bank,如果构成模块的是4194304x1芯片,那么每个模块的架构应该是4194304x8(4MB),这样4个模块就能组成一个位宽为32bit的bank,容量为16MB。
当存储数据的时候,第一模块存储字节1,第二个模块存储字节2,第三个模块存储字节3,第四个模块存储字节4,第五个模块存储字节5如此循环知道达到内存所能达到的最高容量到这里,我们应该能知道,当我们的系统使用这种类型的内存时,可以通过两种方式来增加这种类型内存的容量。
第一种就是通过增加每一个独立模块的容量来增加bank的容量,另外一个方法就是增加bank的数目。
这样如果让这种类型的内存的容量提升到32MB,可以把每个模块的容量从4MB提升到8MB或者增加bank的数目。
RAM测试的标准,对RAM的测试,业界有两大标准。
一、RST(RAMStressTest),它由Ultra-X公司开发,主要用于RAM制造厂商测试。
二、Memtest86,它是一个开源组织GPL公布的。
我们可以去它的网站(http:
/www.memtest.org/)了解详细信息。
其它的RAM测试程式或多或少的都带有这两者的印记。
RAM测试的标准,我们的RAM测试程式也是基于memtest86的标准开发的,所以下面我们着重介绍memtest86的标准。
Memtest86的思想,关于RAM测试的程式有很多,但大部分程式只是向RAM写入一个pattern再读出来检查而已,而没有考虑RAM的结构以及如何将错误侦测出来。
这些程式很难发现RAM的间歇性错误(intermittenterrors)。
基于RAM测试的BIOS功能,如果用来发现间歇性错误也是无效的。
Memtest86的思想,RAM由大量的排列整齐的memorycell组成,这些基本的cell对应着数据的bit位。
绝大多数的间歇性错误(intermittentfailures)都是由memorycell之间的的交互作用(interaction)引起的,温度高的时候尤其明显。
所以,当向cell写入一个值时,邻近的cell经常被写成相同的值。
Memtest86的思想,一个有效的RAM测试应该试着去测试这个条件。
所以一个理想的RAM测试策略应该试着去下面的事情。
writeacellwithazerowritealloftheadjacentcellswithaone,oneormoretimescheckthatthefirstcellstillhasazero,Memtest86的算法,为了达到上面讲的理想的RAM测试策略,Memtest86设计了两套算法。
MovinginversionsModulo-X,Memtest86的算法-Movinginversions,1)Fillmemorywithapattern2)Startingatthelowestaddress2acheckthatthepatternhasnotchanged2bwritethepatternscomplement2cincrementtheaddressrepeat2a-2c3)Startingatthehighestaddress3acheckthatthepatternhasnotchanged3bwritethepatternscomplement3cdecrementtheaddressrepeat3a-3c,Memtest86的算法-Movinginversions,这个算法已经很接近理想测试策略了,但它有一些局限性。
今天大部分的存储chip可以存储4-16bit的数据,这些chip不能一次只读或写一个bit的数据,我们就不能保证所有邻近cell都测试到了interaction,我们只能设计特殊的pattern来邻近的cell。
Memtest86的算法-Movinginversions,还有caching,buffering,以及指令的非顺序执行也会降低Movinginversions算法的有效性。
我们可以关闭cache,但高性能chip的buffer却没办法关闭。
于是就有了下面的算法Modulo-X。
Memtest86的算法-Modulo-X,1)Forstartingoffsetsof0-20do1awriteevery20thlocationwithapattern1bwriteallotherlocationswiththepatternscomplementrepeat1boneormoretimes1ccheckevery20thlocationforthepattern,Memtest86的算法-Modulo-X,这个算法和Movinginversions的邻近测试的水准很接近,但它不受cache和buffer的影响。
1a和1b分开,1c完成时,我们可以确保所有cache和buffer被清空。
选择20作为跳跃的点,是因为它是速度和完整性之间的一个折中点。
测试项目的描述,1.Addresstest,walkingones2.Movinginversions,ones&
zeros3.Addresstest,ownaddress4.Movinginversions,8bitpattern5.Movinginversions,32bitpattern6.Blockmove,64moves7.Modulo20,ones&
zeros8.Movinginversions,0&
1,uncached,测试项目的描述,1.Addresstest,walkingones用填“1”的方式快速测试每一个bank中测试所有地址位,只用于报告错误地址。
2.Movinginversions,ones&
zerosMovinginversions算法的直接展示,分别全部填入“0”和“1”测试两次。
这时cache是打开的,用于快速检查一些严重的错误。
测试项目的描述,3.Addresstest,ownaddress向所有的地址位写入它自己的值,再读出来检查,用于检查第一项不能检查的寻址错误。
4.Movinginversions,8bitpattern是对第二项测试的补充,填入8bit宽的pattern(80h和7Fh),用于检查一些狡猾的宽度引起的错误。
测试项目的描述,5.Movinginversions,32bitpattern对Movinginversions算法作了变更,写入每个连续的地址位中的pattern都会左移1位,每32位高低位作转换,同时每个循环pattern自己也在变化,这样就能很有效的检查每个cell的错误,当然这个测试耗的时间也很长。
6.Blockmove,64moves有点像RST,先用每8Byte倒置的pattern对RAM作初始化。
然后以8MB为单位,将最下面的64bit(8B)移到最上面,剩余的8MB-8B数据整体向下移动64bit。
检查两通道的RAM错误有奇效。
这个项目完成后,RAM的温度会升得很高。
测试项目的描述,7.Modulo20,ones&
zeros就是用Modulo-X算法来检查Movinginversions没办法发现的错误,分别填入“00000000h”和“FFFFFFFFh”,检查两次。
8.Movinginversions,0&
1,uncached与第二项测试相同,只是将cache关了,但可以发现的错误大大增加了。
测试程式的使用及注意点,DOS环境下键入memtest/?
得到帮助信息:
MemTestV2.10(C)2006ArimaComputerCorp,Ltd.Author:
WarriorZhuUsage:
MEMTEST/I=/L=/T=/F=1.Addresstest,walkingones2.Movinginversions,ones&
1,uncachedTestthememoryabove1M,theupperboundis4G.Return1ifanyerrorfound./I=assigntestitem(1,2,3,4,5,6,7,8)/L=assignloopsbetween1.65535/T=forceprocesstoexitafterelapsed/F=assignedlogfilename,测试程式的使用及注意点,参数的注意点/I=参数次序颠倒的话,仍然是从低向高执行;
参数重复,只算一次。
/T=运行时间超过这个时间点就强行退出;
运行时间不到这个时间点的话,这个参数就无效。
其他的参数,我想大家都能看明白。
测试程式的使用及注意点,运行时的注意点不要加载任何内存管理类的程式,否则无法正确测试。
不要运行时间和键盘类的TSR程式,因为此程式已将时钟和键盘中断替换了。
有个小秘密,程序运行时,可以按键退出。