打印

教大家如何测试DSP主流存储器

[复制链接]
750|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
拿起书本|  楼主 | 2014-11-10 14:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
介绍几种存储器测试算法,并讨论这几种算法的用途。
       数据测试
       下面是数据测试的伪代码
for(memory range under test)
fill the memory with a value;
for(memory range under test)
read back the memory and compare the
readback value to the written value
通常,这个测试会被执行几次,每次填充的值不一样。常用的填充值包括
0x55555555,
0xAAAAAAAA, 0x33333333, 0xCCCCCCCC,
0x0F0F0F0F , 0xF0F0F0F0, 0x00FF00FF ,
0xFF00FF00FF00, 0xFFFFFFFF , 0。
  这个测试可以用来检测数据比特粘连(bit -stuck)问题,例如,如果,
written value = 0, readback value = 0x8,
   表示bit 3 粘连到1.
       如果
written value = 0xFFFFFFFF , readback value= 0xFFFFFFFE,
   表示bit 0 粘连到0.
       如果能正确的写入并读出0x55555555(或0xAAAAAAAA),说明相邻的两个比特没有粘连;如果能正确写入并读出0x33333333(或xCCCCCCCC),说明相邻的4 个比特没有粘连;如果能正确写入并读出0x0F0F0F0F(或0xF0F0F0F0),说明相邻的8 个比特没有粘连…
       这个算法既可以用来测试数据总线连接,也可以用于测试存储器单元。当用于测试存储器单元时则每一个存储单元都需要写读所有的值,这将是比较耗时的测试;而用于测试数据总线连接时,只需要把所有的值都写读一遍就可以了(地址不限)。

相关帖子

沙发
拿起书本|  楼主 | 2014-11-10 14:54 | 只看该作者
地址测试
       地址测试的伪代码如下:
for(memory range under test)
fill each memory unit with its addressvalue;
for(memory range under test)
read back the memory and compare thereadback value to the written value
    这个测试可以用来检测地址比特粘连(bit -stuck)问题。例如,如果
written value = 0 at address 0
written value = 1 at address 1
written value = 2 at address 2
written value = 3 at address 3
……
readback value = 2 at address 0
readback value = 3 at address 1
readback value = 2 at address 2
readback value = 3 at address 3
……

    则说明地址线的比特1 粘连,因为地址0,2 中的数据相同,地址1,3 中的数据相同。
       这个测试的主要目的是测试地址线和存储器中的地址译码单元,但它实际上对所有存储单元都做了数据写读,所以在一定程度上也测试了数据总线和存储单元。如果由于测试时间的限制,只允许对整个存储器空间进行一遍写读测试时,本节介绍的地址测试是首选。
       走比特测试
       走比特测试包括走“1”和走“0”测试。走比特测试即可测试数据,也可以测试地址。
       走“1”指测试的数据或地址中只有一个比特为“1”,而所有其它比特为“0”,而且连续的访问中每一次“1”的位置都会移动一个比特,看起来好像是“1”在总线上走。而走“0”测试只是把测试的数据反了一下,看起来就像是一个“0”在总线上走。

使用特权

评论回复
板凳
拿起书本|  楼主 | 2014-11-10 14:55 | 只看该作者
  数据走比特
       数据走比特测试的伪代码如下:
bit_mask_value = 1;
for(number of valid data bits)
{
write bit_mask_value to memory;
readback the data and compared to writtenvalue;
inversed_bit_mask_value = bit inverse ofbit_mask_value;
write inversed_bit_mask_value to memory;
readback the data and compared to writtenvalue;
bit_mask_value = bit_mask_value<<1;//bit walking
}
   这个测试可以检测数据比特粘连(bit -stuck)问题,更重要的是,它还可以检测比特间串扰。如果比特之间存在串扰,而这个测试让一个比特与所有其它比特都是相反的,那么其它比特对它的干扰会被最大化,从而让问题暴露出来。
       例如,如果

written value = 0x00000010, readback value= 0
written value = 0xFFFFFFEF , readback value= 0xFFFFFFFF
   这往往说明比特4 被其它比特干扰。
       这个算法既可以用来测试数据总线连接,也可以用于测试存储器单元。当用于测试存储器单元时则每一个存储单元都需要走“1”走“0”,这将是最耗时的测试;而用于测试数据总线连接时,只需要走一遍“1”,再走一遍“0”?就可以了(地址不限)。

使用特权

评论回复
地板
拿起书本|  楼主 | 2014-11-10 14:55 | 只看该作者
  地址线走比特
       地址走比特用于测试地址总线的连接。地址线走比特测试的伪代码如下:
Write 0 to first address;
Write 0xFFFFFFFF to last address;
bit_mask_value = 1;
for(number of valid address bits)
{
write bit_mask_value to address ofbit_mask_value;
readback the data at first address andcompare to 0;
inversed_bit_mask_value = bit inverse ofbit_mask_value;
write inversed_bit_mask_value to address ofinversed_bit_mask_value;
readback the data at last address andcompare to 0xFFFFFFFF;
bit_mask_value = bit_mask_value<<1;//bit walking
}

和数据走比特类似,这个测试既可以检测地址比特粘连(bit -stuck)问题,还可以检测地址比特间串扰。
       例如,如果
written value = 16 at address 16
readback value = 16 at address 0
written value = 0xFFFFFFEF at address0xFFFFFFEF
readback value = 0xFFFFFFEF at address0xFFFFFFFF

   测试中,想要写往地址16 的数据实际被写到地址0;而想要写往地址0xFFFFFFEF 的数据实际被写到最后一个地址单元。这往往说明地址比特4 被其它比特干扰。

使用特权

评论回复
5
拿起书本|  楼主 | 2014-11-10 14:56 | 只看该作者
  浮动总线问题
       如果测试软件写入并很快从相同地址读出一个值的时候,如果数据线上存在电容特性,写操作会给数据线上的电容充电,总线会短暂的保持它的状态。当测试软件读操作时,总线会返回刚写入的值,即使实际上该数据并没有正确地被写入存储单元。这就是浮动总线(floating buses)问题。
       浮动总线可能会“欺骗”简单的测试程序,为了规避浮动总线问题,需要在紧邻的对相同地址的写和读操作之间对其它地址写入一个和原来写的数据相反的数据。例如,
write A to address X;
write inversion of A to address Y;
read value from address X;
这样,浮动总线的问题就可以规避了。

使用特权

评论回复
6
拿起书本|  楼主 | 2014-11-10 14:56 | 只看该作者
   测试结果的深入分析
       从存储器测试结果的初步分析中,如果我们发现比特粘连或干扰,还需要进一步深入分析原因。通常原因可能来自于三方面:
       1.对于外接存储器,PCB 出问题的可能性比较大。最常见的包括焊接问题或设计问题。例如,某个比特被短接到电源或地。通常我们可以用万用表测量信号线之间或信号线和电源或地之间的阻抗来定位这种问题。串扰问题的定位则比较复杂,可能需要用示波器来测试所有相关的信号来确定串扰源。
       2.存储单元失效。如果是外接存储器,我们可以用示波器或逻辑分析仪在总线上监测写入和读出的数据,如果总线上监测到的写数据是对的,而读出的数据是错的,则往往是存储单元失效。
       3.存储控制器失效。如果我们排除了以上问题而怀疑存储控制器时,可以把好的板子和坏的板子上的控制器互换,如果问题跟着控制器走,则往往说明是控制器失效。

使用特权

评论回复
7
elecintop| | 2014-11-30 13:31 | 只看该作者
谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4195

帖子

31

粉丝