Имеется FPGA (Arria 2), которая принимает данные от АЦП (по lvds) на относительно небольших частотах 150-200МГц DDR (то есть клок 200, данные 400). Клок приходит от того же АЦП с некоторым фазовым сдвигом относительно данных.
Изначально пытался принимать данные этим же клоком варьируя задержку по данным во входных пинах. Качественно не вышло - списал все на собственную тупость и недостаточное знакомство с таймквестом.
Теперь добавил по входу клока PLL, кручу фазу тактового сигнала, им и сэмплирую входные данные. Все хорошо, нашел допустимое окно по сдвигу фазы клока, при котором сигналы не ломаются, выбрал среднее значение, сижу радуюсь. Запускаю тот же проект на другой плате - не работает, оптимальная фаза сильно уехала, так что окна вообще не перекрываются.
У меня есть несколько вариантов кто виноват:
1) изменение задержек между клоком и данными по выходу АЦП - вполне может быть, но макимально возможное изменение прописанное в даташите на АЦП в потора раза меньше, чем получилось у меня. Попробую проверить осциллом.
2) Ошибки при фазовой подстройке PLL - в даташите было что-то про 50 пс. Несущественно.
Что еще?
Считаем, что внешние условия одинаковые, 300 по Кельвину, ветер умеренный, погода на Марсе стабильна.
И главный вопрос - что делать?
У меня идей пока только две и обе мне не нравятся своей бесперспективностью для общего случая:
1) откалибровать каждую плату под свои задержки.
2) реализовать динамическую подстройку