PDA

Просмотр полной версии : Алгоритмы теста памяти



ILoveSpeccy
20.10.2013, 22:44
Привет всем.

Понадобился мне для Aeon'a тест памяти.
Мне нужно реализовать 2 вещи:
* проверить общий объём памяти (она может быть от 8 до 64 Мб)
* проверить её работоспособность

Может кто поможет информацией или алгоритмом?

vlad
20.10.2013, 23:17
Контроллер SDRAM: [1 (http://hamsterworks.co.nz/mediawiki/index.php/SDRAM_Memory_Controller)]

Можешь глянуть на примере теста SRAM, тебе ведь ее тоже тестить нужно: [2 (http://hamsterworks.co.nz/mediawiki/index.php/Papilio_Plus/SRAM_test_2)]

ILoveSpeccy
20.10.2013, 23:31
Спасибо!
Но может есть инфа по программным методам?
Я уже немного накопал в инете, но всё же, может кто делал.
Попробую сваять чего нибудь.

Tronix
22.10.2013, 10:53
В Z80 я полный ноль, я не знаю как там распределяется адресное пространство и сколько максимально можно адресовать за раз, но относительно x86 могу сказать так: 1) для определения общего кол-ва памяти: записываем паттерн 55AAh в начало каждого 16Кб блока. Считываем из начала блока значение. Если значение не равно 55AAh - все, память кончилась. Иначе - прибавляем к адресу 16Кб и ушли на цикл.
2) для тестирования памяти алгоритм примерно тот же, только я тестирую 1Кб блоками. 4 хороших паттерна есть - 55h (10101010 bin), AAh (01010101 bin), FFh (11111111 bin) и 00 (00000000 bin). Заполняем первый килобайт поочередно этими паттернами, потом считываем из первого килобайта и сверяем с паттерном. Если где-то не сошлось - значит ошибка. Дальше берем второй килобайт и по новой.

SoftFelix
22.10.2013, 12:11
ILoveSpeccy, есть исходники ТЕСТ-ПЗУ Андрея Хахонова для Спектрум 128К. Там реализован три алгоритма: бегущий 0, бегущая 1, псевдослучайная последовательность. Работает только в регистрах Z80, тестирует блоками по 16КБ. При ошибке выводит адрес и бит(ы). Исходник для iS-DOS-асма или GENS.

ZEK
22.10.2013, 12:18
У SDRAM 4 банки всегда и 1024 столбца если не ошибаюсь, достаточно перебрать старшие 3 бита номера строки (из расчета что стоит 64мб), от максимального к минимальному и писать туда значение этого счетчика к примеру в колонку 0, потом читаем с самого старшей строки байт и получаем количество (на единицу меньше) памяти кратное 8мб

ILoveSpeccy
22.10.2013, 15:01
У SDRAM 4 банки всегда и 1024 столбца если не ошибаюсь
У 16-битных SDRAM:
8Мб - 256 столбцов
16 и 32 Мб - 512 столбцов
64Мб - 1024 столбца

Но сути это не меняет. Перебирать, беря во внимание 256 столбцов и всё. Короче, вечером попробую.
Сделал простенький программный тест записи/чтения. 8Мб перебирает примерно за секунду.

ZEK
22.10.2013, 15:14
Ну переиграть вариант на столбцы и строки, первый этапом посчитать сколько столбцов, вторым определить кво строк, тож по принципу из расчета максимального количества, ну я думаю смысл ясен, неиспользуемые биты sdram игнорирует и адреса закольцовываются

---------- Post added at 14:14 ---------- Previous post was at 14:07 ----------

Для универсального контролера памяти всеравно геометрия матрицы надо будет, то бы мультиплексоры переключить для использования всей матрицы, к тому же если будет принята стратегия оптимизации конвеера то нужно будет как то отлавливать когда строки переключать и может быть адреса раскидать так что бы строки реже клоцать, как никак дороговатая операция

Hacker VBI
22.10.2013, 15:17
ILoveSpeccy, мы делали так:
при старте проверка контрольной суммы пзу
потом тест озу:
1. пишем 0, читаем (сверка) 0
2. пишем #ff, читаем #ff
3. пишем #aa, читаем #aa
4. пишем #55, читаем #55

esl
22.10.2013, 16:06
есть же http://www.memtest.org/
там открытые исходники

ZEK
22.10.2013, 16:44
В Speccy2010 ARM тестит память, можно там посмотреть