Sat Mar 19 2005 09:52, Michael Tulupov wrote to Alex Gavrikov:
AG>>>> Hаиболее пpостые тесты "шахматы", "бегущая единица/ноль". MT>>> Подскажи RTFM по тестам ОЗУ. В инете или ещё где. AG>> Если так надо спpошу... - есть pыбные места.
MT> Hу имелось в виду формальное описание алгоритмов либо примеры MT> на С/С++/Pascal/Asm/всё что угодно.... MT> Вот хотя бы вышеописанных "шахмат". MT> С "бегущей единицей" я уже по смыслу догадался ;-) MT> MT> У меня есть давнее желание сделать аппаратный тест ОЗУ в фоне. MT> Допустим, пусть контроллер DRAM в фоне гоняет тест, MT> пока на шине (у меня AMBA) нет запросов....... MT> Или посадить ещё одного мастера специально для этого. MT> Вот мне и интересны стандартные тесты - посмотреть, что проще MT> переложить на HDL и далее на железо....
Тесты ОЗУ можно разделить на два класса: разрушающие (когда содержимое ОЗУ портится) и неразрушающие. Первые вылавливают больше ошибок, но их имеет смысл гонять только при включении питания или по специальному запросу, иначе могут быть грабли...
"Шахматы" - один из самых простых тестов, его нетрудно сделать неразрушающим. В этом случае за один заход тестируется небольшой участок памяти, содержимое которого сначала сохраняется в отведенном для этой цели буфере, а потом восстанавливается. В тестируемый участок сначала записываются чередующиееся байты (для памяти с байтной организацией) 0х55 и 0хАА, а потом проверяются. После этого комбинация меняется на обратную, 0хАА и 0х55, и тоже проверяется. Этот тест имеет смысл для проверки "слипания" соседних разрядов данных и утечек между соседними ячейками динамической памяти.
"Бегущая волна" (или "бегущий фронт") позволяет выявить "слипание" адресных шин. Обычно делается разрушающим, на всю память. Сначала память заполняется нулями. Потом в первую ячейку записывается 0xFF, при этом проверяется что в эту ячейку 0xFF записалось, а из следующей за ней все еще читается 0. Затем
0xFF записывается в следующую, и т.д., пока вся память не окажется заполненной единицами. После этого проверка возобновляется с первой ячейки, в нее пишется
0 и проверяется, а из следующей за ней должно читаться 0xFF, и т.д.
"Простое число" тоже проверяет адреса. Выбирается какое-нибудь не очень маленькое простое число, например, 13. Память заполняется числами от счетчика с таким периодом (например, 1,2,3,...,12,13,1,2,3... и т.д.), затем проверяется.
Можно "волну" скомбинировать с "шахматами", и т.п., уж на что фантазии хватит. Ссылок не приведу. Этими тестами я увлекался в другой жизни, лет 20 назад, источники не помню. "В общем виде" задача тестирования вполне зубодробительная (максимум выявления ошибок при заданных ресурсах; при самотестировании все еще более усложняется), но в то время авторы больше нажимали на эмпирику и здравый смысл, что имхо правильно.
Пока, Алексей