Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Может ли FPGA частично "зависнуть" ?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Demeny
Есть плата с FPGA Xilinx Spartan-3E-500, кристалл заполнен на 98%. Логика, зашитая в FPGA, управляется процессором ARM по параллельной ISA-подобной шине. "Прошивка" давно отлажена и обкатана на огромной серии плат и никаких проблем с ней никогда не было, всё работало без проблем.
Но вот выпущен очередной релиз плат (другим производителем, но топология та же) , с которыми происходят странные вещи. На 80% плат прошивка в FPGA через какое-то время (от 15 мин до нескольких часов) частично перестаёт выполнять свои функции, как бы "зависает". Со стороны процессора всё выглядит ОК - регистры пишутся-читаются, команды отдаются, но ... логика FPGA не работает, причём только часть - другая (существенно большая часть) продолжает исправно молотить и выполнять, что требуется.
Идентичный софт на идентичной плате другого производителя (с тем же блоком питания, если что ...) молотит без проблем сутками. Потребляемый ток всеми вариантами плат не отличается, перегревов нет, напряжения питаний в норме. Сигнал DONE наличествует как до, так и после сбоя.
Я теряюсь в догадках - что тут может быть, куда копать и что смотреть ?
des00
глючащий модуль порты на выводы плиса имеет ?
Demeny
Цитата(des00 @ Feb 20 2012, 14:59) *
глючащий модуль порты на выводы плиса имеет ?

Да, имеет. После откисания части прошивки внешне (осциллографом) это выглядит так, что на те выходы, куда должны литься из FPGA данные - там тишина, как будто никаких команд по процессорной шине и не поступало, хотя команды идут непрерывно...
litv
в Chipscope то что видно?
MrYuran
Цитата(Demeny @ Feb 20 2012, 14:55) *
Я теряюсь в догадках - что тут может быть, куда копать и что смотреть ?

Гонки, глитчи.
Не помню как точно называется, 10 лет в руки не брал, но в Xilinx Foundation был режим симуляции после разводки.
С учетом реальных таймингов.
Там все спорные места обычно сразу всплывают, даже если в первоначальной симуляции (до разводки) их не было.
iosifk
Цитата(Demeny @ Feb 20 2012, 14:55) *
Но вот выпущен очередной релиз плат (другим производителем, но топология та же) , с которыми происходят странные вещи. ....
Я теряюсь в догадках - что тут может быть, куда копать и что смотреть ?

Скорее всего здесь в ПЛИСе автомат ловит наводку по входам или CDC сделано не корректно... И этот автомат становится в неизвестное или не описанное состояние из которого не прописан выход... Ну и далее он там и остается до следующего сброса...
Обычное дело...
des00
Цитата(Demeny @ Feb 20 2012, 06:14) *
Да, имеет. После откисания части прошивки внешне (осциллографом) это выглядит так, что на те выходы, куда должны литься из FPGA данные - там тишина, как будто никаких команд по процессорной шине и не поступало, хотя команды идут непрерывно...

я про входные данные. если они есть, то 99% асинхра в интерфейсах вылезла
Demeny
Цитата(litv @ Feb 20 2012, 15:54) *
в Chipscope то что видно?

Чипскоп туда, видимо, не затолкнуть (98% заполнение), да и JTAG-a на плате нет. А на похожей плате, где JTAG есть - проблемы такой нет ... wacko.gif
Цитата(iosifk @ Feb 20 2012, 16:03) *
Скорее всего здесь в ПЛИСе автомат ловит наводку по входам или CDC сделано не корректно... И этот автомат становится в неизвестное или не описанное состояние из которого не прописан выход... Ну и далее он там и остается до следующего сброса...
Обычное дело...

Да, это я понимаю... Как отловить такие наводки ?
CDC да, есть небольшой грешок (1.25 вместо 1.2), но ведь работает всё это добро на таких же платах. Начинку FPGA делал не я, исходники есть, но оставлю это на крайний случай. Она тоже проверена временем и перенесена на плату в бинарном виде.

Цитата(des00 @ Feb 20 2012, 16:04) *
я про входные данные. если они есть, то 99% асинхра в интерфейсах вылезла

Из входных данных только управление по параллельной шине, подключенной к EBI процессора, в остальном, откисающий блок занимается тем, что перекачивает данные из SDRAM в последовательный ЦАП, управление простейшее - задаётся базовый адрес, длина, даётся команда старт взводом бита в регистре, всё - данные понеслись в ЦАП. В какой-то момент, вместо ожидаемых данных (клок+дата) тишина, после этого процессор может перезаписывать новый базовый адрес, взводить команду старт и всё что угодно - это ничего не помогает.
Действительно, складывается впечатление, что именно этот автомат попал в какую-то мертвую точку.
Но почему именно на этой серии плат - вот в чём основной вопрос ? wacko.gif
Что с ними может быть не так (бракованые ПЛИС, стабилизаторы питания, кондесаторы) ?
disel
А спидгрейт у плис такой же как и всех других плат, или изменился?
des00
Цитата(Demeny @ Feb 20 2012, 06:57) *
Но почему именно на этой серии плат - вот в чём основной вопрос ? wacko.gif
Что с ними может быть не так (бракованые ПЛИС, стабилизаторы питания, кондесаторы) ?

вы же сами сказали, была переразводка. например один сигнал управления, раньше был позже другого, а тут они поменялись %)


Цитата(disel @ Feb 20 2012, 07:05) *
А спидгрейт у плис такой же как и всех других плат, или изменился?

иначе бы они старые прошивки не загрузили.
disel
Цитата(des00 @ Feb 20 2012, 16:06) *
иначе бы они старые прошивки не загрузили.


Это если поставили с более медленным спидргейтом. Я не про то. Если спидгрей стал быстрее, то при наличии где то в схеме асинхронного управления это тоже может привесит к подобному поведению.
des00
Цитата(disel @ Feb 20 2012, 07:10) *
Это если поставили с более медленным спидргейтом. Я не про то. Если спидгрей стал быстрее, то при наличии где то в схеме асинхронного управления это тоже может привесит к подобному поведению.

хмм, если мне память не изменяет у них IDCODE будут разные и программатор, без хака, не даст прошить плисину.
disel
Цитата(des00 @ Feb 20 2012, 16:12) *
хмм, если мне память не изменяет у них IDCODE будут разные и программатор, без хака, не даст прошить плисину.


Ну я конечно зуб не дам насчет IDCODE, хотя мне казалось что от спидгрейда он не зависит. Но в принципе более свежие микросхемы могут быть более быстрыми. Что при налиичии асинхронщины может вызвать такие проблемы.
Demeny
Цитата(des00 @ Feb 20 2012, 17:06) *
вы же сами сказали, была переразводка. например один сигнал управления, раньше был позже другого, а тут они поменялись %)

Когда-то да, была переразводка, но не ПЛИСовой части, она осталась той же. Но с тех пор уже выпущена небольшая серия плат, на которых этой проблемы нет.
Короче говоря, передо мной две платы разных производителей (соотв. разная закупка компонентов), сделаны по идентичным герберам. Одна глючит, другая - нет. Вот в чём фокус.
Shivers
Я бы взял старую плату и перепаял с нее ПЛИС на новую глючную плату. Если не заработает, то проблемы в новой плате (найти три отличия, помеху или еще что), а если все ОК будет, то претензии к модели, особенно если в дизайне много асинхронности.

Что касается вопроса, как он задан: у меня альтеры горели "частично", т.е. скажем в нее грузилась прошивка и работала, но один i/o банк при этом был всегда в закоротке; либо другой случай из жизни - прошивка грузится, но не работает и ПЛИС греется как утюг (предположительно - внутренняя закоротка в цепи питания нескольких банков i/o, но с живым житагом, памятью и интерфейсом конфигурации). Итого, гипотетически можно представить единичные случаи отказа отдельных узлов ПЛИС. Но не в вашем случае (80% плат).
Итого, скорее всего проблема в плате.
vadimp61
Цитата(Demeny @ Feb 20 2012, 17:59) *
Когда-то да, была переразводка, но не ПЛИСовой части, она осталась той же. Но с тех пор уже выпущена небольшая серия плат, на которых этой проблемы нет.
Короче говоря, передо мной две платы разных производителей (соотв. разная закупка компонентов), сделаны по идентичным герберам. Одна глючит, другая - нет. Вот в чём фокус.

Перепаяйте местами плисины, и у же будет понятно, дело в плате или в плисине.
maksimp
Цитата(iosifk @ Feb 20 2012, 16:03) *
И этот автомат становится в неизвестное или не описанное состояние из которого не прописан выход... Ну и далее он там и остается до следующего сброса...

Вот это выглядит самым реалистичным. Проверьте чтобы все автоматы из всех состояний, даже из таких в которые они вроде не могут попасть, выходили в известные состояния.
Например, практикуется такое что каждое состояние кодируется "1" в своём бите. Для автомата с 4 состояниями тогда законными будут "0001", "0010", "0100", "1000". И тогда в нём нужно обязательно предусмотреть выход из состояний наподобие "0000" или "1100". Ввести дополнительные операторы else if для этого например. Не знаю как ISE, а Квартус умеет сам изменять кодирование автоматов, и в том числе в небезопасную сторону. Нужно тогда найти и отключить опцию, разрешающую изменять кодирование автоматов.
ViKo
Имел место случай, когда плата промывалась хрен знает чем (водой?), и под ПЛИСой была влага. И она не работала. Продули компрессором, повыдували лишнее - заработала.
Builder
Цитата(Demeny @ Feb 20 2012, 15:57) *
Да, это я понимаю... Как отловить такие наводки ?
CDC да, есть небольшой грешок (1.25 вместо 1.2), но ведь работает всё это добро на таких же платах. Начинку FPGA делал не я, исходники есть, но оставлю это на крайний случай. Она тоже проверена временем и перенесена на плату в бинарном виде.
Перепроверяйте всю времянку и синхронные/асинхронные стыки с внешним миром. Особенно если не Ваш проект, т.к. кто его знает что там было проверено а чего небыло. Может прошлый разработчик что-то забыл описать.
Сколько раз бывает - пришла другая например партия микрух и проек поплыл, если что-то не корректно сделано.
У Вас, чуть другие материалы и толщины ПП, чуть поехала времянка/наводки - и можно получить такой результат.
IEC
Недавно выпаивал CPLD Alteta. Шилась, все работало, за исключением одного выходного сигнала, который не мог перейти в "1". Хотя в "Z" и "0" почти нормально.
Перепаял, все заработало.
Shivers
Цитата(IEC @ Feb 21 2012, 10:13) *
Недавно выпаивал CPLD Alteta. Шилась, все работало, за исключением одного выходного сигнала, который не мог перейти в "1". Хотя в "Z" и "0" почти нормально.
Перепаял, все заработало.

Непропай вывода, обычное дело. Хорошо если корпус QFP, всегда можно пройтись чем то острым и выявить непропай. Хуже на больших ПЛИС с БГА корпусами, в этом случае помогает тест boundary scan через житаг. По идее, непропай должен на выходном контроле прямо на производстве диагностироваться с помощью тестов житаг.
Правда, если сбой на 80% плат, то вероятность такого системного непропая - ноль.
XVR
Еще можете попробовать пересинтезировать проект (исходники вроде у вас есть), задав ему реальные диапазоны напряжений питания FPGA и внешних температур. По умолчанию софт берет некие идеальные значения, которые могут не совпасть с вашими реальными.
Demeny
Цитата(maksimp @ Feb 20 2012, 20:28) *
Например, практикуется такое что каждое состояние кодируется "1" в своём бите. Для автомата с 4 состояниями тогда законными будут "0001", "0010", "0100", "1000". И тогда в нём нужно обязательно предусмотреть выход из состояний наподобие "0000" или "1100". Ввести дополнительные операторы else if для этого например. Не знаю как ISE, а Квартус умеет сам изменять кодирование автоматов, и в том числе в небезопасную сторону. Нужно тогда найти и отключить опцию, разрешающую изменять кодирование автоматов.

Можете ли вы объяснить механизм, природу этого явления - если автомат закодирован, к примеру, состояниями "0001", "0010", "0100", "1000", и нигде в проекте ему не назначается другая константа, то КАК он может оказаться в состоянии "1100" ? Если это возможно - то так далеко можно зайти, а что, если при других операциях другим сигналам будут произвольно меняться биты ? Да и не из всех алгоритмов можно безболезненно выйти, если вдруг состояние автомата стало непредвиденным.

Цитата(XVR @ Feb 21 2012, 13:11) *
Еще можете попробовать пересинтезировать проект (исходники вроде у вас есть), задав ему реальные диапазоны напряжений питания FPGA и внешних температур. По умолчанию софт берет некие идеальные значения, которые могут не совпасть с вашими реальными.

Интересно, от напряжения питания и температуры синтезатор что-то меняет в своём синтезе ? Не знал об этом.
des00
Цитата(Demeny @ Feb 21 2012, 08:12) *
Можете ли вы объяснить механизм, природу этого явления

переход триггеров состояния автомата в метастабильные состояния, затем сваливание в неописанные состояния и зависание в них, в связи с отстутствием логики выхода.
Demeny
Цитата(des00 @ Feb 21 2012, 17:18) *
переход триггеров состояния автомата в метастабильные состояния, затем сваливание в неописанные состояния и зависание в них, в связи с отстутствием логики выхода.

То, что будет зависание, если не описать выход из этого состояния - это мне понятно. Но почему триггер может впасть в это самое метастабильное состояние ?
des00
Цитата(Demeny @ Feb 21 2012, 08:22) *
То, что будет зависание, если не описать выход из этого состояния - это мне понятно. Но почему триггер может впасть в это самое метастабильное состояние ?

Вам же уже сказали %) в случае КА в 99% асинхра на управляющих входах. поройте форум на эту тему, вопросу метастабильности посвещенно было много времени %)
Джеймс
Цитата(Demeny @ Feb 21 2012, 16:12) *
Можете ли вы объяснить механизм, природу этого явления - если автомат закодирован, к примеру, состояниями "0001", "0010", "0100", "1000", и нигде в проекте ему не назначается другая константа, то КАК он может оказаться в состоянии "1100" ?


Очень просто. Допустим Вам нужно перейти из состояния 0001 в состояние 0010. На самом нижнем уровне у Вас есть лог. функция, устанавливающая бит 1, и лог. функция сбрасывающая бит 0. Допустим у вас приходит извне непротактированный сигнал и заходит в эту state-машину. Тогда он может успеть установить бит 1, и не успеть сбросить бит 0 (в первом случае t_setup хватило, во-втором - не хватило). Тогда автомат перейдет в запрещенное состояние 0011 и зависнет в нем. ИЛИ, вы по-честному протактировали внешний асинхронный сигнал, но синтезатор "незаметно" размножил тактирующий триггер и завел на один терм state-машины сигнал с первого триггера, на второй терм - сигнал с другого триггера. Тогда возможна та же ситуация.
VladimirB
Цитата(Demeny @ Feb 21 2012, 16:22) *
То, что будет зависание, если не описать выход из этого состояния - это мне понятно. Но почему триггер может впасть в это самое метастабильное состояние ?

У нас несколько лет назад зависала стейт-машина контроллера асинхронной NAND-флеши, хотя все состояния и выходы были прописаны и в XST стояла галочка FSM save implementation.
Долго парились и чипоскопили. Вылечилось всё просто синхронизацией внешнего сигнала BUSY с флеши с внутренним клоком.
Асинхронщина, однако.

А у вас запросто может быть дело в других компонентах - какие нибудь кривые китайские кондёры у которых внутри ничего нету, или кренки с китайского склада.
VslavX
У меня на Циклоне 2 был случай - слетала PLL (выходила кратковременно из состояния locked). Использовалось несколько выходных фаз PLL, после повторного "залочивания" PLL фазы рассинхронизировались (на произвольгый угол) и плиска шизела.
XVR
Цитата(Demeny @ Feb 21 2012, 17:12) *
Интересно, от напряжения питания и температуры синтезатор что-то меняет в своём синтезе ? Не знал об этом.
Меняется подсчет времянок - задержки всех внутренних элементов FPGA зависят от напряжения питания и температуры. При более широком диапазоне могут не выполнится какие нибудь констрейны

Torpeda
Цитата(Demeny @ Feb 21 2012, 17:12) *
Можете ли вы объяснить механизм, природу этого явления - если автомат закодирован, к примеру, состояниями "0001", "0010", "0100", "1000", и нигде в проекте ему не назначается другая константа, то КАК он может оказаться в состоянии "1100" ? Если это возможно - то так далеко можно зайти, а что, если при других операциях другим сигналам будут произвольно меняться биты ? Да и не из всех алгоритмов можно безболезненно выйти, если вдруг состояние автомата стало непредвиденным.


Интересно, от напряжения питания и температуры синтезатор что-то меняет в своём синтезе ? Не знал об этом.


1) автомат сработает неправильно если:
- какие-либо сигналы на его входах асинхронны клоку (напр. внешний ресет....)
- set-up\hold тайминги не выполнились (например изза нештатного PVT (Process Voltage Temperature), т.е. не того что задан при SP&R )
- джитер\скважность клока не такие как при SP&R.
- шум по питанию.
- FPGA тоже бывают битые (имеют stack-at fault) (хотя при 80-% плат тот-же отказ, врядли)

2) Синтезатор делает синтез с учётом PVT corner. STA кстати то-же.
И напр. новая FPGA хоть и того-же типа может иметь слегка другую временную зависимость от PVT на 3-м году выпуска.... Это должно учитываться в новой версии FPGA CAD....

3) А как можна плату в нормальное состояние вернуть? Никак, ресетом, поверофом....
alevnew
Цитата(maksimp @ Feb 20 2012, 22:28) *
И тогда в нём нужно обязательно предусмотреть выход из состояний наподобие "0000" или "1100". Ввести дополнительные операторы else if для этого например. Не знаю как ISE, а Квартус умеет сам изменять кодирование автоматов, и в том числе в небезопасную сторону. Нужно тогда найти и отключить опцию, разрешающую изменять кодирование автоматов.



Цитата(Torpeda @ Feb 23 2012, 21:20) *
3) А как можна плату в нормальное состояние вернуть? Никак, ресетом, поверофом....


В квартусе как раз для такой ситуации вроде можно выставить тип "Safe state mashine".
Torpeda
Цитата(Demeny @ Feb 20 2012, 13:55) *
... прошивка в FPGA через какое-то время (от 15 мин до нескольких часов) частично перестаёт выполнять свои функции, как бы "зависает". ....
Я теряюсь в догадках - что тут может быть, куда копать и что смотреть ?


К данному случаю не относиться но так, для общего розвития....

Как-то у меня попалась Altera Cyclon которая частично не работала после прошивки (но статично).
Вылечилась небольшим изменением топологии (перероутом).

Пришли к выводу - FPGA имела stack-at fault (залипание в 0\1) в какой-то ячейке....
Такое может быть, ведь не зря же ATPG придумывали....

А вот в ASIC попадались фолты и похуже - сопротивление цепи зависимо от напряжения и температуры.
То работает чип, то не работает....
Такие вещи не так-то и легко поймать в производстве.... Надо знать как аккуратно тесты делать.....
Допускаю, что подобные фолты могут и в FPGA попадаться.
dsmv
Насчёт Spartan-3:

Первые партии микросхем позволяли изменять фазу выходного сигнала DCM при работе в режиме HIGH. ISE это тоже позволял. Через некоторое время ISE перестал такие разводить прошивки. Но старые прошивки работали. А ещё через некоторое время, старые прошивки на новых партиях уже перестали работать. Вывод - серия Spartan 3 со временем изменилась.


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