Перейти к содержанию
    

Помогите настроить память

Друзья, такой затык:

Есть кит DVK600, а к нему платка с чипом H57V1262GTR-75С. Не получается полностью завести память из-под ниос. Если нужно, могу выложить проект.

 

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

post-67084-1447828074_thumb.png

post-67084-1447828341_thumb.png

post-67084-1447828345_thumb.png

 

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

post-67084-1447828352_thumb.png

 

При тестировании получаю ошибку:

post-67084-1447828355_thumb.png

 

Вычисления показывают, что работает лишь один банк из 4-х.

Из даташита на память мне непонятно какие тайминги нужно задавать в настройках ядра в Qsys и удовлетворяют ли заданные там по умолчанию.

И еще - как корректно законстрейнить память?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему конечный адрес получился 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 выставляет сам

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему конечный адрес получился 1FF_FFFF, а не 7A1 2000- это как раз и будет 128Mbit

 

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

post-67084-1447850510_thumb.png

 

Область памяти теперь получилась размером в 16Мбит. Не понимаю почему - ведь в настройках корки указано 128Мбит...

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

post-67084-1447850621_thumb.png

 

 

 

У вас даже один банк полностью не заполнился. т.к один банк = 32Mbit, а заполнился на 8Mbit.

И по идее тайминги wizzard выставляет сам

 

Зато мемтест на этой короткой области памяти заработал:

post-67084-1447850960_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Область памяти теперь получилась размером в 16Мбит. Не понимаю почему - ведь в настройках корки указано 128Мбит...

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

post-67084-1447850621_thumb.png

18_11_2015_16_02_31.jpg

 

ну судя по функциональной схеме из даташита 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-ы есть что-то подобно или попробуйте вручную исправить

Изменено пользователем lait33

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну судя по функциональной схеме из даташита 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, спасибо за помощь!

Изменено пользователем 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

 

Настройки системы:

post-67084-1448019436_thumb.png

 

При этом, если указать старт из Onchip RAM, то стартует нормально.

Что это может быть? Может из-за того что память 16-битная?

 

Убрал Clock Bridge - заработало. Видимо, разваливались тайминги. А что разве Qsys не умеет автоматом генерить констрейны для своих модулей?

Изменено пользователем ilkz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...