Nosss 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба Здравствуйте! Есть ПЛИС 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 МГц. В чем тут может быть дело? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба Что за плата? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nosss 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба Плата dini-group DNBFC_S12_PCIe. Можно здесь посмотреть на этого зверя http://www.dinigroup.com/new/DNBFC_S12_PCIe.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба С такими платами обычно поставляется reference design и тест. Вообще-то, они пишут про 400 MHz. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nosss 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба С такими платами обычно поставляется reference design и тест. Да, действительно, есть и reference design и тест. Их тест тоже выдает ошибку, но понять что она значит довольно трудно. Документация у них, мягко говоря, очень скудная. А удовольствие ковыряться в чужом коде я оставил себе напоследок, решив, что проще будет самому сделать. Ведь на первый взгляд ничего сложного... :rolleyes: Вообще-то, они пишут про 400 MHz. Если можно работать с памятью на 400, то и на 300 можно. Ограничений здесь ни со стороны памяти, ни со стороны ПЛИС я не вижу. Кстати, reference design у них как раз на 300 работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба Так он работает или выдает ошибку? Запросто может быть что-то физически негодным и плату надо менять. Она у вас одна? Другой экземпляр не пробовали? Я не уверен, что контроллер в спартане поддерживает 400MHz - надо взглянуть в документацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба Здравствуйте! Есть ПЛИС 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 спартанов с их памятью? Что-то я сомневаюсь... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nosss 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба Тест, который поставляется вместе с платой выдает ошибку, которую мы понять не можем, так как нет нормального описания к этому тесту. Плата у нас одна, к сожалению. Но там 12 ПЛИС и все ведут себя примерно одинаково. Хотя можно среди них выделить те, которые работают чуть лучше остальных. Контроллер в спартане 400 поддерживает при выполнении определенных условий (MIG об этом говорит). Просто я думал, может у кого было что-нибудь подобное... Судя по картинкам - диаграммы вроде правильные у вас. Сигнал контроллера init_done вскакивает в 1 после сброса? А то может ваш контроллер калибровку пройти не смог, а вы его командами записи - чтения насилуете? Что за сигнал init_done? Там есть сигнал calib_done. Он в 1, таким образом, я понимаю, что калибровка завершилась удачно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба Покажите, если не лень, какие данные пишутся и читаются на минимальной частоте, на которой сбои еще происходят и на максимальной. По данным можно попытаться угадать, что за глюк. Еще можно послать письмо об ошибке производителю платы - чего стесняться-то? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nosss 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба Покажите, если не лень, какие данные пишутся и читаются на минимальной частоте, на которой сбои еще происходят и на максимальной. По данным можно попытаться угадать, что за глюк. Сбой заключается в том, что одно из данных в потоке "залипает" на выходе FIFO. Вследствие этого часть данных теряется. И на максимальной, и на минимальной частоте это выглядит одинаково. Побитовых сбоев нет - то что пишу, то и читаю обратно. Если не лень, можете глянуть wlf файл. Я его получил из vcd файла, который вытащил из ChipScopa. Ошибка происходит в 343 нс и в 382 нс. Еще можно послать письмо об ошибке производителю платы - чего стесняться-то? Письмо отправили - отвечать не торопятся. VCD_WLF.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LV26 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба Здравствуйте! Есть ПЛИС 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nosss 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба Не из этой оперы? http://www.xilinx.com/support/answers/35978.htm У меня ISE 12.4. В нем как бы обещали поправить уже этот глюк. P.S. и еще http://www.xilinx.com/support/answers/33566.htm И это не про меня. После загрузки конфигураций сброс подавал несколько раз - ситуация не меняется. Хочу заодно спросить. Есть ли у кого-нибудь положительный опыт работы со связкой spartan6 + ddr3 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
billidean 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба может дело не при чтении вовсе, а, например, когда идет режим записи данных, они снаружи переключаются на следующие, а уже в железо не записываются, какие-нибудь коллизии или задержки или недоустановка адресов например Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба Да, данные перестают меняться, посмотрел первое из мест. Может быть и проблема записи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nosss 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба А мне кажется что проблема там с чтением. Данные всегда теряются пакетами, насколько я заметил (1 пакет = 4 слова х32 = 8 слов х16). То есть память почему-то не понимает команду чтения, на шине стоит старая информация, которую контроллер всасывает и отдает мне. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться