Надо помощь зала.
Напоролся на непонятную засаду в своем проекте.
Как и много лет назад, делаю многоканальный частотомер.
Смысл метода и структура на картинках (реальная битность счетчиков - 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 - не помогает.
Што проверять куда копать? )
Эскизы прикрепленных изображений