Я тестирую доски уже более 20 лет, и сегодня вечером впервые слышу об этом мартовском тесте или алгоритме. И, глядя на это, меня беспокоит то, что имя применяется к здравому смыслу, как если бы этот человек или группа изобрели здравый смысл.
В любом случае, подумайте о вещах, которые, как вы сказали, вы хотели проверить. В идеале тест на уровне платы - это тестирование припоя и печатной платы, изготовление изделий, НЕ проверка проекта и НЕ проверка чипа. Чип должен был быть протестирован производителем, и в идеале вам нужно всего лишь сделать быстрый функционал. В случае с памятью, тем не менее, обычно все-таки тестируют каждую битовую ячейку, если позволяет время, если у вас, вероятно, есть время, вы получаете гигабайты драмов, и вы просматриваете часы на дни на доске, если пытаетесь протестировать каждый бит.
Таким образом, вы хотите в идеале покачивать каждый вывод, базовые функциональные тесты, такие как заполнение всех адресов всеми 0xFFF ..., заполнение нулями, заполнение 0x5s заполнение 0xAs. 0x6s и 0x9s и 0xCs и 0x3s, если вы так склонны. шахматная доска, опять же с этими чередующимися образцами, заполните каждый второй адрес 0x5s, а каждый другой - 0xAs и т. д. Затем для перекрестных помех пешеходные и гуляющие нули. 0x00..001, 0x00 ... 002, 0x00 ... 004 и т. Д., Затем 0xff..ffe, 0xff..ffd и т. Д.
Это все хорошо, но предполагает, что у вас есть биты рабочего адреса. Если, скажем, все адресные строки были разбиты, большинство из вышеперечисленных тестов пройдут. Если бы работал только младший значащий бит адреса, то все вышеперечисленные тесты прошли бы, и в зависимости от размера памяти и того, как вы выполняете тесты, которые могут быть потрачены впустую часами.
Еще одна вещь, которую вам нужно знать, это размер вашей шины данных. Если это 32-битный процессор, но использует 16-битную шину данных, и вы выполняете 32-битный тест "ходячих", вы потратили вдвое больше времени, вам нужно только пройти 16 бит, а не 32. Или 64-битную шину данных на 32-битный процессор (например, средний 32-битный рабочий стол с 72-битной памятью) вы не рассмотрели все дружественные битовые комбинации. Широкие интерфейсы памяти могут не использовать все строки данных, если все, что вы делаете, это половина или четверть ширины шины памяти.
Обычная быстрая проверка адреса - заполнение памяти ее адресом. По сути, вы должны поместить уникальный шаблон в каждое адресное местоположение.
Вышеуказанное охватывает большинство проблем, связанных с вопиющим, плохим припоем, поднятым штифтом, плавающим шаром (многие просто пометят эти мартовские тесты, очевидно). Если распиновка памяти поддерживает память разного размера, вы, возможно, не указали все биты адреса, но в действительности вы ничего не можете с этим поделать, и это может не иметь значения, поскольку установка памяти максимального размера может включать в себя припой, а это означает, что плата все равно повторно проверяется.
Существует много тестов, описанных выше, и если вы напишите и запустите каждый из них в каждом месте в полном пространстве памяти, это может занять некоторое время. Один из простых способов уменьшить его, если предположить, что целью является производственный тест, а не тестирование чипа, состоит в пропуске адресов с использованием простых чисел. Например, вместо каждой ячейки памяти используйте каждые 257 ячеек памяти, и ваши тесты будут выполняться намного быстрее. Простые числа, отличные от 2, часто покачивают каждый бит адреса. Для ходовых тестов вам действительно нужно протестировать только одну ячейку памяти, а не всю память, которая может ускорить ее. Шахматная доска, два места (цель - проверить изменения состояния на шине данных).
Эти тесты на низких скоростях не охватывают полное сопротивление, хотя это сложное испытание. Нужно повернуть вверх и вниз ручку на скорости шины памяти, если это возможно, и создать очень низкий уровень, идеально собранные вручную тесты, которые проталкивают шину памяти на максимальной скорости, чтение или запись каждый тактовый цикл, поддерживаемый до тех пор, пока вы можете стоять Это. Если ваш процессор или периферийные устройства в вашем процессоре (dma и т. Д.) Не могут поддерживать эти скорости, то чем бы ни была самая быстрая вещь в чипе ... ну, тем быстрее, чем вы можете идти, и вам нужно, чтобы эта вещь выполнялась при самых длинных прогонах самые быстрые всплески это может сделать. Это не обязательно покрывает импеданс, вы, вероятно, не сможете полностью протестировать импеданс, не устанавливая область действия для каждой трассы каждой платы. При быстром движении могут возникнуть некоторые проблемы с импедансом, а также большая емкость и тому подобное. Шахматная доска со всеми единицами во все нули может также помочь с отскоком земли и большой емкостью.
Также обратите внимание, что медленное движение очень важно. Высокоскоростные тесты и тесты с большим объемом не покрывают помехи на плате, могут иметь плохую плату или дизайн и легко проходят все тесты памяти. Возможно, вы захотите, чтобы некоторые тесты были намеренно медленными, например, позволяя записывать стробоскопы с ошибками, даже лучше, если вы выполняете тесты на соседних трассах, но не на трассах памяти. Заполните память, подождите немного, прочитайте ее обратно, посмотрите, не запутались ли некоторые записи. Вы упомянули sram, для dram важен медленный тест, чтобы убедиться, что обновления работают, возможно, заполнить уникальными шаблонами, подождать некоторое время, прочитать обратно, заполните инверсией уникальные паттерны, чтобы перевернуть каждый бит, подождите немного, прочитайте обратно.
Я по большей части отказался от большинства вышеперечисленных тестов и получил много пробега от псевдослучайного тестирования. Используя LFSR, который создает больше уникальных чисел, чем количество ячеек памяти, которые я хочу протестировать, например, этот 16-битный должен вывести два в степень 16 минус два уникальных числа, прежде чем он будет повторяться. Минус два в том, что lfsr не будет работать или генерировать числа со всеми единицами или со всеми нулями, помните об этом, когда вы начнете.
unsigned int fastprand16 ( unsigned int prand )
{
// 16 bit lfsr bits 16,14,13,11
if(prand&1)
{
prand>>=1;
prand^=0x0000B400;
}
else
{
prand>>=1;
}
return(prand&0x0000FFFF);
}
В Википедии есть ссылки на таблицы отводов битовых ячеек lfsr, которые вырабатывают максимальное количество шаблонов, прежде чем повторять их для различных длин сдвига. Вышеприведенный вариант работает, но немного скучно, если вы хотите переворачивать больше битов данных, а не просто сдвигать их.
Использование собственного рандомизатора лучше, чем использование одного из библиотеки. Библиотека изменяется с компьютера на компьютер с операционной системы на операционную систему с компилятора на компилятор и с версий OS или компилятора в той же системе. Используя свой собственный, вы будете уверены, что тест не изменит свои свойства с течением времени, даже если это будет происходить в ведущей системе. Вот почему что-то вроде lfsr хорошо, это может быть не отличный генератор случайных чисел для игры в карты против компьютера, а для создания повторяющихся хаотично выглядящих шаблонов данных на шине данных с небольшим количеством быстрого исполнения кода, это отличный. Без доморощенного рандомизатора я бы все вместе избежал тестирования на основе рандомизатора.
Если вам нужно, например, выполнить быстрый BIST, вы можете заполнить память числами повторения, считанными обратно, заполнить инверсией тех же самых чисел, и прочитать обратно. Или выполнить предварительное тестирование, чтобы сначала отсеять явно плохие платы, а затем выполнить мартовские тесты, возможно, за исключением теста адреса. или вместо этого вы можете выполнить много / тысячи проходов, каждый раз меняя семя. Зная свойства ваших шаблонов lfsr, вы можете использовать следующее случайное число в шаблоне в качестве начального числа для следующего прохода памяти. Или, чтобы быть идеальным, вы можете использовать второй lfsr для производства семян, создавая всевозможные семена со временем.
Кэши и их тестирование - это кошмар.На микросхемах следует следовать правилу, поскольку это не тест на проверку чипа, ни тест на проверку конструкции, это производственный тест.Если у вас есть кеш данных и вы тестируете оперативную память с другой стороны, вы можете себя обмануть, возможно, вам придется выполнить проход записи несколько раз перед проходом чтения.В идеале вы хотите, чтобы кэш был включен, чтобы ваш тест выполнялся быстро, но вы хотите отключить кэш для тестируемой области памяти.Это напоминает мне, что распространенной ошибкой является выполнение всех этих тестов только на той памяти, которая не используется программным обеспечением, выполняющим тест (при условии, что на этой плате установлен процессор, а sram является памятью выполнения процессоров), в частности, при запуске этого программного обеспечения.из нулевой или низкой памяти, что означает, что область памяти, которую большинство программ тратит большую часть своего времени на выполнение, не проверяется, и этот фрагмент в середине между программным пространством и стеком, который используется реже, является наиболее проверенным, плюс не тестирует всеадрес биты, потому что вы можете врезаться в стек.Ты думаешь, что это почти пустая трата времени на то, чтобы делать какие-либо тесты памяти для такой системы?Если вы не доверяете памяти для тестирования, вы не можете доверять результатам тестовой программы, запущенной в этой памяти.В идеале вы хотите выполнить с нуля или на чип-памяти, чтобы вы могли полностью протестировать всю шину памяти.
ECC-память - это еще один кошмар, хорошо спроектированная ecc-память и контроллеры памяти позволят вам обратиться ко всемиз битов, включая теги ecc, что позволяет вам протестировать все, а также саму систему ecc, одиночные и многобитовые ошибки.Если у вас нет доступа, то даже для положительного тестирования, если вы пытаетесь протестировать каждый бит внутри чипа, тогда для каждой строки необходимо убедиться, что набор тестов памяти включает и выключает все биты ecc по крайней мереодин раз, а также для каждого бита в теге, он проверяется со всеми остальными битами в один момент времени и выключается с каждым другим битом (не обязательно одновременно).Современные процессоры с их предсказанием ветвления имеют право на чтение любой области памяти по желанию, поэтому ваш тест может случайно прочитать область памяти с намеренно установленной ошибкой в один бит, что приведет к восстановлению этого бита, и к тому времени, когда ваш тест получитПри попадании в это место вы можете потерпеть неудачу, потому что не увидели ожидаемой однобитовой ошибки, хотя на самом деле система работает правильно.Четность похожа на ecc, но не так плоха.
Еще одна вещь, связанная с тестированием платы, состоит в том, что, если, скажем, вы хотите протестировать каждый бит в каждой микросхеме, а также все трассы печатных плат, паяные соединения и кабели.Это не займет много времени, чтобы просмотреть периферийные устройства или взглянуть на набор инструкций самого процессора (если он у вас есть на борту) и обнаружить, что даже, скажем, 2 ГГц, вы можете смотреть на десятки миллиардов лет, прежде чем вы даже достигнетевнешние штыри первого чипа (работают изнутри).Вы не можете и не будете все тестировать, выбирайте низко висящие фрукты, ждите, пока пользователи (будем надеяться, у разработчиков программного обеспечения / bsp) найдут непредвиденные проблемы, а затем создайте новые тесты для этих конкретных проблем.У вас может быть идеальный тест памяти на марш, и он все равно не будет обнаруживать периодические проблемы с sram.Даже с ожогом я видел, как детали выходили из строя месяцы спустя.Значительно выше ожидаемой младенческой смертности для плат / деталей.
В итоге, нет единого размера, подходящего для всех решений, вы должны настроить обычные, популярные или личные любимые практики с учетом особенностей конкретной платы / микросхем иуметь отлаживать и создавать новые тесты на лету.Вы также должны проявлять инициативу, заставляя инженеров-проектировщиков проектировать для испытаний.Это ваша голова (инженер-тестировщик), которая будет катиться раньше их, если будет отзыв продукта.
Извините за длинный пост, я надеюсь, что это кому-то пригодится ...