Пытаюсь разработать два независимых (один туда, другой обратно) LVDS-канала передачи данных между двумя ПЛИС Cyclone 5 GX (конкретно 5CGXFC7C6F23I7). "Путаница" в документации, практически полное отсутствие примеров завели меня в тупик и я вынужден обратиться сюда.
В обоих ПЛИС делаю одинаковые ALTLVDS_TX, ALTLVDS_RX. Частота входных данных 150МГц, коэффициент сериализации 4, выходной поток 600Мбит/с на один LVDS-канал. Думаю это комфортные условия для данного кристалла. Всего 17 LVDS-каналов. ALTLVDS_TX, ALTLVDS_RX делаю НЕ в режиме "External PLL mode". То есть все частоты для работы блоки делают внутри себя сами.
В ALTLVDS_TX задаю параметр "outclock divide factor (

" равным 4, ставлю галку "Use 'tx_outclock' output port" и "Use 'tx_coreclock' output port". На входной порт ALTLVDS_TX/tx_inclock подаю 150МГц, питаю данными, выдаваемым схемой, которая запитывается от частоты tx_coreclock
В ALTLVDS_RX и задавать то особо нечего. Input data rate ставлю 600Мбит/с, input clock rate clock frequency ставлю 150МГц.
Выходной порт tx_outclock блока ALTLVDS_TX в одной ПЛИС соединяю с входным портом rx_inclock блока ALTLVDS_RX в другой ПЛИС. В моделировании tx_outclock выдает частоту 150МГц, в железе пока непонятно. В ModelSim все работает замечательно. В железе не работает, возникает много вопросов.
1. В документе "LVDS SERDES Transmitter/Receiver IP Cores User Guide" 2017.06.19 в таблице 2 для ALTLVDS Transmitter указаны частоты для моего (четного) коэффициента сериализации:
Fast Clock = Data Rate/2
Slow Clock (outclock)= Data Rate/2*B
Core Clock = Data Rate/J
То есть для моего случая должы быть такие значения: Fast Clock = 300МГц. Slow Clock = 1200МГц (если буквально понимать формулу). Если понимать ее как Slow Clock = Data Rate/(2*

, то должно быть 75МГЦ. Core clock = 150МГц. В TimeQuest'е я вижу Fast Clock = 600МГц, Slow Clock = 150МГц, Core Clock (который имеет скважность 100/J = 25% в моем случае) равен 150МГц.
Это первая неопределенность (фундаментальная), которая у меня возникает в разработке LVDS-канала.
Возможно документация (достаточно новая) для Cyclone-семейства исходит из того, что Cyclone до 5-го используют DDIO, а в 5-ом уже используется аппаратный блок сериализации, без DDIO. Отсюда возникает эта путаница, но от осознания этого легче не становится.
2. Из-за того, что в документации я вижу одно, в ModelSim другое, а в TimeQuest третье решил вывести в SignalTAP счетчики, запитать их разными частотами и посмотреть что же получается в железе.

На картинке фрагмент из SignalTAP'a. Частота SignalTAP равна 150МГц (назовем ее avl_clk). Счетчик здесь немного необычный. Считает не каждый первый такт, а каждый второй такт. Так лучше видно.
2.1 Из диаграмы видно, что первый счетчик (запитанный tx_coreclock) и второй счетчик (запитанный частотой SignalTAP avl_clk) идут одним темпом. Из этого становится понятно, что частота tx_coreclock равна avl_clk и обе равны 150МГц.
2.2 Дальше идет счетчик с частотой rx_coreclock (частота приемных десериализированных данных). Видно что он изменяется каждый первый такт. Это, как я понимаю, означает, что она в два раза выше частот avl_clk, tx_coreclock и равна 300МГц. Почему ? Непонятно
2.3 Дальше идет lvds_rx_inclk. Это tx_outclock (Slow Clock) от блока ALTLVDS_TX из соседней ПЛИС. Судя по тому, ка к меняются значения каждый такт (090h, 092h, 094h, 096h, 098h, ...) у меня складывается ощущение, что она в 4 раза выше частоты SignalTAP, то есть 600МГц. Почему ? Непонятно. Еще непонятны замирания счетчика (например на значении 0B6h на картинке)
2.4 Из-за такого поведения счетчика lvds_rx_inclk у меня нет уверенности в том, что tx_outclock равен 150МГц. Когда писал эти вопросы провел эксперимент. Подал на tx_outclock частоту не с ALTVDS_TX/tx_outclock, а частоту с PLL с гарантированно известной частотой 150МГц. Эта частота поступает с другой ПЛИС на lvds_rx_inclk в ПЛИС, с которой снимаю SignalTAP. 4-й счетчик стал считать аналогично 3-ему, то есть каждый такт менять значение. Как такое может быть, если эта частота и частота SignalTAP номинально равны (могут и быть незначительные отклонения в несколько десятков ppm) ?
3. Может быть я как-то неправильно настраиваю ALTLVDS_TX, ALTLVDS_RX ? Может кто-нибудь подсказать, как будет правильно их настроить? Что с чем соединять, чтобы получить LVDS-канал. Где какие должны быть частоты ? Поняв как правильно настроить передатчики и приемники буду двигать дальше.