Перейти к содержанию
    

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И этот автомат становится в неизвестное или не описанное состояние из которого не прописан выход... Ну и далее он там и остается до следующего сброса...

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, это я понимаю... Как отловить такие наводки ?

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

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можете ли вы объяснить механизм, природу этого явления

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...