gpt4 book ai didi

algorithm - March内存测试算法的实现

转载 作者:行者123 更新时间:2023-11-28 19:48:31 26 4
gpt4 key购买 nike

我正在寻找一种存储器测试算法,可以帮助我的团队在生产过程中验证设计和测试(不良焊接,地址/数据线交叉连接,阻抗不匹配,镜像等)。

我读过例如3月C或类似的答案是我们祈祷的答案,但是我还没有找到一种我们可以借用的算法的实现。

最佳答案

我已经对板进行了20多年的测试,并且今晚是第一次听到3月的测试或算法。看着它,让我感到困扰的是,看到一个应用于常识的名称,好像那个人或团体发明了常识一样。

无论如何,请考虑一下您说要测试的内容。理想情况下,板级测试是测试焊料和线路板,制造项目,不进行设计验证以及不进行芯片验证。该芯片应该已经由供应商测试过,理想情况下,您只需要执行快速功能即可。对于存储器而言,尽管无论如何还是要测试每个位单元是很普遍的,只要时间允许,就可以抽空,进入千兆字节的dram,如果尝试测试每个位,则每板需要花费数小时至数天的时间。

因此,您希望理想地摆动每个引脚,基本的功能测试,例如用0xFFF ...填充所有地址,用0填充,用0x5s填充用0xAs填充。 0x6s和0x9s以及0xCs和0x3s(如果您这样倾斜)。棋盘格,再用那些交替的模式,每个其他地址都填充0x5,每个其他地址都填充0xA,依此类推。然后,对相隔的步数和步零进行串扰。 0x00..001、0x00 ... 002、0x00 ... 004等,然后是0xff..ffe,0xff..ffd等。

很好,但是假设您有工作地址位。如果说所有地址线都断了,那么上面的大多数测试都将通过。如果只有最低有效地址位起作用,则以上所有测试都会通过,并且取决于内存的大小以及您如何进行测试,这可能会浪费数小时。

您需要知道的另一件事是数据总线的大小。如果这是32位处理器,但使用16位数据总线,而您正在执行32位步行测试,则您花费了太多时间,只需要步行16位而不是32位。或者在64位数据总线上32位处理器(例如,平均32位台式机具有72位内存)没有涵盖所有友好的位组合。如果您所做的只是内存总线宽度的一半或四分之一,那么宽内存接口(interface)可能不会占用所有数据线。

常见的快速地址测试是使用其地址填充内存。实际上,您必须在每个地址位置中放置一个唯一的模式。

以上内容涵盖了大多数明显的,不良的焊锡,提起的销钉,浮球的问题。 (许多人显然只是将这些标签标记为3月的测试)。如果内存引脚支持不同大小的内存,您可能并没有击中所有地址位,但实际上您无能为力,这并不重要,因为放置最大大小的内存可能涉及焊料,这意味着无论如何都要对板进行重新测试。

上面有很多测试,如果您在整个内存空间的每个位置上编写并运行每个测试,则可能需要一段时间。假设目标不是制造测试而不是芯片测试,一种简单的减少方法是使用质数跳过地址。而不是每个内存位置都使用257个内存位置,例如,让您的测试更快地完成。除2以外的质数通常会摆动每个地址位。对于步行式测试,您实际上只需要测试一个内存位置而不是整个内存,就可以加快速度。棋盘格,两个位置(检查数据总线上状态变化的目标)。

这些低速测试虽然不能覆盖阻抗,但这是一个棘手的问题。如果可能的话,需要调高和调低内存总线速度的旋钮,并创建非常低的水平,理想的手工组装测试,以最大速度插入内存总线,只要您能站立,每个时钟周期的读或写操作都应持续进行它。如果您的处理器或处理器中的外围设备(dma等)无法维持这些速率,那么无论芯片中最快的东西是什么……您可以走的最快,并且您需要使该东西执行最长的运行时间。它可以做的最快的爆发。那不一定会覆盖阻抗,如果不在每个电路板的每条走线上放一个示波器,就可能无法完全测试阻抗。快速发展可能会发现更多明显的阻抗问题以及大容量电容之类的问题。全为零的棋盘格也可能有助于接地反弹和体电容。

另请注意,变慢非常重要。高速和高容量测试不能掩盖板上的噪声,可能会损坏板子或设计,并很容易通过所有内存测试。您可能希望进行一些故意降低速度的测试,例如,允许写入选通信号出现毛刺,如果对附近的迹线(而不是内存迹线)执行测试,则可能会更好。填充内存,稍等片刻,将其读回,看看是否有写的内容被窃听。您提到了sram,对于dram,缓慢的测试对于确保刷新有效很重要,也许填充独特的模式,稍等片刻,读回,用独特图案的反面填充以翻转每一位,稍等片刻,然后回读。

我大部分时候放弃了上面的大多数测试,并且从伪随机测试中获得了很多 yield 。使用创建比我要测试的存储位置数更多的唯一数字的LFSR,例如,此16位1应当产生2的幂乘以16减去两个唯一数,然后重复。负二是因为lfsr不会对数字进行运算或生成全1或全0的数字,因此在播种时请记住这一点。

unsigned int fastprand16(unsigned int prand)
{
//16位lfsr位16,14,13,11
如果(prand&1)
{
品牌>> = 1;
prand ^ = 0x0000B400;
}
别的
{
品牌>> = 1;
}
return(prand&0x0000FFFF);
}

Wikipedia具有lfsr位单元抽头表的链接,这些表可在重复各种移位器长度之前产生最大数量的模式。上面的一个有效,但您想要翻转更多的数据位而不仅仅是移位它们有点无聊。

与使用库中的随机数相比,使用自己的随机数更好。库从计算机到计算机,从操作系统到操作系统,从编译器到编译器,以及同一系统上os或编译器的版本变化。您可以使用自己的方法来确保测试不会随时间改变其属性,即使驱动该测试的主机系统会改变它的属性。这就是为什么像lfsr这样的东西很好的原因,它可能不是一个很棒的随机数生成器,用于与计算机打牌游戏,但是对于在数据总线上创建少量具有快速执行代码的可重复的困惑外观数据模式,它是伟大的。没有自制的随机化器,我将避免基于随机化器的测试。

例如,如果您需要执行快速BIST,则可以用回读的品号填充内存,用相同的品号的倒数填充,然后回读。或先执行总体测试,以清除明显损坏的电路板,然后执行三月测试,但地址测试除外。或者相反,您可以执行很多次数千次prand pass,每次都更改种子。了解lfsr模式的属性后,您可以选择使用模式中的下一个随机数作为下一次传递内存的种子。或者,理想情况下,您可以使用第二个lfsr来产生种子,随着时间的推移创建所有可能的种子。

缓存和缓存测试是一场噩梦。在芯片上应该遵循的规则是,这既不是芯片验证测试,也不是设计验证测试,这是制造测试。如果您拥有数据高速缓存并在另一侧测试ram,则您可能在自欺欺人,可能需要在读取通过之前执行写入通过次数。理想情况下,您希望启用缓存,以便您的测试能够快速运行,但要禁用被测内存区域的缓存。这使我想起了一个常见的错误,即仅在执行测试的软件未使用的内存上执行所有这些测试(假设此板具有处理器,并且内存是处理器执行内存),尤其是要运行该软件从零或低内存开始,这意味着大多数程序花费大部分时间运行的内存区域未经过测试,并且程序空间和堆栈之间的中间块(测试使用频率较低)是测试最多的,并且不测试所有地址位,因为您可能会猛烈地进入堆栈。您几乎不浪费时间去为这样的系统进行任何内存测试吗?如果您不信任该内存以进行测试,那么您将无法信任该内存中运行的测试程序的结果。理想情况下,您要从ROM或片上暂存存储器执行,以便可以完全测试整个存储器总线。

ECC内存是另一个噩梦,精心设计的ecc内存和内存 Controller 将使您能够处理包括ecc标记在内的所有位,从而使您能够测试所有内容以及ecc系统本身,单位和多位错误。如果您没有访问权限,那么即使是进行肯定的测试,如果您想尝试测试芯片内的每个位,那么对于每一行,您都需要确保存储器测试套件至少打开和关闭所有ecc位对标签中的每个位进行一次测试,然后在所有其他位在一个时间点关闭时对其进行测试,然后在其他每个位(不必同时)处于打开状态时对其进行测试。具有分支预测功能的现代处理器完全有权随意读取任何内存位置,因此您的测试可能会意外地读取带有故意植入的单个位错误的内存位置,从而导致该位被修复,并且在测试获得时碰到那个位置,您可能会失败,因为您没有看到预期的单位错误,而实际上系统运行正常。奇偶校验与ecc类似,但还不错。

关于电路板测试的另一件事是,如果要说您要测试每个芯片中的每个位以及所有PCB迹线,焊点和电缆。查看外围设备或查看处理器本身的指令集(如果您有一个板上的指令)并花很长时间,就会发现即使以2 GHz的速度运行,您甚至可能要花几百亿年的时间才能达到极限。第一个芯片的外部引脚(从内到外)。您不能也不会进行所有测试,只能摘下低落的果实,等待用户(希望是内部软件/bsp开发人员)发现无法预料的问题,然后针对这些特定问题创建新的测试。您可能进行了完美的行军内存测试,但仍然找不到间歇性的内存问题。即使烧伤了,我也看到零件在几个月后失效。远远超出了电路板/部件的预期婴儿死亡率。

底线是,没有一种适合所有解决方案的尺寸,您必须利用特定板卡/芯片的功能调整常见,流行或个人喜爱的做法,并能够即时调试和创建新测试。您还需要积极主动地迫使设计工程师进行测试设计。如果有产品召回,则是您的头(测试工程师)会在他们的脑海中滚动。

对不起,很长的帖子,我希望它对某人有用。

关于algorithm - March内存测试算法的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3729544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com