|
Может ли FPGA частично "зависнуть" ?, чудеса, да и только ... |
|
|
|
Feb 20 2012, 10:55
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Есть плата с FPGA Xilinx Spartan-3E-500, кристалл заполнен на 98%. Логика, зашитая в FPGA, управляется процессором ARM по параллельной ISA-подобной шине. "Прошивка" давно отлажена и обкатана на огромной серии плат и никаких проблем с ней никогда не было, всё работало без проблем. Но вот выпущен очередной релиз плат (другим производителем, но топология та же) , с которыми происходят странные вещи. На 80% плат прошивка в FPGA через какое-то время (от 15 мин до нескольких часов) частично перестаёт выполнять свои функции, как бы "зависает". Со стороны процессора всё выглядит ОК - регистры пишутся-читаются, команды отдаются, но ... логика FPGA не работает, причём только часть - другая (существенно большая часть) продолжает исправно молотить и выполнять, что требуется. Идентичный софт на идентичной плате другого производителя (с тем же блоком питания, если что ...) молотит без проблем сутками. Потребляемый ток всеми вариантами плат не отличается, перегревов нет, напряжения питаний в норме. Сигнал DONE наличествует как до, так и после сбоя. Я теряюсь в догадках - что тут может быть, куда копать и что смотреть ?
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 33)
|
Feb 20 2012, 12:02
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Demeny @ Feb 20 2012, 14:55)  Я теряюсь в догадках - что тут может быть, куда копать и что смотреть ? Гонки, глитчи. Не помню как точно называется, 10 лет в руки не брал, но в Xilinx Foundation был режим симуляции после разводки. С учетом реальных таймингов. Там все спорные места обычно сразу всплывают, даже если в первоначальной симуляции (до разводки) их не было.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Feb 20 2012, 12:57
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(litv @ Feb 20 2012, 15:54)  в Chipscope то что видно? Чипскоп туда, видимо, не затолкнуть (98% заполнение), да и JTAG-a на плате нет. А на похожей плате, где JTAG есть - проблемы такой нет ... Цитата(iosifk @ Feb 20 2012, 16:03)  Скорее всего здесь в ПЛИСе автомат ловит наводку по входам или CDC сделано не корректно... И этот автомат становится в неизвестное или не описанное состояние из которого не прописан выход... Ну и далее он там и остается до следующего сброса... Обычное дело... Да, это я понимаю... Как отловить такие наводки ? CDC да, есть небольшой грешок (1.25 вместо 1.2), но ведь работает всё это добро на таких же платах. Начинку FPGA делал не я, исходники есть, но оставлю это на крайний случай. Она тоже проверена временем и перенесена на плату в бинарном виде. Цитата(des00 @ Feb 20 2012, 16:04)  я про входные данные. если они есть, то 99% асинхра в интерфейсах вылезла Из входных данных только управление по параллельной шине, подключенной к EBI процессора, в остальном, откисающий блок занимается тем, что перекачивает данные из SDRAM в последовательный ЦАП, управление простейшее - задаётся базовый адрес, длина, даётся команда старт взводом бита в регистре, всё - данные понеслись в ЦАП. В какой-то момент, вместо ожидаемых данных (клок+дата) тишина, после этого процессор может перезаписывать новый базовый адрес, взводить команду старт и всё что угодно - это ничего не помогает. Действительно, складывается впечатление, что именно этот автомат попал в какую-то мертвую точку. Но почему именно на этой серии плат - вот в чём основной вопрос ? Что с ними может быть не так (бракованые ПЛИС, стабилизаторы питания, кондесаторы) ?
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Feb 20 2012, 13:06
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Demeny @ Feb 20 2012, 06:57)  Но почему именно на этой серии плат - вот в чём основной вопрос ? Что с ними может быть не так (бракованые ПЛИС, стабилизаторы питания, кондесаторы) ? вы же сами сказали, была переразводка. например один сигнал управления, раньше был позже другого, а тут они поменялись %) Цитата(disel @ Feb 20 2012, 07:05)  А спидгрейт у плис такой же как и всех других плат, или изменился? иначе бы они старые прошивки не загрузили.
--------------------
|
|
|
|
|
Feb 20 2012, 13:59
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(des00 @ Feb 20 2012, 17:06)  вы же сами сказали, была переразводка. например один сигнал управления, раньше был позже другого, а тут они поменялись %) Когда-то да, была переразводка, но не ПЛИСовой части, она осталась той же. Но с тех пор уже выпущена небольшая серия плат, на которых этой проблемы нет. Короче говоря, передо мной две платы разных производителей (соотв. разная закупка компонентов), сделаны по идентичным герберам. Одна глючит, другая - нет. Вот в чём фокус.
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Feb 20 2012, 14:05
|

Знающий
   
Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950

|
Я бы взял старую плату и перепаял с нее ПЛИС на новую глючную плату. Если не заработает, то проблемы в новой плате (найти три отличия, помеху или еще что), а если все ОК будет, то претензии к модели, особенно если в дизайне много асинхронности.
Что касается вопроса, как он задан: у меня альтеры горели "частично", т.е. скажем в нее грузилась прошивка и работала, но один i/o банк при этом был всегда в закоротке; либо другой случай из жизни - прошивка грузится, но не работает и ПЛИС греется как утюг (предположительно - внутренняя закоротка в цепи питания нескольких банков i/o, но с живым житагом, памятью и интерфейсом конфигурации). Итого, гипотетически можно представить единичные случаи отказа отдельных узлов ПЛИС. Но не в вашем случае (80% плат). Итого, скорее всего проблема в плате.
|
|
|
|
|
Feb 20 2012, 14:05
|
Знающий
   
Группа: Участник
Сообщений: 599
Регистрация: 28-08-08
Из: Ростов папа
Пользователь №: 39 872

|
Цитата(Demeny @ Feb 20 2012, 17:59)  Когда-то да, была переразводка, но не ПЛИСовой части, она осталась той же. Но с тех пор уже выпущена небольшая серия плат, на которых этой проблемы нет. Короче говоря, передо мной две платы разных производителей (соотв. разная закупка компонентов), сделаны по идентичным герберам. Одна глючит, другая - нет. Вот в чём фокус. Перепаяйте местами плисины, и у же будет понятно, дело в плате или в плисине.
|
|
|
|
|
Feb 20 2012, 16:28
|
Местный
  
Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023

|
Цитата(iosifk @ Feb 20 2012, 16:03)  И этот автомат становится в неизвестное или не описанное состояние из которого не прописан выход... Ну и далее он там и остается до следующего сброса... Вот это выглядит самым реалистичным. Проверьте чтобы все автоматы из всех состояний, даже из таких в которые они вроде не могут попасть, выходили в известные состояния. Например, практикуется такое что каждое состояние кодируется "1" в своём бите. Для автомата с 4 состояниями тогда законными будут "0001", "0010", "0100", "1000". И тогда в нём нужно обязательно предусмотреть выход из состояний наподобие "0000" или "1100". Ввести дополнительные операторы else if для этого например. Не знаю как ISE, а Квартус умеет сам изменять кодирование автоматов, и в том числе в небезопасную сторону. Нужно тогда найти и отключить опцию, разрешающую изменять кодирование автоматов.
|
|
|
|
|
Feb 21 2012, 06:24
|
iBuilder©
   
Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322

|
Цитата(Demeny @ Feb 20 2012, 15:57)  Да, это я понимаю... Как отловить такие наводки ? CDC да, есть небольшой грешок (1.25 вместо 1.2), но ведь работает всё это добро на таких же платах. Начинку FPGA делал не я, исходники есть, но оставлю это на крайний случай. Она тоже проверена временем и перенесена на плату в бинарном виде. Перепроверяйте всю времянку и синхронные/асинхронные стыки с внешним миром. Особенно если не Ваш проект, т.к. кто его знает что там было проверено а чего небыло. Может прошлый разработчик что-то забыл описать. Сколько раз бывает - пришла другая например партия микрух и проек поплыл, если что-то не корректно сделано. У Вас, чуть другие материалы и толщины ПП, чуть поехала времянка/наводки - и можно получить такой результат.
|
|
|
|
|
Feb 21 2012, 08:57
|

Знающий
   
Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950

|
Цитата(IEC @ Feb 21 2012, 10:13)  Недавно выпаивал CPLD Alteta. Шилась, все работало, за исключением одного выходного сигнала, который не мог перейти в "1". Хотя в "Z" и "0" почти нормально. Перепаял, все заработало. Непропай вывода, обычное дело. Хорошо если корпус QFP, всегда можно пройтись чем то острым и выявить непропай. Хуже на больших ПЛИС с БГА корпусами, в этом случае помогает тест boundary scan через житаг. По идее, непропай должен на выходном контроле прямо на производстве диагностироваться с помощью тестов житаг. Правда, если сбой на 80% плат, то вероятность такого системного непропая - ноль.
|
|
|
|
|
Feb 21 2012, 13:12
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(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 и внешних температур. По умолчанию софт берет некие идеальные значения, которые могут не совпасть с вашими реальными. Интересно, от напряжения питания и температуры синтезатор что-то меняет в своём синтезе ? Не знал об этом.
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Feb 21 2012, 13:34
|
Местный
  
Группа: Свой
Сообщений: 462
Регистрация: 20-01-06
Пользователь №: 13 399

|
Цитата(Demeny @ Feb 21 2012, 16:12)  Можете ли вы объяснить механизм, природу этого явления - если автомат закодирован, к примеру, состояниями "0001", "0010", "0100", "1000", и нигде в проекте ему не назначается другая константа, то КАК он может оказаться в состоянии "1100" ? Очень просто. Допустим Вам нужно перейти из состояния 0001 в состояние 0010. На самом нижнем уровне у Вас есть лог. функция, устанавливающая бит 1, и лог. функция сбрасывающая бит 0. Допустим у вас приходит извне непротактированный сигнал и заходит в эту state-машину. Тогда он может успеть установить бит 1, и не успеть сбросить бит 0 (в первом случае t_setup хватило, во-втором - не хватило). Тогда автомат перейдет в запрещенное состояние 0011 и зависнет в нем. ИЛИ, вы по-честному протактировали внешний асинхронный сигнал, но синтезатор "незаметно" размножил тактирующий триггер и завел на один терм state-машины сигнал с первого триггера, на второй терм - сигнал с другого триггера. Тогда возможна та же ситуация.
|
|
|
|
|
Feb 21 2012, 13:55
|
Знающий
   
Группа: Свой
Сообщений: 614
Регистрация: 12-06-09
Из: рядом с Москвой
Пользователь №: 50 219

|
Цитата(Demeny @ Feb 21 2012, 16:22)  То, что будет зависание, если не описать выход из этого состояния - это мне понятно. Но почему триггер может впасть в это самое метастабильное состояние ? У нас несколько лет назад зависала стейт-машина контроллера асинхронной NAND-флеши, хотя все состояния и выходы были прописаны и в XST стояла галочка FSM save implementation. Долго парились и чипоскопили. Вылечилось всё просто синхронизацией внешнего сигнала BUSY с флеши с внутренним клоком. Асинхронщина, однако. А у вас запросто может быть дело в других компонентах - какие нибудь кривые китайские кондёры у которых внутри ничего нету, или кренки с китайского склада.
|
|
|
|
|
Feb 23 2012, 15:20
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424

|
Цитата(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) А как можна плату в нормальное состояние вернуть? Никак, ресетом, поверофом....
|
|
|
|
|
Feb 24 2012, 05:59
|
Частый гость
 
Группа: Участник
Сообщений: 90
Регистрация: 17-05-07
Пользователь №: 27 775

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

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424

|
Цитата(Demeny @ Feb 20 2012, 13:55)  ... прошивка в FPGA через какое-то время (от 15 мин до нескольких часов) частично перестаёт выполнять свои функции, как бы "зависает". .... Я теряюсь в догадках - что тут может быть, куда копать и что смотреть ? К данному случаю не относиться но так, для общего розвития.... Как-то у меня попалась Altera Cyclon которая частично не работала после прошивки (но статично). Вылечилась небольшим изменением топологии (перероутом). Пришли к выводу - FPGA имела stack-at fault (залипание в 0\1) в какой-то ячейке.... Такое может быть, ведь не зря же ATPG придумывали.... А вот в ASIC попадались фолты и похуже - сопротивление цепи зависимо от напряжения и температуры. То работает чип, то не работает.... Такие вещи не так-то и легко поймать в производстве.... Надо знать как аккуратно тесты делать..... Допускаю, что подобные фолты могут и в FPGA попадаться.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|