реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> DDR2 на циклоне, помогите запустить
alexPec
сообщение Oct 8 2014, 10:53
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Всем доброго дня. Пытаюсь запустить DDR2 на циклоне 3. Нужна помошь опытных в этом деле коллег. В системе ниос, clock crossing bridge(с ниоса на ДДР), DDR контроллер и onchip память. ДДР работает на 135 МГц (иначе констрейны не пролазят), все остальное на 67,5МГц. При компиляции ни одного отрицательного слэка. В эклипсе сделал проект memory test small с bsp, все компилируется без ошибок. Все располагаю в onchip памяти, DDR только тестирую. Программа загружается (в onchip), пошаговая отладка идет. Первый же тест памяти - снача пишется число в память ДДР, затем читается. команда IOWR_32DIRECT в пошаговом режиме выполняется, а вот следующая команда IORD_32DIRECT уже нет. Делаешь на ней step (F6) выполняться начинает и тут же отваливается JTAG отладка. Дебагер находится в положении Run, делаешь паузу или стоп - говорит что потеряна связь с target-ом. При этом конфигурация сохраняется, т.е. можно снова запустить программу на отладку и все начинает работать до первого чтения из ДДР. Встроенный просмотрщик памяти реагирует также: как только пытаешься посмотреть область ДДР - отваливается JTAG. Все питания в норме.
Было у кого такое? Куда копать, что смотреть? Похоже дальше нужен сигнал тап, что посмотреть им в первую очередь с чего начать, посоветуйте пожалуйста.


Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  project.rar ( 5.38 мегабайт ) Кол-во скачиваний: 10
 
Go to the top of the page
 
+Quote Post
gosu-art
сообщение Oct 8 2014, 12:30
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



У меня так же было, если неправильно настроил тайминги ДДР в таблице. Там их много.
Go to the top of the page
 
+Quote Post
krux
сообщение Oct 8 2014, 12:35
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



из altmemddr выходит сигнал init_done
он в единицу установился?
если нет, значит инициализация DDR не прошла.

если установился, тогда второе предполжение - reset_request_n c altmemddr выходит в 1 позже чем reset_n на nios, т.е. nios подает команды раньше, чем altmemddr способен их обработать.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 8 2014, 12:44
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



была такая фигня правда с ксалинксом. Ошибка была в том что подключение ДДР у них требует отдельного PLL определенного для клоков контроллера, а я запитал его от того же что и проц. И потому он работал не стабильно, стоило кристаллу чуть нагреться и все рушилось. А до установки регистров на шину (они времянку чуть улучшают) все особенно падало как только проходила команда включения кэша данных. Там проходит рефреш кэша по этой команде, обращения в ДДР и кирдык... хотя одиночные тесты проходили боле менее нормально.

Резюме, может у вас что-то подобное? Поглядите клоки для ДДР как формируются и нет ли каких особых требований на это.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 11 2014, 11:36
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(krux @ Oct 8 2014, 16:35) *
из altmemddr выходит сигнал init_done
он в единицу установился?
если нет, значит инициализация DDR не прошла.

если установился, тогда второе предполжение - reset_request_n c altmemddr выходит в 1 позже чем reset_n на nios, т.е. nios подает команды раньше, чем altmemddr способен их обработать.


В общем после долгих экспериментов со средами разработки собрал в Q91 систему (рисунок). Только в Q91 в элипсе не отваливался Jtag при обращении к DDR.
Результат такой: init_done в 1 выставляется, в пошаговом режиме пытаюсь писать-читать в/из DDR (программа в onchip) - ничего не меняется в памяти. Читаются по разным адресам разные но всегда одни и те же значения. На запись не реагирует. Значения в любом 32-битном слове состоят из 4-х одинаковых байт. Не надо ли часом в clock-crossing bridge (а может до или после него) ставить какие-то преобразователи 8<->32 бит? Хотя смотрел пример для starter kit - там правда DDR, не DDR2, но 16-разрядная и тоже без всяких преобразователей вешается на шину процессора.
И насчет того что ниос подает команды раньше, это Вы имеете ввиду команды инициализации? Их ниос подает, не контроллер DDR?
Если все же DDR, тогда в пошаговом режиме получается что этот пункт можно отбросить?

PS со второго раза читается из памяти что попало. Как ни пытался повторить - не получилось, читается всегда разное. Ботва какая-то...

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
thermit
сообщение Oct 11 2014, 15:41
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



у вас прога из какой памяти выполняется? судя по картинке из ддр?
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 11 2014, 17:04
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(thermit @ Oct 11 2014, 19:41) *
у вас прога из какой памяти выполняется? судя по картинке из ддр?


Нет, из onchip_memory2_0.
Go to the top of the page
 
+Quote Post
thermit
сообщение Oct 11 2014, 17:13
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата(alexPec @ Oct 11 2014, 21:04) *
Нет, из onchip_memory2_0.


ddr имеет базу 0. программа по умолчанию выполняется с адреса 0, так что похоже, что все же из ддр.
поставте базовый адрес ончип мемори в 0, заблокируйте иго изменение и сделайте автоассигн базовых адресов. потом в бсп линкер скрипт надо явно указать размещение сегментов в ончип мемори. тогда ддр будет полностью доступна в смысле любого обращения без боязни испортить код.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 11 2014, 21:12
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(thermit @ Oct 11 2014, 21:13) *
ddr имеет базу 0. программа по умолчанию выполняется с адреса 0, так что похоже, что все же из ддр.
поставте базовый адрес ончип мемори в 0, заблокируйте иго изменение и сделайте автоассигн базовых адресов. потом в бсп линкер скрипт надо явно указать размещение сегментов в ончип мемори. тогда ддр будет полностью доступна в смысле любого обращения без боязни испортить код.


Нене, там клок кроссинг бридж стоит, DDR располагается с адреса 0х8000000. В процессоре ресет вектор указывает на ончип. В BSP в линкере я уже поставил все сегменты на ончип, в ДДР ничего нет.

Но я сейчас пробую проект запустить не только в Q91, еще и в Q13.1. Там картина другая: если в Q91 init done стоит в 1, то такой же проект в Q13.1 (ончип память, процессор, DDR2) ведет себя по другому - init done там нуле. Reset_request_n с ДДР контроллера в единице, т.е. вроде (как я понял из описания контроллера ДДР) ПЛЛ ДДР-ная в захвате. Процессорная ПЛЛ тоже в захвате. Как его (init_done контроллера ДДР) заставить в 1 перейти?

Судя по описанию сигнала :

When the memory initialization, training, and calibration are complete, the
PHY sequencer asserts ctrl_usr_mode_rdy to the memory controller,
which then asserts this signal to indicate that the memory interface is ready
for use.

это индикация того, что стейт-машина инициализации памяти закончила работу, и от результата этой работы этот сигнал не зависит, т.е. по любому должен выставиться в 1 через некоторое время, так?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Oct 12 2014, 02:30
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



alexPec, а у вас кит какой-нибудь есть под рукой? С DDR ошибиться-то почти негде: констрейны генератор корки делает, остается только их подключить и пины назначить. Просто чтобы отвлечься (иногда глаз замылится и очевидную ошибку пропускает) и исключить кривую схему/разводку повторите проект на какой-нибудь девборде. У меня есть проект для стартера, если что (вроде и тут выкладывал).
Go to the top of the page
 
+Quote Post
Timmy
сообщение Oct 12 2014, 03:26
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Отваливается JTAG - это надо понимать, как отваливается JTAG Debugger? Вероятная причина - блокировка шины Avalon. Так что стоит посмотреть на шины данных и команд в SignalTap, а лучше в симуляторе, если там проблема будет воспроизводиться.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 12 2014, 05:03
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Timmy @ Oct 12 2014, 07:26) *
Отваливается JTAG - это надо понимать, как отваливается JTAG Debugger? Вероятная причина - блокировка шины Avalon.


Да, я тоже так и думал.

Цитата
alexPec, а у вас кит какой-нибудь есть под рукой? С DDR ошибиться-то почти негде: констрейны генератор корки делает, остается только их подключить и пины назначить. Просто чтобы отвлечься (иногда глаз замылится и очевидную ошибку пропускает)


Вот это точно. Кит у меня на 3C25, там DDR, не DDR2, и контроллер соответствующий, поэтому вроде как без надобности.

В общем завелась ДДР (полный тест пока не прогонял), по отделным адресам пишет-читает нормально, заработал проект в Q13.1 (кстати, спасибо за него закромам). Что было:

1. Самое главное, похоже - перепутал при назначении пинов BA0 и BA1. Все бы ничего, только они в инициализации участвуют ))
2. Убрал из СОПЦа JTAG UART (на случай если он участвует в зависании при обращении к ДДР)
3. Для своей памяти с спидгрейдом -25 загрузил настройки (из предустановленных) как для памяти из кита на EP3C120 с спидгрейдом -3 и поменял только разрядность BA, тайминги оставил такие же.

Всем большое спасибо за Ваши мысли и советы!!! biggrin.gif

Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 17 2014, 16:19
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



А вот что-то сравнил я СОПЦ, состоящий из контроллера ДДР2 и процессора ниос, собранный в Q91 и Q13.1. Сопц один в один, из Q91 просто перенес в Q13.1 и перекомпилировал. В итоге: в Q91 СОПЦ занимал чуть меньше 6000LEs, а в Q13.1 - уже 10112LEs. Чет большая разница для ОДИНАКОВОГО функционала. Может просветит кто, почему разница чуть не в 2 раза? Чего-то допилить может надо чтоб поменьше занимал? Чип конечно с запасом, но жаба уже на пределе, чуть еще и задушит.

Кстати, нашел еще одну причину плохой работы (неработы) памяти - при питании 1.8В пульсации были 1В sm.gif. Устранил, работает как часы.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Oct 17 2014, 16:30
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Цитата(alexPec @ Oct 17 2014, 18:19) *
...Чет большая разница для ОДИНАКОВОГО функционала....

функционал одинаковый, реализация разная biggrin.gif
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 17 2014, 17:34
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Kuzmi4 @ Oct 17 2014, 20:30) *
функционал одинаковый, реализация разная biggrin.gif


Ну то есть это нормально и никак его (родной альтеровский контроллер) не ужать?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Oct 17 2014, 17:46
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 alexPec
На счёт "нормально это или нет" - это вам решать wink.gif
Касательно "места поменьше": там есть разные контролеры DDR2 в Qsys (производительность разная, рекомендовано/ не рекомендовано в новых разработках и т.д) - посмотрите, выберите..
В конце концов, если сильно задавит жаба/обстоятельства/... (нужное подчеркнуть), то можно из старого SoPC вытащить и в новый вставить, но я бы так делал в самом крайнем случае (когда уже угрожают физической расправой например).
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Oct 17 2014, 18:04
Сообщение #17


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(alexPec @ Oct 17 2014, 20:19) *
Может просветит кто, почему разница чуть не в 2 раза? Чего-то допилить может надо чтоб поменьше занимал? Чип конечно с запасом, но жаба уже на пределе, чуть еще и задушит.

Разница в реализации шины Avalon в SOPC Builder'е и в Qsys'е.
В Qsys'е Avalon занимает больше места, но зато может обеспечить больую скорость.
Подробности можно посмотреть в сравнении сопка и кусиса - его можно на альтеровском сайте поискать.


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
alexPec
сообщение Oct 17 2014, 19:26
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Stewart Little @ Oct 17 2014, 22:04) *
Разница в реализации шины Avalon в SOPC Builder'е и в Qsys'е.
В Qsys'е Avalon занимает больше места, но зато может обеспечить больую скорость.
Подробности можно посмотреть в сравнении сопка и кусиса - его можно на альтеровском сайте поискать.


Спасибо, это объясняет жадность кусиса.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Oct 18 2014, 12:50
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



можно посмотреть статистику по использованным ресурсам после компиляции, какой модуль сколько сожрал
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01529 секунд с 7
ELECTRONIX ©2004-2016