Jump to content

    
Sign in to follow this  
pavlovconst

Не работает чтение DDR3 на CycloneV

Recommended Posts

Здравствуйте!

Делаю аппаратный контроллер (HMC) памяти DDR3 на CycloneV.

Создал два порта Avalon-MM по 32 бит - один для JTAG Debug Master, второй - для штатного (моего) контроллера.

Через JTAG Debug Master память пишется и читается, из чего делаю вывод, что временнЫе настройки чипов памяти я поставил правильные.

Через штатный контроллер могу питать в память, и единичные записи и берсты проходят. Но вот чтение поднять никак не получается.

Контроллер принимает 2 первых запроса по 8 слов, а на третьем поднимает waitrequest и больше его не опускает. Никогда. Сигнал readdatawalid вижу где-то вдалеке и только один.

Может кто-то сталкивался с таким? Что я делаю не так?

Обязательно ли логику мастера описывать в виде компонента QSYS, сейчас весь авалон у меня экспортирован из QSYS...

2019-07-27 20 28 29.png

Share this post


Link to post
Share on other sites

Возможно, сигнал waitrequest не инвертированнный на самом деле (хотя суффикс "_n" намекает об обратном), и мне стоит ждать 6 тактов после первого запроса? :dash2:

Share this post


Link to post
Share on other sites
12 часов назад, pavlovconst сказал:

Возможно, сигнал waitrequest не инвертированнный на самом деле (хотя суффикс "_n" намекает об обратном), и мне стоит ждать 6 тактов после первого запроса? :dash2:

У signal tap есть одно поганое свойство: он может сигналы интвертировать, если ему будет так удобнее разложить проект по кристаллу.

Хотите быстро и правильно: берете modelsim, берете модель памяти. И гоняете это дело, пока моделирование не даст положительный результат.

Share this post


Link to post
Share on other sites

Когда у вас вся система внутри qsys, интреконнект настраивается автоматически, используя данные из tcl скрипта от вашего модуля. Т.е. если у вашего модуля например сигнал waitrequest активный 0, а у слейва 1, то qsys поставит инвертор. и тд. Поэтому лучше все делать в qsys.

У интела есть темплейты для мастеров чтения и записи, посмотрите, может пригодятся

https://www.intel.com/content/www/us/en/programmable/support/support-resources/design-examples/intellectual-property/embedded/nios-ii/exm-avalon-mm.html

Edited by Burenkov

Share this post


Link to post
Share on other sites

Flip-fl0p, Burenkov Спасибо за советы!

Я разобрался. У контроллера памяти есть статусные выходы

.status_local_init_done
.status_local_cal_success
.status_local_cal_fail

Начинать чтение нужно только после того, как память инициализирована и успешно откалибрована

Share this post


Link to post
Share on other sites
2 часа назад, pavlovconst сказал:

Flip-fl0p, Burenkov Спасибо за советы!

Я разобрался. У контроллера памяти есть статусные выходы


.status_local_init_done
.status_local_cal_success
.status_local_cal_fail

Начинать чтение нужно только после того, как память инициализирована и успешно

Ну да, в любом описалове на динамическую память это написано. И применение готовых ip ядер контроллеров памяти, не освобождает о  чтения описалова на память. 

Share this post


Link to post
Share on other sites
11 минут назад, pavlovconst сказал:

Кто ж спорит. Всего три томика прочитал - и дело в шляпе =)

Таков удел разработчиков - читать документацию.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this