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

Помогите запустить MCB

Здравствуйте! Есть ПЛИС Spartan-6 xc6slx150-3fgg484 и внешняя память DDR3 MT41J64M16LA-187E. Память подключена к третьему банку ПЛИС. Частота работы с памятью 300 МГц.

 

В ISE12.4 сделал проект контроллера памяти с помощью MIG. В проекте оставил один двунаправленный порт х32. Взял example_design. Отмоделировал - все в порядке. А вот при тестировании в железе начались проблемы, которые никак не удается победить. Проблемы двух типов:

 

1) При чтении пачки данных одно из данных застревает на выходе FIFO на несколько тактов. При этом часть данных теряется. Эта ситуация показана на картинке error1. Ошибка повторяется время от времени в процессе тестирования. Данная ошибка, как выяснилось, зависит от частоты работы. На 250 МГц ее вероятность намного меньше, а на 200 МГц она вообще пропадает. Также ситуация стала лучше после того, как поменял настройку Unused IOB Pins = Float на Pull Down в свойствах генерации программного файла.

 

2) Начиная с какого-то момента, контроллер просто перестает выполнять новые запросы. В результате переполняется командное FIFO и тест останавливается. Вероятность этой ошибки зависит от диапазона тестируемых адресов. Если значение параметра C3_HW_TESTING = "FALSE", то встречается она очень редко. Если же поставить "TRUE" - ошибка происходит тут же при начале тестирования. Такая ситуация повторяется на любой частоте от 200 до 300 МГц.

 

В чем тут может быть дело?

post-18747-1299055418_thumb.jpg

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


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

С такими платами обычно поставляется reference design и тест.

Вообще-то, они пишут про 400 MHz.

 

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


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

С такими платами обычно поставляется reference design и тест.

Да, действительно, есть и reference design и тест. Их тест тоже выдает ошибку, но понять что она значит довольно трудно. Документация у них, мягко говоря, очень скудная. А удовольствие ковыряться в чужом коде я оставил себе напоследок, решив, что проще будет самому сделать. Ведь на первый взгляд ничего сложного... :rolleyes:

Вообще-то, они пишут про 400 MHz.

Если можно работать с памятью на 400, то и на 300 можно. Ограничений здесь ни со стороны памяти, ни со стороны ПЛИС я не вижу. Кстати, reference design у них как раз на 300 работает.

 

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


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

Так он работает или выдает ошибку?

Запросто может быть что-то физически негодным и плату надо менять.

Она у вас одна? Другой экземпляр не пробовали?

Я не уверен, что контроллер в спартане поддерживает 400MHz - надо взглянуть в документацию.

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


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

Здравствуйте! Есть ПЛИС Spartan-6 xc6slx150-3fgg484 и внешняя память DDR3 MT41J64M16LA-187E. Память подключена к третьему банку ПЛИС. Частота работы с памятью 300 МГц.

 

В ISE12.4 сделал проект контроллера памяти с помощью MIG. В проекте оставил один двунаправленный порт х32. Взял example_design. Отмоделировал - все в порядке. А вот при тестировании в железе начались проблемы, которые никак не удается победить. Проблемы двух типов:

 

1) При чтении пачки данных одно из данных застревает на выходе FIFO на несколько тактов. При этом часть данных теряется. Эта ситуация показана на картинке error1. Ошибка повторяется время от времени в процессе тестирования. Данная ошибка, как выяснилось, зависит от частоты работы. На 250 МГц ее вероятность намного меньше, а на 200 МГц она вообще пропадает. Также ситуация стала лучше после того, как поменял настройку Unused IOB Pins = Float на Pull Down в свойствах генерации программного файла.

 

2) Начиная с какого-то момента, контроллер просто перестает выполнять новые запросы. В результате переполняется командное FIFO и тест останавливается. Вероятность этой ошибки зависит от диапазона тестируемых адресов. Если значение параметра C3_HW_TESTING = "FALSE", то встречается она очень редко. Если же поставить "TRUE" - ошибка происходит тут же при начале тестирования. Такая ситуация повторяется на любой частоте от 200 до 300 МГц.

 

В чем тут может быть дело?

Судя по картинкам - диаграммы вроде правильные у вас. Сигнал контроллера init_done вскакивает в 1 после сброса? А то может ваш контроллер калибровку пройти не смог, а вы его командами записи - чтения насилуете?

 

P.S. Оффтопик : когда я смотрю на подобные "лыжи" ( так называют платы монстроидальных размеров) - мне становится страшно... Неужели существуют задачи, которые можно решить только с помощью таких монстров? И при этом нагрузить все 12 спартанов с их памятью? Что-то я сомневаюсь...

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


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

Тест, который поставляется вместе с платой выдает ошибку, которую мы понять не можем, так как нет нормального описания к этому тесту. Плата у нас одна, к сожалению. Но там 12 ПЛИС и все ведут себя примерно одинаково. Хотя можно среди них выделить те, которые работают чуть лучше остальных. Контроллер в спартане 400 поддерживает при выполнении определенных условий (MIG об этом говорит).

 

Просто я думал, может у кого было что-нибудь подобное...

 

Судя по картинкам - диаграммы вроде правильные у вас. Сигнал контроллера init_done вскакивает в 1 после сброса? А то может ваш контроллер калибровку пройти не смог, а вы его командами записи - чтения насилуете?

 

Что за сигнал init_done? Там есть сигнал calib_done. Он в 1, таким образом, я понимаю, что калибровка завершилась удачно.

 

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


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

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

Еще можно послать письмо об ошибке производителю платы - чего стесняться-то?

 

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


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

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

Сбой заключается в том, что одно из данных в потоке "залипает" на выходе FIFO. Вследствие этого часть данных теряется. И на максимальной, и на минимальной частоте это выглядит одинаково. Побитовых сбоев нет - то что пишу, то и читаю обратно. Если не лень, можете глянуть wlf файл. Я его получил из vcd файла, который вытащил из ChipScopa. Ошибка происходит в 343 нс и в 382 нс.

Еще можно послать письмо об ошибке производителю платы - чего стесняться-то?

Письмо отправили - отвечать не торопятся.

VCD_WLF.rar

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


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

Здравствуйте! Есть ПЛИС Spartan-6 xc6slx150-3fgg484 и внешняя память DDR3 MT41J64M16LA-187E. Память подключена к третьему банку ПЛИС. Частота работы с памятью 300 МГц.

 

В ISE12.4 сделал проект контроллера памяти с помощью MIG. В проекте оставил один двунаправленный порт х32. Взял example_design. Отмоделировал - все в порядке. А вот при тестировании в железе начались проблемы, которые никак не удается победить. Проблемы двух типов:

 

1) При чтении пачки данных одно из данных застревает на выходе FIFO на несколько тактов. При этом часть данных теряется. Эта ситуация показана на картинке error1. Ошибка повторяется время от времени в процессе тестирования. Данная ошибка, как выяснилось, зависит от частоты работы. На 250 МГц ее вероятность намного меньше, а на 200 МГц она вообще пропадает. Также ситуация стала лучше после того, как поменял настройку Unused IOB Pins = Float на Pull Down в свойствах генерации программного файла.

 

2) Начиная с какого-то момента, контроллер просто перестает выполнять новые запросы. В результате переполняется командное FIFO и тест останавливается. Вероятность этой ошибки зависит от диапазона тестируемых адресов. Если значение параметра C3_HW_TESTING = "FALSE", то встречается она очень редко. Если же поставить "TRUE" - ошибка происходит тут же при начале тестирования. Такая ситуация повторяется на любой частоте от 200 до 300 МГц.

 

В чем тут может быть дело?

 

 

Не из этой оперы?

http://www.xilinx.com/support/answers/35978.htm

 

P.S.

и еще

http://www.xilinx.com/support/answers/33566.htm

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


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

Не из этой оперы?

http://www.xilinx.com/support/answers/35978.htm

У меня ISE 12.4. В нем как бы обещали поправить уже этот глюк.

И это не про меня. После загрузки конфигураций сброс подавал несколько раз - ситуация не меняется.

 

 

Хочу заодно спросить. Есть ли у кого-нибудь положительный опыт работы со связкой spartan6 + ddr3 ?

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


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

может дело не при чтении вовсе, а, например, когда идет режим записи данных, они снаружи переключаются на следующие, а уже в железо не записываются, какие-нибудь коллизии или задержки или недоустановка адресов например

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


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

Да, данные перестают меняться, посмотрел первое из мест.

Может быть и проблема записи.

 

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


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

А мне кажется что проблема там с чтением. Данные всегда теряются пакетами, насколько я заметил (1 пакет = 4 слова х32 = 8 слов х16). То есть память почему-то не понимает команду чтения, на шине стоит старая информация, которую контроллер всасывает и отдает мне.

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


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

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

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

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

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

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

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

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

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

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