Записал небольшое видео по этому поводу.
И "текстовая расшифровка" под катом, кому так удобнее. Оно не вполне совпадает, но смысл примерно тот же.
Со стороны "технологического разъёма" макета и идущих из него проводов, включающих в себя шлейф JTAG в IGBT-раскраске, стоит китайский лабораторный блок питания. Так-то у него корпус железный, но лицевая сторона пластиковая, и кнопка включения питания стоит непосредственно спереди. При включении, а особенно выключении питания в кнопке проскакивает искра. И в этот момент у меня макет уходит в перезагрузку!
Корпус макета алюминиевый и довольно толстый, вряд ли он пропускает внутрь какие-либо помехи. И действительно, если отсоединить разъём, то никакого эффекта кнопка питания больше не имеет.
Получается, наводка приходит на провода, что в общем-то ожидаемо, они же у меня не экранированы! Как бы это лабораторный макет, провода либо силовые (подзарядка), либо ЦИФРОВЫЕ, которые должно быть совсем непросто "вывести из себя"! Всё-таки 1,5 вольта навести случайной искрой - это ещё умудриться надо!
Но даже если возникает сбой одного или нескольких бит - какая вероятность, что это приведёт к перезагрузке! Причём по сути, это перезагрузка / переконфигурация всей ПЛИС, то есть она по-новой выставляет все свои ножки в режим "вход с подтяжкой на +3,3 вольта", снова загружает конфигурацию из ПЗУ - и начинает выполняться. Что бы мы не посылали по RS485, такого эффекта вызвать не получилось бы!
Далее, у меня была мысль, что по питанию какая-то фигня творится: 7805 каким-то макаром "пугается" скачка напряжения и временно обесточивает всё остальное. Но это не подтвердилось: когда я отсоединил внутренний разъём, по которому идёт RS485 и JTAG, проблемы также прекратились.
Значит, по методу исключения, виноват JTAG! Он действительно может управлять поведением ПЛИС, причём у него в некотором роде "приоритет" над всем остальным.
Но всё равно это удивительно: не так-то просто с помощью коротких случайных импульсов на шлейфе вызвать конкретно перезагрузку! Там же нужно подавать тактовую частоту по TCK, и в то же время выдавать правильные значения на TMS, чтобы вывести "конечный автомат JTAG" в правильное состояние, и не забывать втаскивать правильные биты на TDI. Какой шанс, что эта искра всё это сделает???
Поэтому решил проверить одну вещь: отсоединил от шлейфа коробочку USB Blaster Шлейф остался висеть, воткнутый в макет, но теперь, сколько я не долбил кнопку на лабораторном источнике питания, никакого эффекта это не возымело! То же самое получилось, когда я оставил шлейф воткнутым в USB Blaster, но отключил его от компьютера!
Выходит, именно USB Blaster реагирует буквально на любой "мусор", пришедший по шлейфу, и "от греха подальше" запускает перезагрузку!
Так что, если у вас схема на ПЛИС вдруг начинает "перезапускаться" не с того не с сего, при наличии самых пустяшных "источников помех", будь то искрящая кнопка, или включающаяся лампа дневного света, или резко меняющийся ток потребления - дело может быть именно в USB Blaster. Сразу после прошивки можно его отсоединить - и работать без него, до следующей прошивки.
Есть что-то в "намеренном" применении не самых качественных приборов и кабелей. Это позволяет гораздо быстрее наткнуться на всевозможные "пограничные случаи", которые в противном случае возникли бы уже "в полевых условиях", где и стресса больше, и ответственности, и дедлайн отчётливо вырисовывается, и так много поменялось в сравнении с "родной лабораторией", что не понятно, за что хвататься! Так что китайский блок питания (ну, немного доработанный, чтобы не убить всё скопом), преобразователь USB-RS485 за 200 рублей без клеммы экрана (только A и B) и гальванической развязки, неэкранированные шлейфы - это наше всё :) Правда, до нового года я могу опять не успеть приборчик запустить, разве что до старого. Или произойдёт рождественское чудо, и может тогда я уверую!