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

Intel Arria V + DDR3

Всем привет!

Столкнулся с проблемой работы с памятью DDR3. 

Суть в следующем...использую софтовое ядро от Альтеры DDR3 SDRAM Controller with UniPHY и ПЛИС Arria V.

При включении питания платы успешно проходит как инициализация так и каллибровка памяти.

Данные пишу в режиме burst по 83 слова. При считывании данных нормально выгружается часть данных, а после контроллер перестает выдавать данные. Порция выгружаемых данных может быть разная.Я из логики формирую на шине Avalon-MM команду на чтение, а контроллер просто не отвечает на неё. (сигнал waitrequest при формировании команд записи и чтения учитывается и отслеживается) 

Кто имеет хороший опыт работы с контроллером DDR3 и памятью подскажите или посоветуйте, что еще посмотреть.

 

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


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

10 minutes ago, polyvyannyy said:

а контроллер просто не отвечает на неё. (сигнал waitrequest при формировании команд записи и чтения учитывается и отслеживается) 

Может я не в тему, но все же. Если на Avalon-MM прикручен какой нибудь pipeline в qsys, то waitrequest может лежать и надо просто ждать read_valid. В доке по avalon-mm расписаны эти сценарии. Совсем недавно на этом попался, анализируя waitrequest на on-chip memory. То есть ставялю линию READ в 1 и через три такта приходит VALID с данными, без всяких waitrequest

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

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


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

4 hours ago, new123 said:

Может я не в тему, но все же. Если на Avalon-MM прикручен какой нибудь pipeline в qsys, то waitrequest может лежать и надо просто ждать read_valid. В доке по avalon-mm расписаны эти сценарии. Совсем недавно на этом попался, анализируя waitrequest на on-chip memory. То есть ставялю линию READ в 1 и через три такта приходит VALID с данными, без всяких waitrequest

 

У меня в системе один Slave-контроллер памяти. Но я попробовал Ваш вариант. Все равно зависает.

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


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

Добавьте сигналы Avalon-MM в сигналтап, поймайте эту ситуацию, проанализируйте как следует, посверяйте с даташитом на Avalon-MM шину. Ну и сюда эту картинку.

Еще посмотрите сразу в Таймквест, заданы ли у вас все необходимые констрейны и удовлетворены ли они.

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


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

в стандарте на AXI, третьей версии, была хитрая оговорка о том, что бурст не должен выходить за пределы адресного  окна в 4К, т.е. не быть размером 4К, а именно гипотетически инкрементируемый адрес, не должен переходить эту границу. Бурсты подобного типа, надо резать на 2 транзакции самостоятельно. Может быть тут подобная фича вскрылась? 

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


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

17 hours ago, dinam said:

А не похож ли мой случай на ваш? 

Хмм, очень даже похоже. Вы решили эту проблему?

7 hours ago, des00 said:

в стандарте на AXI, третьей версии, была хитрая оговорка о том, что бурст не должен выходить за пределы адресного  окна в 4К, т.е. не быть размером 4К, а именно гипотетически инкрементируемый адрес, не должен переходить эту границу. Бурсты подобного типа, надо резать на 2 транзакции самостоятельно. Может быть тут подобная фича вскрылась? 

Нет. Посылка однозначно меньше размером

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


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

Насколько я помню это проблема шины Avalon-MM в конкретной реализации. Подробности стал забывать, но вроде когда я снизил частоту шины записи с 166,5 МГц до 149,5 проблема исчезла. Сейчас она у меня 74.25МГц тоже проблем нет. Частота шины чтения во всех случаях 166,5МГц.

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


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

6 hours ago, polyvyannyy said:

Нет. Посылка однозначно меньше размером

4Килобайта для AXI, у вас шина другая, там могут быть другие цифры.

Про частоты сомнительно мне, если временные ограничения сходились, какая разница какая частота. Неужели внутри контроллера асинхронные КА используются. В глюк анализа квартуса я поверю, а вот в глюк логики контроллера когда 16МГц все решают, мне не верится.

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


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

Там не сам размер транзакции важен (он - следствие), а пересечение границы 4к. Т.е. даже если длина транзакции 2 байта, но один лежит по одну сторону границы 4к, а второй - по другую, то придётся резать обращение на две транзакции по одному байту. И это не только требование AXI, но и, например, PCIe - тоже не разрешает метать транзакции через границу 4к. Видимо, это связано с тем, что хостовая (системная) память побита MMU на страницы по 4к, и гарантируется непрерывность физических адресов только в пределах страницы, т.е. перейдя на границу 4к на стороне дивайса, можно вполне угодить в "чужую" память.

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


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

Всем привет! Текущая проблема не решена. Все притормозилось, так как проект с памятью ушел на некторое время на второй план. Но сейчас произошло воскрешение проекта)

итак, что удалось выяснить дополнительно...

1. Если я пишу в режимер burst порциями по 16 слов и записываю всю память (на шину авлон выставляю адреса соответственно 0, 16, 32, 48, 64....и тд), а после записи всей памяти начинаю такими же порциями считывать, то все работает замечательно.

2. Если я пишу один пакет данных размером 64 слова и потом его сразу считываю, то все работатет.

3. Если я записываю всю память порциями по 64 слова, а после начинаю считывать, то не работает (нет ответа на самую первую команду чтения)

Пока нет понимания как это все работает.

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

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


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

Burst Length Support

The controller supports burst lengths of 2, 4, 8, and 16. Data widths of 8, 16, and 32 bits are supported for non-ECC operation and data widths of 24 and 40 bits are supported for operations with ECC enabled. The following table shows the type of SDRAM for each burst length.

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


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

11 minutes ago, devilmike said:

Burst Length Support

The controller supports burst lengths of 2, 4, 8, and 16. Data widths of 8, 16, and 32 bits are supported for non-ECC operation and data widths of 24 and 40 bits are supported for operations with ECC enabled. The following table shows the type of SDRAM for each burst length.

А можно ссылку на документ, где это написано?

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


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

3 hours ago, polyvyannyy said:

3. Если я записываю всю память порциями по 64 слова, а после начинаю считывать, то не работает (нет ответа на самую первую команду чтения) 

 

попробуй прочитать первым чтением  64+16 слов. Это подтвердит или опровергнет мое предположение

PS: Я когда с этим столкнулся, то разбил транзакции на более мелкие. По скорости ты ничего не потеряешь.

При рандомном доступе рекомендую включить опцию Enable Reording.

14 minutes ago, polyvyannyy said:

А можно ссылку на документ, где это написано?

https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/external-memory/emi_ip.pdf

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

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


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

В общем, проблема до конца не решена. Но подобрал рабочий вариант. Все работает при режиме записи берстом порциями по 32 слова. В таком режиме можно считывать совершенно любым куском (конечно же, в пределах максимальной длины берста)

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


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

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

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

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

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

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

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

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

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

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