Использовал в своём проекте мегафункцию alt_lvds для приёма данных с АЦП ADS6445 (4 канала, 2 дифпары на канал, frame-clock, bit-clock). Плата была косячно разведена: для данных попутана полярность, после приёма приходилось инвертировать линию, FCLK и DCLK заведены на обычные пины FPGA, не было возможности использовать alt_lvds. Сначала пробовал написать свой десериалайзер, но всё работало криво, данные принимались правильно при частоте DCLK порядка 100 МГц. Поэтому, чтобы чтобы заюзать alt_lvds линии FCLK и DCLK были перепаяны на тактовые входы (благо тактовые входы FPGA были выведены на светодиоды, не предполагалось их использование по-назначению). Всё стало нормально работать даже с использованием инвертирования линий данных, и без использования временных констрейнов (потом уже прописывал). Частота АЦП использовалась 61,44 МГц, т.е. DCLK 61.44 МГц * 8 = 491,52 МГц. Для правильного захвата данных (последовательности бит) использовался Nios, который по SPI управлял АЦП. Подавалась команда на синхронизацию, АЦП выставляла на каждом канале эталонную последовательность, после приёма, принятое значение сравнивалось с образцом, при несовпадении на alt_lvds подавался импульс сдвига на один бит, и так до тех пор, пока принимаемое значение не совпадало с образцом. Таким образом синхронизировался каждый из каналов.
|