Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Spartan 6 и его внутреннее ФИФО (не дружат) (((
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
ovs_pavel
День добрый коллеги. Столкнулся со следующей проблемой при использовании ФИФО 6-го спартана (xc6slx45 - 3fgg676).

В спартане использую блоки ФИФО, которые пишутся и читаются на разных частотах. При построении ФИФО визардом применял следующие установки:
1. Indepentend Clocks, Block RAM.
2. First World Fall Through.

Частота записи -125, чтения - 118. Проблема заключается в следующем - после того, как заканчиваю запись в ФИФО, выставляю признак окончания записи и начинаю читать данные. Но из ФИФО всегда считывается только 1-ое записанное слово данных. Причем ситуация неустойчивая, зависит от перекомпиляции проекта. Причем проект СИНХРОННЫЙ, все подбито к сеткам (по записи и чтению; асинхронность не признаю в принципе). Я бы может и забил на это дело, перекомпилял бы проект и все.

Но вчера понадобилось встроить еще одно ФИФО (для другого интерфейса). При этом частота записи - 20, чтения - 118. И ситуация повторилась вновь, уже на этом ФИФО.

Может это быть как-то связано с DCM-модулями спартана (и частота 118 МГц, и 20 МГц формируются с помощью DCM). На самом деле не совсем понятно. Это стандартная практика перевода данных с одной частоты на другую и проблем быть не должно. Более того Virtex-2, Virtex-2 Pro, Virtex-5, Stratix1(2) прекрасно работают. Здесь я что-то не понимаю. Нет у кого каких либо мыслей??
Boris_TS
Цитата(ovs_pavel @ Nov 30 2012, 09:37) *
Может это быть как-то связано с DCM-модулями спартана (и частота 118 МГц, и 20 МГц формируются с помощью DCM). На самом деле не совсем понятно. Это стандартная практика перевода данных с одной частоты на другую и проблем быть не должно. Более того Virtex-2, Virtex-2 Pro, Virtex-5, Stratix1(2) прекрасно работают. Здесь я что-то не понимаю. Нет у кого каких либо мыслей??

Есть мысли: в RAMB(FIFO) в Virtex-6/Spartan-6 что-то (ECC ?) перемудрили, поэтому они работают корректно не во всех возможных режимах, со временем в документации (UG) появились дополнения, описывающие эти проблемы, а в соответствующих Errata появились записи о кривизне. Ряд несуразностей латались программно в ISE/CoreGen'е (поэтому появлялась еще и зависимость от версии среды). Естественно, самые неприятные вещи выползают при независимых тактовых.
Некоторые решения, которые у нас работали в Virtex-5 пришлось несколько переделать, чтобы они заработали в Virtex-6, но т.к. мы с этим долбались более 1.5 лет назад, то уже плохо помнится, где именно и какие были засады - помню только, что сначала они выползли в Errata, а затем и в соответствующие UG'и.

P.S. Проверьте, что именно выставил на RAMB CoreGen, и какие есть замечания на эти настройки в UG/Errata. Если Вы пользуетесь старой версией ISE (<12.4), то потребуется её обновить. Также были косяки связанные с игнорированием "ранними" (до 13.2 ? 14.3 ???) версиями ISE некоторых временных путей для RAMB. Timing на RAMB Reset точно до каких-то версий ISE - игнорировался, а какие еще были глюки уже и не упомню.
ovs_pavel
Цитата(Boris_TS @ Nov 30 2012, 13:28) *
Есть мысли: в RAMB(FIFO) в Virtex-6/Spartan-6 что-то (ECC ?) перемудрили, поэтому они работают корректно не во всех возможных режимах, со временем в документации (UG) появились дополнения, описывающие эти проблемы, а в соответствующих Errata появились записи о кривизне. Ряд несуразностей латались программно в ISE/CoreGen'е (поэтому появлялась еще и зависимость от версии среды). Естественно, самые неприятные вещи выползают при независимых тактовых.
Некоторые решения, которые у нас работали в Virtex-5 пришлось несколько переделать, чтобы они заработали в Virtex-6, но т.к. мы с этим долбались более 1.5 лет назад, то уже плохо помнится, где именно и какие были засады - помню только, что сначала они выползли в Errata, а затем и в соответствующие UG'и.

P.S. Проверьте, что именно выставил на RAMB CoreGen, и какие есть замечания на эти настройки в UG/Errata. Если Вы пользуетесь старой версией ISE (<12.4), то потребуется её обновить. Также были косяки связанные с игнорированием "ранними" (до 13.2 ? 14.3 ???) версиями ISE некоторых временных путей для RAMB. Timing на RAMB Reset точно до каких-то версий ISE - игнорировался, а какие еще были глюки уже и не упомню.


Огромный thanks. А то я уже начал сомневаться. Я сейчас вместо блока ФИФО решил попробовать использовать блоки двухпортового ОЗУ. Конечно придется лепить и следить за двумя счетчиками, но может результат будет другой. Ну и, соответственно, попробую поискать еррату. Да видимо и версию надо обновить. Сижу на 12.3. А эррату искать именно на Spatran 6? Может еще раз "ткнете" куда копать именно.


И если не сложно, такт сказать вдогонку вопрос. Раньше "сидел" на 9-ке. Потом перешел на 12.3. Вроде как проблем не было до 6-го спартана. Какая версия ISE сейчас с наименьшими замеченными глюками?
akorud
Мне в свое время помогло добавить счетчики заполнения ФИФО и по ним смотреть что на самом деле происходит. Правда у меня проект с Microblaze и можно было легко их прочитать. Проблем описываемых Вами ни разу не наблюдал (S6), все проблемы из-за кривой логики. Например read_enable все время был высокий и данные вибрасывались из ФИФО прямо во время записи.
Boris_TS
Цитата(ovs_pavel @ Nov 30 2012, 14:51) *
А эррату искать именно на Spatran 6? Может еще раз "ткнете" куда копать именно.

Да, а еще и именно на Ваш Spatran 6. Он же может быть какой-нибудь ES...Spartan-6 Documentation Просмотрите в errata (например en148) раздел Block RAM - может там есть Ваш случай.

Также можно порыться в этих мусорниках:
Design Advisory Master Answer Record for Spartan-6 FPGA
Spartan-6 - 12.4 Software Known Issues related to the Spartan-6 FPGA
Spartan-6 - 13.4 Known Issues Related to Spartan-6 FPGA
ISE Design Suite 12 - Known Issues
ISE Design Suite 13 - Known Issues
ISE Design Suite 14 - Known Issues

Может быть этот документ немного поможет:
Block Memory Generator v6.3 - Release Notes and Known Issues for ISE Design Suite 13.4

Цитата(ovs_pavel @ Nov 30 2012, 14:51) *
И если не сложно, такт сказать вдогонку вопрос. Раньше "сидел" на 9-ке. Потом перешел на 12.3. Вроде как проблем не было до 6-го спартана. Какая версия ISE сейчас с наименьшими замеченными глюками?

Для Virtex-6 мы применяем 12.4, 13.2 и 13.4 - все имеют свои проблемы. 14.1 и 14.2 содержали бооольшие косяки и до выхода 14.3 нами было решено ими не пользоваться.

P.S. Virtex-6 всегда был более любибмым продуктом, чем Spartan-6. И, возможно, еще не все глюки официально заявлены для Spartan-6. Для Virtex-6 официально заявлено больше проблем с RAMB: Design Advisory Master Answer Record for Virtex-6 FPGA
dmitry-tomsk
В отличие от virtex в spartan нет аппаратных fifo, и никаких errata быть не может. Если дело в корке, то можно обновить софт, а вообще фифо вещь простая, наверное, у каждого есть любимая реализация фифо на рассыпухе, зачем нужен тормоз в виде логикоре?
akorud
Цитата(dmitry-tomsk @ Nov 30 2012, 21:24) *
зачем нужен тормоз в виде логикоре?

затем что "time to market". У нас например нет любимой реализации, логикоре работает отлично и сразу.
ovs_pavel
Спасибо откликнувшимся. Вчера вместо одного из ФИФО - того у которого запись на 20 а чтение на 118, использовал двухпортовое ОЗУ (запись по WE, чтение просто по изменению на шине адреса). Несколько раз прошивал ПЛИС все ОК, никаких ошибок не возникало. Единственное отличие - при построении ОЗУ указал когену использовать не BlockRAM, а distributedRAM. Буду теперь играться с первым ФИФО, попробую тоже переделать на двухпортовое ОЗУ. Может компилятор так разведет нормально.
Flood
Хотя 12.3 (вроде) вполне функционален для 6-й серии, может быть, на всякий случай попробовать перейти на ISE 14.3?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.