|
Работа с DDR3, Неправильные данные при чтении |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 27)
|
Jan 5 2012, 11:58
|
Частый гость
 
Группа: Свой
Сообщений: 114
Регистрация: 14-08-11
Из: Андорра
Пользователь №: 66 720

|
Цитата(AlphaMil @ Jan 5 2012, 07:37)  Блок MCB Spartan6 выдает при чтении всегда 32'hFFFF. Все сделал по руководству пользователя. Данные читаются из внутреннего для MCB FIFO на 64 слова. Информация в память пишется по другому каналу. При функциональном моделировании все работает на ура.... Подскажите, где копать. Спасибо. Без кода (как минимум, детального описания алгоритма или ссылки на руководство по которому делаете) будет сложно помочь.
|
|
|
|
|
Jan 5 2012, 14:25
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(AlphaMil @ Jan 5 2012, 19:40)  Ориентируюсь на ug388. Код скорее всего ни при чем - при моделировании все работает, все констрейны выполняются. Использую отладочную плату Avnet Spartan-6 LX150T Development Board. Проекты для нее есть только для EDK. Может там сопротивления какие надо указывать. Вообще, что может привести к такому результату??? Из корки торчит сигнальчик calib_done. В каком он у вас положении? Вскочил в 1 или нет? Замечу, что любые транзакции к памяти возможны лишь после того, как этот сигнал вскочит в 1. Кроме того, проверьте UCF файл. Лучше взять "родной" от производителей дев борды. Распиновка UCF файла, сгенрённого MIGом должна соответствовать вашему железу.
|
|
|
|
|
Jan 5 2012, 17:10
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(AlphaMil @ Jan 5 2012, 22:06)  Сигнал калибровки в 1. Все транзакции происходят после этого. Интересно, что внутреннее фифо заполняется чем-то. Т.е. этими 16hFFFF наверное. Файл ucf уже кучу раз перебирал... Не совсем понял откуда взялось 16 бит - вроде у контроллера минимальная ширина шины данных 32 бита. С какого адреса читается 16hFFFF ? Неплохо бы прочитать ВСЮ память. Если даже преположить, что у вас не работает запись (WE забыли, или ещё что-то) то всё равно в каких-то адресах должны остаться следы работы калибровочной машины - паттерны типа 32hAAAAAAAA , 32h55555555 и т.п. Example design, который генерится автоматом при генерации MIG работает на вашем железе?
|
|
|
|
|
Jan 6 2012, 02:22
|
Частый гость
 
Группа: Свой
Сообщений: 102
Регистрация: 11-10-04
Пользователь №: 849

|
Цитата(AlphaMil @ Jan 5 2012, 21:34)  Виноват, конечно 32'hFFFFFFFF. Примерне проверял. Понадеялся на симуляцию. Завтра обязательно проверю. Сигнал We не забыл - при симуляции все работает отлично. Xilinx memory controller - полная лажа. Приходится делать полное выключение питаня чтоб он заработал. Иначе при перезаливке прошивки результаты такие же как и у вас. Про то что сделанная с нуля по инструкциям Xilinx система вообше не работает я уже молчу - пришлось начинать с работаюшего Xilinx примера.
|
|
|
|
|
Jan 6 2012, 11:46
|
Знающий
   
Группа: Свой
Сообщений: 529
Регистрация: 15-06-05
Из: Питер
Пользователь №: 6 032

|
Цитата(AlphaMil @ Jan 6 2012, 17:17)  Попробовал залить во влешку и перезапустить с выключением питания, не спасло. Вообще плата рабочая - дефолтный проект идет, а память там используется. Гм, а ресет у вас правильный?
--------------------
Россия это даже не страна. Россия это секрет, завернутый в загадку и укрытый не проницаемой тайной...
|
|
|
|
|
Jan 6 2012, 15:55
|
Знающий
   
Группа: Свой
Сообщений: 529
Регистрация: 15-06-05
Из: Питер
Пользователь №: 6 032

|
Цитата(AlphaMil @ Jan 6 2012, 21:51)  Извините, но что значит правильный? Контроллер сбросить надо после включения? У меня сразу сброс контроллера на 0 подключен. Вы пишите, что проект хилых работает, а ваш нет. Как вариант вы используете не тот логический уровень сигнала ресет.
--------------------
Россия это даже не страна. Россия это секрет, завернутый в загадку и укрытый не проницаемой тайной...
|
|
|
|
|
Jan 7 2012, 16:50
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(AlphaMil @ Jan 7 2012, 15:30)  Почему не хватает??? Он мирно находится в неактивном состоянии, а я считаю что после включения питания контроллер памяти находится в состоянии как после сброса (т.е. исходном)... И дело там не в том что сигнал сброшен, просто они ошиблись в схемотехнике и требуют дополнительного сброса для правильного запуска тактирующих цепей. Ни в чём они не ошиблись. Большинство более-менее серьёзных корок от Xilinx всегда требуют наличия внешнего ресета. Потому что только так можно установить сложную систему в известное состояние. По-другому это сделать просто невозможно. Надеяться на то, что после загрузки всё само собой встанет так как надо нельзя в сложных системах, хотя бы потому, что момент перехода из неактивного состояния в активное может превышать период клока системы, соответственно возможны самые причудливые эффекты при неодновременном выходе (всилу банальных задержек на распространение сигнала) системы из состояние сброса. Вообще-то это - прописные истины. Можно например про это прочитать у Кена Чапмена или других гуру. Странно что вы этого не знаете, и не думаю что вина Xilinx в том, что эти банальности они не разжёвывают в каждом UG.
|
|
|
|
|
Jan 8 2012, 08:59
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(AlphaMil @ Jan 8 2012, 00:47)  А зачем тогда секция initial??? Получается сброс нужно назначать на один из пинов и делать внешним. Или как я делать - корректировать файлы ядра что бы добавить туда код для сброса. Т.к. вход ядра сразу подключается на клоковый пин ПЛИС и выход хоть какого клока есть только после сбрасываемого PLL!!!! Так как делать в этом случае, если хилые сами этого не сделали? И даже в UG об этом не написали???? Вообще-то initial - несинтезируемая конструкция. Используется только для симуляции.Правда хилые зачем-то использовали это (грязный хак по-моему) для начальной установки триггеров. Клоковые пины выведены наружу только в примере, а не в самой корке. Как вы будете получать эти клоки - ваше личное дело.Корка тут ни при чём.Исходные клоки вам нужны в любом случае, при чём частота этих клоков в общем случае может быть не кратна, и даже несинхронаа частоте работы контроллера. Теоретически вы можете запихивать данные в фифошки с одной частотой, а контроллер будет работать на другой частоте.В большинстве члучаев так и происходит - контроллер работает на частоте большей, чем каждый из портов чтобы успевать обслуживать несколько портов. В общем то, что вам нужны как минимум свои клоки, не связанные с контроллером - это понятно? Хилые рекомендуют чтобы эти клоки были кратны частоте контроллера, однако это необязательно. Ну а как сделать сброс имея свои клоки по включению питания - это совсем просто.
|
|
|
|
|
Jan 8 2012, 19:03
|
Частый гость
 
Группа: Свой
Сообщений: 102
Регистрация: 11-10-04
Пользователь №: 849

|
Цитата(Bad0512 @ Jan 7 2012, 08:41)  Значит референсный пример от Xilinx всё таки работает? Тогда у кого лажа-то? Или вам просто религия не позволяет вдумчиво читать документацию? Xilinx пример не работает при перезаливке на работающем чипе. Это происходит не всегда. Какие-то вероятностные штуки. Документация у Xilinx почти никогда не рассматривает corner-cases. Вдумчиво читать её непомогает. У них происходить индунизация разработки и support, в примерах все работает а шаг в сторону - дрова. На вопрос - почему ? support отвечает "незнаем, делайте как у нас, у нас все работает".
Причина редактирования: убрал резкие выражения (с) модератор
|
|
|
|
|
Jan 9 2012, 06:09
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(AlphaMil @ Jan 8 2012, 17:36)  У меня в проекте, да и на отладочной плате один клок 100МГц. И этого достаточно... Из него можно получить все частоты, которые мне нужны. Возможно Вы меня не поняли - клоковый вход корки ДОЛЖЕН быть подключен к клоковому пину, там даже IBUFG сразу стоит... По этому пришлось менять код ядра, т.е. добавлять внутрь цепи сброса. Весь связанный с клоками код вынесен в отдельный модуль infrastructure.v специально для того, чтобы была некоторая свобода в выборе и способе генерации клоков. Этот модуль не входит в состав корки враппера, но он входит в состав example_design, так как без него пример работать не будет. Вам никто не запрещает сделать так, что весь дизайн будет работать от 100МГц - возможно даже удастся обойтись всего одной PLL для этого. Но составители примеров Xilinx не знают об этом вашем уникальном пожелании, поэтому они делают так чтобы всё работало на большинстве демоплаточек с минимальными имзменнениями в коде (в данном случае под каждый конкретный дизайн надо только лишь UCF поправить). И наконец для того, чтобы была некоторая свобода в том,как и где генерировать нужные клоки, они выносят из состава враппера наружу, в отдельный модуль, все клоковые дела для того, чтобы вам не пришлось лезть глубоко внутрь коры с целью что-то поменять в клоках.Доступно объясняю? Сброс, повторяю, этому дизайну необходим отдельный, и (желательно) никак не завязанный на выходные клоки с ПЛЛки, потому что если пллка перестанет генерить клок (такое бывает, напрмер, когда на входе у неё клок умирает), то и сброс работать не сможет - получается deadlock. Кроме того, по сбросу автоматически происходит перекалибровка задержек, его можно использовать для принудительной перекалибровки если к примеру темепература сильно ушла в соторону от номинала.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|