Здравствуйте!
Есть задача передавать видео по LVDS с одной платы на другую. На обеих платах преобразователем сигнала выступает CycloneV. 4 дифф-пары данных и дифф-пара клок. Pixelclock на видео для монитора 30 МГц (небольшое разрешение в данной ситуации), 8-битный RGB + сигнал DE.
Для реализации решил использовать встроенные функции altlvds_rx и altlvds_tx и столкнулся с проблемой их сопряжения между собой.
Для теста в настройках функций поставил скорость передачи 210 Мб/с с коэффициентом serdes 7 и частотой соответственно 30 МГц, на передатчике и приемнике соответственно одинаковые настройки. На передатчике сделал генератор тестового слова (константа, опять же для быстрого теста) и поставил PLL для входной частоты функции altlvds_tx 30 МГц. На приемнике снимал данные уже с параллельной шины, на выходе из функции altlvds_rx считал данные вообще не похожие на исходные. После попробовал поиграться со сдвигом фазы на приемнике (в настройках функции altlvds_rx), при определенной комбинации получил нужное слово, но когда оно менялось на передающей плате, опять получалась ерунда на приеме, т.е. дело не в фазе захвата бита.
Полез осциллографом, и на приеме функции altlvds_rx вижу совсем другую частоту.. Вместо 30 МГц там 62... Т.е. PLL-кой генерится 30 МГц, внутри функции altlvds_tx она умножается для преобразования параллельных данных в LVDS, а дальше частота должна на выход по LVDS идти не умноженная, а такая же 30 МГц! По факту не так... Как это все работает, может мне кто-то сказать?) Перерыл кучу тем на форумах и вызубрил даташиты, ответов нет... На лицо неправильный расчет скорости передачи данных и частоты, но он правильный!)))