Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите настроить память
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
ilkz
Друзья, такой затык:
Есть кит DVK600, а к нему платка с чипом H57V1262GTR-75С. Не получается полностью завести память из-под ниос. Если нужно, могу выложить проект.

Собираю систему в Qsys, клок - 50МГц, констрейны кроме derive_pll_clocks и create_clock 50МГц никакие не заданы:
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла

Далее собираю дефолтный проект simple memory test в ниосе:
Нажмите для просмотра прикрепленного файла

При тестировании получаю ошибку:
Нажмите для просмотра прикрепленного файла

Вычисления показывают, что работает лишь один банк из 4-х.
Из даташита на память мне непонятно какие тайминги нужно задавать в настройках ядра в Qsys и удовлетворяют ли заданные там по умолчанию.
И еще - как корректно законстрейнить память?
lait33
Почему конечный адрес получился 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
Цитата(lait33 @ Nov 18 2015, 15:07) *
Почему конечный адрес получился 1FF_FFFF, а не 7A1 2000- это как раз и будет 128Mbit


1. А precharge flag не учавствует в формировании адреса? Зачем тогда его включают в адресную шину? Исправил:
Нажмите для просмотра прикрепленного файла

Область памяти теперь получилась размером в 16Мбит. Не понимаю почему - ведь в настройках корки указано 128Мбит...
Правильно ли я рассчитываю: 16 бит данных * 2^(12 бит адреса - 1 бит на precharge_flag) * 4 банка = 128 Мбит. Верно же?
Нажмите для просмотра прикрепленного файла



Цитата(lait33 @ Nov 18 2015, 15:07) *
У вас даже один банк полностью не заполнился. т.к один банк = 32Mbit, а заполнился на 8Mbit.
И по идее тайминги wizzard выставляет сам


Зато мемтест на этой короткой области памяти заработал:
Нажмите для просмотра прикрепленного файла
lait33
QUOTE (ilkz @ Nov 18 2015, 15:51) *
Область памяти теперь получилась размером в 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-ы есть что-то подобно или попробуйте вручную исправить
ilkz
Цитата(lait33 @ Nov 18 2015, 16:26) *
ну судя по функциональной схеме из даташита 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, спасибо за помощь!
lait33
не за что, а ROW и Column. вы какие значения вставили? ROW = 12 Column = 9 или ROW = 13 Column = 9?
ilkz
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 не умеет автоматом генерить констрейны для своих модулей?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.