Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: странный сбой
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
spashok2
Подскажите пожалуйста, если кто сталкивался вот с каким вопросом.
Разработал устройство на Spartan 2 достаточно долгое время оно корерктно работало.
Некоторое время назад заказчик поменял завод, где он заказывает печатные платы.
Так вот на этих новых платах устройство стало работать со сбоями.
Сбой смешной - сбоит 1 бит на 256 кб.

Т.е. схемотехника одна и таже, детали одни и те же(в качестве эксперимента даже полностью переставлял датели со старой платы на новую), только сами печатные платы разные.

Суть устройства - сбор данных с PCI шины.

Начал изучать причину сбой, устаносил что данные бьются в одном из триггеров.
Я поставил компаратор на входе и выходе триггера и передаю в устройство заданный шаблон и смотрю на оссциллографе. Так вот на входе триггера данные корректны - на выходе нет. Бьется один из битов!

Заполненоость кристалла 99%. Установил требуемые констейны, при разводке получаю сообщение что они не выполнены. От требуемых отличаются более чем в 2,5 раза. Плюс тригер с которого данне идут на триггер, где и наблюдается сбой, тактирован второй частотой, которая заведена НЕ через GCLK.

Это все конечно ошибки и достаточно грубые. Про метастабильность я знаю.
Но ведь данные бьются в тригере на входе которого они корректные задолго до момента защелкивания. Я все никак не могу понять причину этого. Как такое может быть.

Задача осоложняется еще тем, что вероятность появления ошибки зависит от разводки.
И кроме того основной момент - устройство достаточно долго работало и было произведено несколько тысяч экземпляров.

Вот такой интересный момент - новая печатная плата - значительно качественней предыдущей.

Если кто-то может что-то подсказать по этому поводу, буду очень признателен.
litv
Делают же люди платы да еще PCI! Такое часто бывало даже у тех у кого ВСЕ констрейны выполнялись, и один клок у тактового. У Вас все еще хуже. Вообще дело мертвое. Надо переходить например на Sparatan 3e. Правильно делать тактовые входы.
Теперь два пути .
1) размещать этот триггер во Flooplаnner пока не заработает.
2) ставить констрейны только на цепи окружающие этот триггер.
3) Попробовать синтез в Synplify Pro - это если все делали раньше в XST.
andrew_b
Цитата(spashok2 @ Jan 8 2008, 19:16) *
Плюс тригер с которого данне идут на триггер, где и наблюдается сбой, тактирован второй частотой, которая заведена НЕ через GCLK.
Если этот сигнал пропущен через тактовый буфер, то скорее всего дело не в этом.
EvgenyNik
Ставлю на:
Изменилось волновое сопротивление (производитель плат другой) в цепях тактирования и в сигнале клока появилась "колебанка", которая иногда воспринимается, как двойной фронт.
У Вас и без того потеря времени, как я понимаю, но попробуйте логикой запретить триггеру защёлкиваться через малое время после предыдущего защёлкивания.
mse
Не понял...Изменился производитель или топология? Если топология, то пусть тупо копируют эталонную и не парятся, бо лучшее - враг хорошего. А вот если поменяли Резонит на Тепро, например, то тут точно, надо в консерватории менять чего-нить. ;О)
spashok2
Изменился только производитель. Топология осталась та же.
Т.е. визуально платы - точные копии.
Элементы точно ни при чем, т.к. полностью менял.
Кстати spartanы тоже менял, т.к. предположил что дело в бракованной серии.
Перейти на spatan 3e нет возможности, т.к. заказчик уже закупил достаточно большое число spartan 2 для этого изделия. Новых плат тоже около 1000. Т.е. надо как-то решить вопрос в рамках существующих условий.
Я просто не могу понять ЧТО может быть причиной такого поведения.
Я думал помехи, но используются 99% IO остальные - посажены на землю.
В общем пока еще проблема не решена, в данный момент пробую Ваши предложения (Большое спасибо за них).
AsJohnAs
Ну может дейстивительно попробывать переместить этот сигнал на другой тригер... (в UCF с помощью LOC) Или еще один вариант если как было сказано сигнал меняется не очень быстро указать в UCF что эта нога медленная.
Вообщем тут надо долго эксперементировать....
spashok2
Я тут для эксперимента вторую тактовую (ну которая через обычный порт заведена) завел через свободный тактовый вход. А сам проект не трогал. Только вывод переназничил.
Вероятность возникновения ошибки уменьшилась значительно.
Стала 1 бит на 150 Гб!!! Но ошибка не исчезла.
Т.е. вот это некореркное тактирование очень сильно влияет.
Но беда в том, что изменять топологию платы нельзя.
Буду экпериментировать с тем, что есть.
EvgenyNik
Цитата
Изменился только производитель. Топология осталась та же.

Значит в той топологии уже что-то было на грани, а сейчас по микронам эта грань преодолелась.
DmitryR
Цитата(spashok2 @ Jan 9 2008, 11:57) *
Я просто не могу понять ЧТО может быть причиной такого поведения.

Причин может быть масса. Для того и придуманы правила дизайна, чтобы таких гемморов не случалось.
Теперь что делать: обобщим мысль предыдущего оратора.
Берем разводку ПЛИС, что на старой плате работает, а на новой - нет. Ставим старые детали на новую плату, рядом кладем старую плату, подаем одинаковые воздействия и поножечно сравниваем сигналы на ПЛИС. Находим различия, от них пляшем.
LeonY
Цитата(DmitryR @ Jan 9 2008, 13:29) *
Причин может быть масса. Для того и придуманы правила дизайна, чтобы таких гемморов не случалось.
Теперь что делать: обобщим мысль предыдущего оратора.
Берем разводку ПЛИС, что на старой плате работает, а на новой - нет. Ставим старые детали на новую плату, рядом кладем старую плату, подаем одинаковые воздействия и поножечно сравниваем сигналы на ПЛИС. Находим различия, от них пляшем.

Попробовать можно, но гарантии результатов - никакой. В таких ситуациях почти ничего предсказать нельзя. К примеру совет "и поножечно сравниваем сигналы на ПЛИС" при тыканьи осцилографом может иметь 2 эффекта и оба отрицательных: 1) "старая-работающая" плата может перестать работать; 2) "новая-неработающая" плата заработает;

С эффектом, аналогичным второму недавно столкнулся - отлаживали NIOS софт для SPI. При отладке, ессесно, подоткнули логический анализатор. Все успешно отладили, отключили анализатор - все умерло. Тыкаешь осцилографом (благо ножек мало) - пашет, убираешь - мертвое. Одно только выявили - чего-то неправильно на сигнале даннах от памяти к FPGA. Стали играться - вешать конденсаторы (не помогло), PullUp (не помогло), а вот PullDown - помогло. Как PullDown может имитировать осцилограф - не понимаю, но работает crying.gif
mse
Ну, блин...Попробуй наоборот, добиться неработоспособности, тыкаясь в разные места. Мож это как-то поможет определиться?
И этта...был случай - сваяли образец. Испытали, всё путём. Готовим ещё - швах. Оказалось, что пользовали электролиты одного производителя, а потом - другого. Оказалось, что у первого обычные электролиты имели характеристики, близкие к low ESR. А у второго - честные обычные. Хотя что там Кетай, что там. ;О)
spashok2
Большое спасибо за такое количество советов. Еще поизучаю проблему.
Будут новые данные - напишу.
sazh
Цитата(spashok2 @ Jan 8 2008, 19:16) *
Суть устройства - сбор данных с PCI шины.

Начал изучать причину сбой, устаносил что данные бьются в одном из триггеров.
Я поставил компаратор на входе и выходе триггера и передаю в устройство заданный шаблон и смотрю на оссциллографе. Так вот на входе триггера данные корректны - на выходе нет. Бьется один из битов!

Заполненоость кристалла 99%. Установил требуемые констейны, при разводке получаю сообщение что они не выполнены. От требуемых отличаются более чем в 2,5 раза. Плюс тригер с которого данне идут на триггер, где и наблюдается сбой, тактирован второй частотой, которая заведена НЕ через GCLK.

Это все конечно ошибки и достаточно грубые. Про метастабильность я знаю.
Но ведь данные бьются в тригере на входе которого они корректные задолго до момента защелкивания. Я все никак не могу понять причину этого. Как такое может быть.

Задача осоложняется еще тем, что вероятность появления ошибки зависит от разводки.
И кроме того основной момент - устройство достаточно долго работало и было произведено несколько тысяч экземпляров.

Вот такой интересный момент - новая печатная плата - значительно качественней предыдущей.

Если кто-то может что-то подсказать по этому поводу, буду очень признателен.


Так ведь это ни о чем не говорит.
Какие частоты. констрейны чего. В мегагерцах или наносекундах. Какова разрядность регистра.
Почему сбоит один бит этого регистра.
Почему от разводки зависит. (Если клок на входе не коротит в новой плате)
Приведите описания этой части схемы.
spashok2
Первая чатота 70 Мг. Вторая 33Мгц.
Констейн задан общий в виде 70 Мгц (соответвует ~14 нс). После разводки получил сообщение что реальное значние ~ 28нс.
Регистр 32 разряда.
Почему сбоит один бит - это и есть суть вопроса.
Мое предположение - особенность разводки внутри кристалла линии именно этого бита.
Почему зависит от разводки - пока еще сам не понял.
sazh
Цитата(spashok2 @ Jan 9 2008, 17:29) *
Первая чатота 70 Мг. Вторая 33Мгц.
Констейн задан общий в виде 70 Мгц (соответвует ~14 нс). После разводки получил сообщение что реальное значние ~ 28нс.
Регистр 32 разряда.
Почему сбоит один бит - это и есть суть вопроса.
Мое предположение - особенность разводки внутри кристалла линии именно этого бита.
Почему зависит от разводки - пока еще сам не понял.


Если у вас два клоковых домена. то и констрейнить наверно нужно оба.
Если кристалл тянет системную частоту 70 мГц, и контроллер PCI реализован мегафункцией (clk 33
только на fpga),
нужно корректно перейти из клокового домена 70 в клоковый домен 33.
По сути это селектор адреса с регистровыми записью и чтением.
Не должно тут быть проблем.
DmitryR
Вообще как-то мы упустили один простой совет - возьмите postPAR модель да отмоделируйте при разном начальном сдвиге фаз тактовых частот. Все увидите.
spashok2
Спасибо за совет.
Попробую отмоделировать.
yes
может я чего-то не понял, но 33 и 70 МГц некратные частоты и их констрейнить (вернее переход между ними) не получицца

странно, что раньше работало...

может проблема решиться посредством синхронизатора (ну или еще одно слово для гугления metastability)

проще говоря, нужно добавить (если допустимо) еще один (два ...) триггер в цепочку
DmitryR
Цитата(yes @ Jan 10 2008, 20:43) *
может я чего-то не понял, но 33 и 70 МГц некратные частоты и их констрейнить (вернее переход между ними) не получицца

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

Цитата(yes @ Jan 10 2008, 20:43) *
странно, что раньше работало...

Правда удивительно.

Цитата(yes @ Jan 10 2008, 20:43) *
может проблема решиться посредством синхронизатора (ну или еще одно слово для гугления metastability)

проще говоря, нужно добавить (если допустимо) еще один (два ...) триггер в цепочку

Добавление второго регистра в принимающем домене защищает от звона принимающей логики, когда первый триггер попадает в метастабильное состояние, и никак не влияет на правильность принимаемых данных. Там широкий регистр, я так понял, и просто добавление триггеров не спасет: шину из одного домена в другой можно передать, только используя механизмы обратной связи (acknowledge) или FIFO, если только не счетчик Грея передается.
yes
Цитата(DmitryR @ Jan 11 2008, 10:43) *
данных. Там широкий регистр, я так понял, и просто добавление триггеров не спасет: шину из одного домена в другой можно передать, только используя механизмы обратной связи (acknowledge) или FIFO, если только не счетчик Грея передается.


sorry, я не совсем точно сказал

но можно и без обратной связи, если времянка фиксирована и известна

например, выходные данные удерживать несколько тактов, а сигнал готовности задержать и т.п.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.