Jump to content

    

Может ли FPGA частично "зависнуть" ?

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

Короче говоря, передо мной две платы разных производителей (соотв. разная закупка компонентов), сделаны по идентичным герберам. Одна глючит, другая - нет. Вот в чём фокус.

Перепаяйте местами плисины, и у же будет понятно, дело в плате или в плисине.

Share this post


Link to post
Share on other sites
И этот автомат становится в неизвестное или не описанное состояние из которого не прописан выход... Ну и далее он там и остается до следующего сброса...

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

Например, практикуется такое что каждое состояние кодируется "1" в своём бите. Для автомата с 4 состояниями тогда законными будут "0001", "0010", "0100", "1000". И тогда в нём нужно обязательно предусмотреть выход из состояний наподобие "0000" или "1100". Ввести дополнительные операторы else if для этого например. Не знаю как ISE, а Квартус умеет сам изменять кодирование автоматов, и в том числе в небезопасную сторону. Нужно тогда найти и отключить опцию, разрешающую изменять кодирование автоматов.

Share this post


Link to post
Share on other sites

Имел место случай, когда плата промывалась хрен знает чем (водой?), и под ПЛИСой была влага. И она не работала. Продули компрессором, повыдували лишнее - заработала.

Share this post


Link to post
Share on other sites
Да, это я понимаю... Как отловить такие наводки ?

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

Перепроверяйте всю времянку и синхронные/асинхронные стыки с внешним миром. Особенно если не Ваш проект, т.к. кто его знает что там было проверено а чего небыло. Может прошлый разработчик что-то забыл описать.

Сколько раз бывает - пришла другая например партия микрух и проек поплыл, если что-то не корректно сделано.

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

 

Share this post


Link to post
Share on other sites

Недавно выпаивал CPLD Alteta. Шилась, все работало, за исключением одного выходного сигнала, который не мог перейти в "1". Хотя в "Z" и "0" почти нормально.

Перепаял, все заработало.

Share this post


Link to post
Share on other sites
Недавно выпаивал CPLD Alteta. Шилась, все работало, за исключением одного выходного сигнала, который не мог перейти в "1". Хотя в "Z" и "0" почти нормально.

Перепаял, все заработало.

Непропай вывода, обычное дело. Хорошо если корпус QFP, всегда можно пройтись чем то острым и выявить непропай. Хуже на больших ПЛИС с БГА корпусами, в этом случае помогает тест boundary scan через житаг. По идее, непропай должен на выходном контроле прямо на производстве диагностироваться с помощью тестов житаг.

Правда, если сбой на 80% плат, то вероятность такого системного непропая - ноль.

Share this post


Link to post
Share on other sites

Еще можете попробовать пересинтезировать проект (исходники вроде у вас есть), задав ему реальные диапазоны напряжений питания FPGA и внешних температур. По умолчанию софт берет некие идеальные значения, которые могут не совпасть с вашими реальными.

 

Share this post


Link to post
Share on other sites
Например, практикуется такое что каждое состояние кодируется "1" в своём бите. Для автомата с 4 состояниями тогда законными будут "0001", "0010", "0100", "1000". И тогда в нём нужно обязательно предусмотреть выход из состояний наподобие "0000" или "1100". Ввести дополнительные операторы else if для этого например. Не знаю как ISE, а Квартус умеет сам изменять кодирование автоматов, и в том числе в небезопасную сторону. Нужно тогда найти и отключить опцию, разрешающую изменять кодирование автоматов.

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

 

Еще можете попробовать пересинтезировать проект (исходники вроде у вас есть), задав ему реальные диапазоны напряжений питания FPGA и внешних температур. По умолчанию софт берет некие идеальные значения, которые могут не совпасть с вашими реальными.

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

Share this post


Link to post
Share on other sites
Можете ли вы объяснить механизм, природу этого явления

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

Share this post


Link to post
Share on other sites
переход триггеров состояния автомата в метастабильные состояния, затем сваливание в неописанные состояния и зависание в них, в связи с отстутствием логики выхода.

То, что будет зависание, если не описать выход из этого состояния - это мне понятно. Но почему триггер может впасть в это самое метастабильное состояние ?

Share this post


Link to post
Share on other sites
То, что будет зависание, если не описать выход из этого состояния - это мне понятно. Но почему триггер может впасть в это самое метастабильное состояние ?

Вам же уже сказали %) в случае КА в 99% асинхра на управляющих входах. поройте форум на эту тему, вопросу метастабильности посвещенно было много времени %)

Share this post


Link to post
Share on other sites
Можете ли вы объяснить механизм, природу этого явления - если автомат закодирован, к примеру, состояниями "0001", "0010", "0100", "1000", и нигде в проекте ему не назначается другая константа, то КАК он может оказаться в состоянии "1100" ?

 

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

Share this post


Link to post
Share on other sites
То, что будет зависание, если не описать выход из этого состояния - это мне понятно. Но почему триггер может впасть в это самое метастабильное состояние ?

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

Долго парились и чипоскопили. Вылечилось всё просто синхронизацией внешнего сигнала BUSY с флеши с внутренним клоком.

Асинхронщина, однако.

 

А у вас запросто может быть дело в других компонентах - какие нибудь кривые китайские кондёры у которых внутри ничего нету, или кренки с китайского склада.

Share this post


Link to post
Share on other sites

У меня на Циклоне 2 был случай - слетала PLL (выходила кратковременно из состояния locked). Использовалось несколько выходных фаз PLL, после повторного "залочивания" PLL фазы рассинхронизировались (на произвольгый угол) и плиска шизела.

 

Share this post


Link to post
Share on other sites
Интересно, от напряжения питания и температуры синтезатор что-то меняет в своём синтезе ? Не знал об этом.
Меняется подсчет времянок - задержки всех внутренних элементов FPGA зависят от напряжения питания и температуры. При более широком диапазоне могут не выполнится какие нибудь констрейны

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this