Reanimator++
Nov 8 2016, 21:38
Надо помощь зала.
Напоролся на непонятную засаду в своем проекте.
Как и много лет назад, делаю многоканальный частотомер.
Смысл метода и структура на картинках (реальная битность счетчиков - 32, картинка старенькая, и счетчики синхронные).
ПЛИС - EP3C10
Дополнительно ко всему что на рисунке я использую 2 контрольных счетчика для точек 1) и 2) (красным на рисунке), т.е. прошу систему посчитать собственную опорную частоту, умноженную PLL. (Входная 10 МГц, счетная 100). Pll в режиме Source Syncrous mode.
Обычно значение второго счетчика ровно в 10 раз больше значения первого. Если появились расхождения значит мы имеем большой джиттер в опорной частоте и потенциальную неисправность, результат замера выбраковывается. Такой вот самоконтроль.
Сделали новую плату. Немного изменили код ПЛИС - в этой ревизии было удобнее применить последовательную выгрузку данных, как на рисунке изображено. В предыдущей была параллельная через мультиплексор.
Суть проблемы. Когда подается на частотомер много (более 20) входных сигналов (все они 3.3В КМОП), и при температуре выше 70°С, система начинает сыпать ошибки измерений. Контрольный счетчик не сходится.
Что интересно, счетчик заполнения всегда выдает значения кратные 10, а сам счетчик опоры выдает значения немного меньше (на 10-50 импульсов), чем соответствовало бы счетчику заполнения. То есть. Измеряем 0.4 секунды. В счетчике 1 видим 4000123, в счетчике 2 видим 40001350.
Т.е. либо PLL не множит, либо счетчик сбивается (ну, еще может выгрузка данных но не верю).
Эффект повторяется на разных платах в партии (все пока не оттестировали).
При этом сам код не новый и чипы тоже, в 4-5 более старых ревизиях ничего подобного не наблюдалось.
Эффект исчезает если убрать счетные частоты - оставляем одну - прекрасно считает на 100°С. Наводит мысль на какую-то проблему с Cross-Talking. Но опять же непонятно почему этого не было на других ревизиях.
Выявлено что температурный фактор влияет именно на саму ПЛИС - греешь ее феном и ошибки начинают сыпаться. Нагрев других компонентов платы не приводит к результату.
TimeQuest ругается на Hold time по частоте sclk - последовательной выгрузки данных. Больше никаких предупреждений нет. Выгрузку выполняем очень медленно (<100 кГц), поэтому тоже не верю.
Загрузка ПЛИС по ячейкам 99.5%. Пробовал снижать разрядность счетчиков и уменьшать до 90% - не помогало.
На плате 6 слоев, опорный слой земли имеется, разведено вроде прилично. Блокировки рядом, на питание PLL ферритовый фильтр. Пробовали дополнительно кондерами обвешивать питание PLL - не помогает.
Што проверять куда копать? )
Цитата(Reanimator++ @ Nov 9 2016, 00:38)

Што проверять куда копать? )
Сколько выводов из ПЛИС переключается одновременно и каков стандарт этих выводов. У ксайлинкса есть ограничение на это дело... Скажем так, если 24 мА то вроде десяток выводов, а если 4 мА то в несколько раз больше...
Проверьте..
Температура ПЛИС превышена. Надо кулер прицепить.
warrior-2001
Nov 9 2016, 05:35
в топике не указана версия квартуса. Мною замечено, что если в последних версиях квартус ругается в TimeQuest, то он как бы сказать - хуже разводит чтоли. Как только правильно настроены все констрэйнты - сразу все ок. Посему для начала советую убрать все слэки.
Ну а потом - сигналтап в помощь. И ещё - нужно корректно настроить параметры внешней среды в квартусе - нет кулера, температура воздуха высокая и тому подобное. Тогда TimeQuest может заругаться и на основные клоки!
Цитата(warrior-2001 @ Nov 9 2016, 08:35)

Тогда TimeQuest может заругаться и на основные клоки!
Если они, вообще, правильно описаны.
У PLL есть выход Lock. Надо посмотреть, не срывается ли ФАПЧ.
Reanimator++
Nov 9 2016, 07:47
Цитата(iosifk @ Nov 9 2016, 00:46)

Сколько выводов из ПЛИС переключается одновременно и каков стандарт этих выводов.
У плис 85 входов LVCMOS и 1 выход LVCMOS. Питание всех I/O банков 3.3В.
Цитата(ViKo @ Nov 9 2016, 08:09)

Температура ПЛИС превышена. Надо кулер прицепить.
Чип индустриального диапазона. Кулер прицепить не получится, плата работает в термокамере. Надо стабильный результат до +85.
Цитата(warrior-2001 @ Nov 9 2016, 08:35)

в топике не указана версия квартуса. Посему для начала советую убрать все слэки.
Ну а потом - сигналтап в помощь. И ещё - нужно корректно настроить параметры внешней среды в квартусе - нет кулера, температура воздуха высокая и тому подобное. Тогда TimeQuest может заругаться и на основные клоки!
Квартус 9.1 sp2 32bit.
Слэков по счетным частотам нету, и fmax кажет 170-250 МГц. Единственный небольшой слэк на hold клок sclk для сдвиговых регистров.
SignalTap я ранее не пользовался, и как это сделать для данного асинхронного дизайна я не соображу до конца. Тут по сути 84 разных клока, из них 83 асинхронны. (80 счетных входов, клок выгрузки данных, опорная частота и частота заполнения после PLL).
Режима работы по сути два - режим счета и режим выгрузки данных.
Суть в том, что я этот дизайн использую уже лет 5, на разных платах и в совершенно жутких режимах, и такую проблему вижу впервые. Чтобы счетчик сам себя не мог корректно посчитать.
Lock сейчас посмотрим, спасибо.
Код выложить?
warrior-2001
Nov 9 2016, 08:20
Не хочется умничать, но наверное на разных платах были разные распиновки. И в данном случае неверные временные ограничения привели к некорректной работе.
Если pll lock падает - скорее всего косяк с питанием. Если нет - асинхронщина.
Reanimator++
Nov 9 2016, 10:58
PLL Lock падает.
Зависимость есть как от температуры, так и от количества подаваемых сигналов.
Есть некоторые сигналы которые влияют сильнее (падать начинает раньше чем с другими).
Распиновка конечно же изменилась также как и вся плата.
Что искать в питании?
Цитата(Reanimator++ @ Nov 9 2016, 13:58)

PLL Lock падает.
Что искать в питании?
Напряжение. Может, регулятор напряжения проседает?
Развязку конденсаторами согласно рекомендациям.
По всем ножкам пройтись, убедиться, что сделано правильно.
И разводка, конечно. Земли не жалеть.
Reanimator++
Nov 9 2016, 13:13
На плате слой земли и питание тоже широкими полигонами подходит.
Прошлись по питаниям.
Осциллом ничего не видно на максимальном усилении.
Дополнительно повесили по 1нФ прямо на лапки между AVDD и AGND.
AVDD по даташиту - стаб, 10мкф, 1 мкф, фильтр ферритовый 1кОм, 10мкф, 0.1мкф х 2шт, 0.01 мкф х 2шт.
Попробовали вывести наружу клок до PLL и после PLL. (из точек 1 и 2)
Клок до PLL совпадает по осцилу с входящим в ПЛИС клоком (в любых условиях).
Клок после PLL ведет себя стабильно до тех пор пока не подаем сигналы на счетные входы.
Когда подаем сигналы, клок после PLL начинает дрожать. (пробовали на частоте 20 МГц)
Даже при наличии нормального PLL Lock появляется большой джиттер.
Делаем следующее - берем клок и подаем на плисину в LVDS виде (LVDS приходит на плату, там отдельно приемник и конвертер в КМОП стоит).
И о чудо, PLL начинает работать стабильно, джиттер на выходе пропадает, ошибки исчезают.
Т.е. либо мы профукали где-то клок при транспорте КМОП по плате (хотя там всего 3 см дорожки и два получателя - ПЛИС и процессор),
либо условия входа КМОП сигнала в плисину создались какие-то непонятные.
Более всего непонятно, что клок выведенный из плисины из точки 1 по осцилу точно совпадает со входным. Не видно ни джиттера, ни пропусков, никаких отклонений (смотрели в режиме накопления).
Получается что форма входного сигнала влияет на работу PLL. странно.
посмотрим, пока оно на столе только ожило, надо проверить во всем диапазоне и на выборке плат.
Reanimator++
Nov 10 2016, 16:01
1. Клок берется с внешнего рубидиевого генератора. Вне платы (и в нормальных условиях) преобразуется в LVDS и уже по диф. паре идет на плату.
На плате стоит приемник LVDS > CMOS, далее клок подается на ПЛИС и процессор.
2. Везде стоят согласующие резисторы 33Ом со стороны источника, все высокочастотные (>10 МГц) дорожки выполнены над опорным слоем земли с расчетным импедансом 60-70 Ом, т.е. КМОП линии согласованы корректно. Осциллографом выбросов не видно.
3. Поскольку LVDS приемник на плате стоит в 20мм от плисины, мы просто кинули входящий LVDS проволочками на свободный клоковый вход и переконфигурировали его в LVDS приемник. Тогда все заработало.
И еще один важный момент - нужно было убрать галочку auto reset PLL on loss lock. С этой галкой PLL периодически сбрасывался (и замеры не шли). Когда сняли галку Lock перестал падать и замеры пошли.
Плата отработала сутки во всем температурном диапазоне с полной нагрузкой по 80 входам, сегодня мы сняли ее с установки и она сдохла - походу убили статикой по длинной LVDS линии (при подтыкании платы LVDS сигнал садит на землю). Внешний приемник ставили все-таки не спроста.
to be continued..
А какой приемник LVDS > CMOS?
Reanimator++
Nov 11 2016, 14:39
ds90lv012a
Приемник стоит рядом с плисиной. Нагреваем его вместе с ней феном на столе. КМОП сигнал клока идеален.
Самое интересное что мы берем входной ТТЛ сигнал, внутри коммутируем на другой pin плисины с помощью assign, и втыкаемся осциллографом в обоих. Они совпадают с точностью до небольшой задержки. Осциллограф разницы не видит, в т.ч. в режиме накопления.
Сейчас вышли исключительно тупо. На КМОП выход LVDS приемника присоплили LVDS передатчик и подали клок в плисину. Работает.
Т.е. присутствует зависимость от вида сигнала (КМОП, LVDS), и от места подачи (CLK0, CLK1).
Причем сам сигнал входит и выходит из плисины корректно. А вот PLL может работать а может не работать.
Весь огород, поставили на тест на ночь, продолжаем.
warrior-2001
Nov 19 2016, 07:57
Явно глючит pll. Выше правльно указывают Vcca и Vccd_pll.
Косяк не во входном сигнале, а в работе pll. Очень похоже на просадку или дребезг в питании pll.
И еще - в последнее время несколько раз натыкался на битые 3 циклоны! Поставщики разные, некоторые без вопросов заменили кристаллы, но факт есть факт!
Reanimator++
Nov 22 2016, 08:01
Что баг в работе PLL это факт. Вопрос в другом - почему так странно?
Сейчас по итогу заменили вход клока c CLK0 на CLK1, оставив КМОП сигнал. Вроде все живет. Тестируем по всякому.
В питаниях все хорошо, думаю за дребезг земли возможный в самом чипе. Очень много сигналов с резкими фронтами и очень мало ножек земли у чипа (6 штук вроде).
Но опять же замену входной лапы клока это плохо объясняет.
warrior-2001
Nov 22 2016, 09:48
А можете озвучить поставщика кристалла, если не секрет.
Если секрет, но не большой - можно в личку.
Reanimator++
Nov 25 2016, 14:34
Брали в Компэле.
Ничего плохого про них сказать не могу, не исключаю вероятность собственной косячности.
По итогу все кончилось заменой CLK0 на CLK1 без изменения формы сигнала (остался КМОП).
И едва заметной каплей припоя между ножками.
Измеряет без сбоев, поверку во всем диапазоне температур проходит.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.