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

 
 
> Spartan 6 и его внутреннее ФИФО (не дружат) (((
ovs_pavel
сообщение Nov 30 2012, 05:37
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



День добрый коллеги. Столкнулся со следующей проблемой при использовании ФИФО 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) прекрасно работают. Здесь я что-то не понимаю. Нет у кого каких либо мыслей??
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
Boris_TS
сообщение Nov 30 2012, 10:28
Сообщение #2


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(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 - игнорировался, а какие еще были глюки уже и не упомню.
Go to the top of the page
 
+Quote Post
ovs_pavel
сообщение Nov 30 2012, 10:51
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



Цитата(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 сейчас с наименьшими замеченными глюками?
Go to the top of the page
 
+Quote Post
akorud
сообщение Nov 30 2012, 12:43
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Мне в свое время помогло добавить счетчики заполнения ФИФО и по ним смотреть что на самом деле происходит. Правда у меня проект с Microblaze и можно было легко их прочитать. Проблем описываемых Вами ни разу не наблюдал (S6), все проблемы из-за кривой логики. Например read_enable все время был высокий и данные вибрасывались из ФИФО прямо во время записи.
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Nov 30 2012, 13:47
Сообщение #5


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(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
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Nov 30 2012, 20:24
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



В отличие от virtex в spartan нет аппаратных fifo, и никаких errata быть не может. Если дело в корке, то можно обновить софт, а вообще фифо вещь простая, наверное, у каждого есть любимая реализация фифо на рассыпухе, зачем нужен тормоз в виде логикоре?
Go to the top of the page
 
+Quote Post
akorud
сообщение Nov 30 2012, 20:52
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 203
Регистрация: 12-11-10
Из: Poland
Пользователь №: 60 842



Цитата(dmitry-tomsk @ Nov 30 2012, 21:24) *
зачем нужен тормоз в виде логикоре?

затем что "time to market". У нас например нет любимой реализации, логикоре работает отлично и сразу.
Go to the top of the page
 
+Quote Post
ovs_pavel
сообщение Dec 1 2012, 15:29
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



Спасибо откликнувшимся. Вчера вместо одного из ФИФО - того у которого запись на 20 а чтение на 118, использовал двухпортовое ОЗУ (запись по WE, чтение просто по изменению на шине адреса). Несколько раз прошивал ПЛИС все ОК, никаких ошибок не возникало. Единственное отличие - при построении ОЗУ указал когену использовать не BlockRAM, а distributedRAM. Буду теперь играться с первым ФИФО, попробую тоже переделать на двухпортовое ОЗУ. Может компилятор так разведет нормально.
Go to the top of the page
 
+Quote Post
Flood
сообщение Dec 1 2012, 16:18
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 702
Регистрация: 8-06-06
Пользователь №: 17 871



Хотя 12.3 (вроде) вполне функционален для 6-й серии, может быть, на всякий случай попробовать перейти на ISE 14.3?
Go to the top of the page
 
+Quote Post

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

 


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


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