ilkz 0 18 ноября, 2015 Опубликовано 18 ноября, 2015 · Жалоба Друзья, такой затык: Есть кит DVK600, а к нему платка с чипом H57V1262GTR-75С. Не получается полностью завести память из-под ниос. Если нужно, могу выложить проект. Собираю систему в Qsys, клок - 50МГц, констрейны кроме derive_pll_clocks и create_clock 50МГц никакие не заданы: Далее собираю дефолтный проект simple memory test в ниосе: При тестировании получаю ошибку: Вычисления показывают, что работает лишь один банк из 4-х. Из даташита на память мне непонятно какие тайминги нужно задавать в настройках ядра в Qsys и удовлетворяют ли заданные там по умолчанию. И еще - как корректно законстрейнить память? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lait33 0 18 ноября, 2015 Опубликовано 18 ноября, 2015 · Жалоба Почему конечный адрес получился 1FF_FFFF, а не 7A1 2000- это как раз и будет 128Mbit Второй вопрос почему на втором скрине в конце получилось 256? и еще по даташиту Row Address: RA0 ~ RA11, Column Address: CA0 ~ CA8 Auto-precharge flag: A10 т.е ROW = 12 Column = 9 У вас даже один банк полностью не заполнился. т.к один банк = 32Mbit, а заполнился на 8Mbit. И по идее тайминги wizzard выставляет сам Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilkz 0 18 ноября, 2015 Опубликовано 18 ноября, 2015 · Жалоба Почему конечный адрес получился 1FF_FFFF, а не 7A1 2000- это как раз и будет 128Mbit 1. А precharge flag не учавствует в формировании адреса? Зачем тогда его включают в адресную шину? Исправил: Область памяти теперь получилась размером в 16Мбит. Не понимаю почему - ведь в настройках корки указано 128Мбит... Правильно ли я рассчитываю: 16 бит данных * 2^(12 бит адреса - 1 бит на precharge_flag) * 4 банка = 128 Мбит. Верно же? У вас даже один банк полностью не заполнился. т.к один банк = 32Mbit, а заполнился на 8Mbit. И по идее тайминги wizzard выставляет сам Зато мемтест на этой короткой области памяти заработал: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lait33 0 18 ноября, 2015 Опубликовано 18 ноября, 2015 (изменено) · Жалоба Область памяти теперь получилась размером в 16Мбит. Не понимаю почему - ведь в настройках корки указано 128Мбит... Правильно ли я рассчитываю: 16 бит данных * 2^(12 бит адреса - 1 бит на precharge_flag) * 4 банка = 128 Мбит. Верно же? ну судя по функциональной схеме из даташита 2M*16*4 банка = 128 я с такой памятью ни разу не работал, а толкьо с ddr3 и толкьо с Xilinx, но если предположить, что они схожи,то ,как я знаю в ддр3, записывают данные байтами и получается, что 12бит адреса = 4 095 байт т.е =32 760 бит, а значит 16*32000*4 банка = 128Mb и получается, что вы все верно рассчитали) а если мы добавим еще 13-ый бит адреса, то получится в два раза больше, а память-то на 128... И еще у вас конечный адрес = FF FFFF - это и есть равно 16 Мбит, а должно быть = 7A1 2000 . у xilinxa есть функция обновить адресное пространство, возможно и у alter-ы есть что-то подобно или попробуйте вручную исправить Изменено 18 ноября, 2015 пользователем lait33 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilkz 0 19 ноября, 2015 Опубликовано 19 ноября, 2015 (изменено) · Жалоба ну судя по функциональной схеме из даташита 2M*16*4 банка = 128 12бит адреса = 4 095 байт т.е =32 760 бит, а значит 16*32000*4 банка = 128Mb и получается, что вы все верно рассчитали) а если мы добавим еще 13-ый бит адреса, то получится в два раза больше, а память-то на 128... у вас конечный адрес = FF FFFF - это и есть равно 16 Мбит, а должно быть = 7A1 2000 Все заработало и почти все было корректно. Смотрим в даташит: H57V1262GTR series is organized as 4banks of 2,097,152 x 16, т.е. 134,217,728 бит => 16,777,216 байт. Теперь смотрим в QSys: конечный адрес равен 0xFF_FFFF, что как раз равно 16,777,216 байт. Адресуются же байты, а не биты. Видимо, вчера меня хорошенько переклинило :-). Таким образом, вся моя ошибка была лишь в неправильном задании ширины адресной шины в контроллере SDRAM. lait33, спасибо за помощь! Изменено 19 ноября, 2015 пользователем ilkz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lait33 0 20 ноября, 2015 Опубликовано 20 ноября, 2015 · Жалоба не за что, а ROW и Column. вы какие значения вставили? ROW = 12 Column = 9 или ROW = 13 Column = 9? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilkz 0 20 ноября, 2015 Опубликовано 20 ноября, 2015 (изменено) · Жалоба Row=12, Col=9. Теперь возникла следующая проблема: Если процессору указать Reset vector на SDRAM, то NIOS не заливается: Downloading ELF Process failed. При заливке с ошибкой получается вот это: Using cable "USB-Blaster [USB-0]", device 1, instance 0x00 Resetting and pausing target processor: OK Reading System ID at address 0x0200A060: ID value was not verified: value was not specified Timestamp value was not verified: value was not specified Initializing CPU cache (if present) OK Downloading 01000000 ( 0%) Downloading 01001560 (95%) Downloaded 6KB in 0.0s Verifying 01000000 ( 0%) Verify failed between address 0x1000000 and 0x1001463 Leaving target processor paused Настройки системы: При этом, если указать старт из Onchip RAM, то стартует нормально. Что это может быть? Может из-за того что память 16-битная? Убрал Clock Bridge - заработало. Видимо, разваливались тайминги. А что разве Qsys не умеет автоматом генерить констрейны для своих модулей? Изменено 20 ноября, 2015 пользователем ilkz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться