Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LVDS receiver
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
max-i-mum
Подскажите, плиз, кто работал с LVDS приемниками.

Есть сенсор с LVDS выходами (17 пар + клок пара), нужно его подключить к третьему или четвёртому циклону.
десериализация в 10 бит, и lvds не ddr-овские (т.е. данные с частотой клока)
Засада в том, что частота клока и данных может менятся от 50 до 480MHz
Раньше с LVDS дела не имел, и появились вопросы:
1) если сгенерить lvds receiver со встроенным PLL, то там частота задается жестко. Если задать 480MHz то будет ли приемник нормально работать на меньших частотах?
2) если генерить lvds receiver с внешним PLL, то ему клок нужен в 2 раза медленнее (т.е. ddr) как это можно обойти и привязаться к реальному клоку ?
3) а вообще реализовать в Cyclone lvds receiver который бы работал на разных частотах можно ?

И ещё:
как по опыту, стоит ли использовать циклоновский PLL в качестве генератора клока для сенсора в диапазоне 50 - 480MHz?
если нет, то какие есть внешние перестраиваемые PLL-ки в этом диапазоне?
DmitryR
Берете LVDS заводите на Fast Input Registers, клок - на source-synchronous PLL и все. Правда Циклон не потянет 480 МГц (если вы только не поставите С6), и придется сделать на входе триггеры DDR, а частоту 240, что тоже не является проблемой. Как PLL, сконфигурированная на конкретную частоту поведет себя на других частотах - вопрос, но PLL можно по ходу дела переконфигурировать. Проблема одна - у Cyclone-IV максимальная входная частота PLL 472.5 МГц. Поэтому проще будет поставить внешнюю PLL (например от National) с двумя выходами: один выход отправить на ресивер, а другой (деленый пополам) - на Циклон.

А еще проще возможно было бы просто использовать внутренний ресивер в Cyclone-IV GX.
max-i-mum
Спасибо, прошляпил я что циклон не может принять 480MHz.
Сбило с толку что квартус позволил так сконфигурировать LVDS приемник.
И если я правильно понял, то в циклоне сделать LVDS приемник (не DDR) базирующийся на внешнем изменяемом клоке невозможно?
только танцы с бубном в виде внешнего PLL ?
DmitryR
Даже если принять самый жесткий вариант, при котором
- PLL при изменении внешней частоты будет тихо впадать в маразм, не теряя lock
- сигнала о том, что внешняя частота изменилась, нет
Все остается возможным. Надо завести в FPGA постоянную максимально высокую частоту (от генератора) и с ее помощью считать примерно период входной частоты. При его изменении переконфигурировать и сбрасывать основную PLL. Вот и все.
Krys
Извините, если не очень въехал в Ваш вопрос. Но мне пока не видится проблемы: клок подаём на сдвиговый регистр, на его вход - с пинов данных. ПЛЛ не требуется. Десериализовать легче, чем сериализовать. Т.к. деление частоты - операция чисто цифровая. А умножение - с привлечением аналоговых устройств (ГУН и т.п., не считая цифровый ПЛЛ). Соответственно при изменении частоты не будет никаких проблем, т.к. всё останется полностью синхронным.
DmitryR
Цитата(Krys @ Dec 17 2010, 07:23) *
Извините, если не очень въехал в Ваш вопрос. Но мне пока не видится проблемы: клок подаём на сдвиговый регистр, на его вход - с пинов данных. ПЛЛ не требуется.
Если бы все было так просто - не делали бы в FPGA быстрых аппаратных десериализаторов, да не изобретали бы source syncronous mode для PLL.
Cordroy
Цитата(Krys @ Dec 17 2010, 08:23) *
Но мне пока не видится проблемы: клок подаём на сдвиговый регистр, на его вход - с пинов данных. ПЛЛ не требуется.


На вход сдвигового регистра подается клок умноженый на N. Для этого и нужен ПЛЛ, причем чтобы держал фазу 0 (или сколько требуется) между принятым и умноженым клоком.
max-i-mum
Цитата(Cordroy @ Dec 17 2010, 15:50) *
На вход сдвигового регистра подается клок умноженый на N. Для этого и нужен ПЛЛ, причем чтобы держал фазу 0 (или сколько требуется) между принятым и умноженым клоком.

Не, ничего умножать не нужно, клок приходит высокочастотный, его поделить нужно чтобы получить клок десериализованных данных.
Вопрос в том делать это ПЛЛ-кой (и при изменении частоты клока перегружать ПЛЛ-ку с новыми параметрами), или на логике ?

По ходу ещё вопрос возник:
если LVDS приемник (сгенерённый визардом) делать с внешней PLL то он предупреждает что к паралельному выходу нужно подцепить регистры-защёлки.
Разве он сам внутри их не должен ставить ?
И каким НЧ клоком их тактировать (сдвиг фазы ноль, или 180 гадусов)? в описании нарисованны регистры тактируемые инверсным клоком.

P.S.
совсем уже запутался: в доках сказано что для циклона десериализатор генерится на логике, и вместе с тем обещают чуть ли не 800 мегабит в секунду по LVDS входу.
Разве не запредельная частота для циклона получается ? как это они с 800MHz данными то оперируют ?
Krys
Цитата(max-i-mum @ Dec 17 2010, 20:07) *
Не, ничего умножать не нужно, клок приходит высокочастотный, его поделить нужно чтобы получить клок десериализованных данных.
Ну вот, значит, я правильно понял постановку задачи.
Цитата(max-i-mum @ Dec 17 2010, 20:07) *
Вопрос в том делать это ПЛЛ-кой (и при изменении частоты клока перегружать ПЛЛ-ку с новыми параметрами), или на логике ?
Я бы сделал на логике. Делить - не умножать. Куда проще.
Цитата(max-i-mum @ Dec 17 2010, 20:07) *
если LVDS приемник (сгенерённый визардом) делать с внешней PLL то он предупреждает что к паралельному выходу нужно подцепить регистры-защёлки.
Разве он сам внутри их не должен ставить ?
Ну видимо всё зависит от замысла разработчиков. Если говорят, что не должен - значит не должен. Если в автомобиле нет багажника, то это был замысел разработчиков. И они ничего не должны. И это не значит, что они забыли приделать к кузову багажник.
Цитата(max-i-mum @ Dec 17 2010, 20:07) *
И каким НЧ клоком их тактировать (сдвиг фазы ноль, или 180 гадусов)? в описании нарисованны регистры тактируемые инверсным клоком.
Я бы тактировал клоком с нулевым сдвигом, т.к. это вписывается в концепцию синхронного дизайна. А если 180 градусов - то формально это уже другой клоковый домен. Со всеми вытекающими.

А вообще, покажите, пожалуйста, где "предупреждает" и где "нарисованы".


Цитата(max-i-mum @ Dec 17 2010, 20:07) *
P.S.
совсем уже запутался: в доках сказано что для циклона десериализатор генерится на логике, и вместе с тем обещают чуть ли не 800 мегабит в секунду по LVDS входу.
Разве не запредельная частота для циклона получается ? как это они с 800MHz данными то оперируют ?
Покажите, что написано где. Может, неправильно поняли. Недавно делал SerDes на спартане 3А. Там тоже в какой-то доке рассказывали байку, что прокачивают 600 Мбит/с через LVDS и с использованием DDR клока. Планируем завести их схему хотя бы на 300 Мбит/с.
Victor®
Цитата(Krys @ Dec 18 2010, 09:03) *
Недавно делал SerDes на спартане 3А. Там тоже в какой-то доке рассказывали байку, что прокачивают 600 Мбит/с через LVDS и с использованием DDR клока. Планируем завести их схему хотя бы на 300 Мбит/с.


А в чем проблема-то?
Ясное дело что придется играться с DCM, BUFIO, IDDR и т.п.
+ констрейнтить все это правильно. Недавно чуть голову не сломал с RGMII.
Krys
Цитата(Victor® @ Dec 18 2010, 14:25) *
Ясное дело что придется играться с DCM, BUFIO, IDDR и т.п.
+ констрейнтить все это правильно. Недавно чуть голову не сломал с RGMII.
Именно в этом и проблема :) Что на автомате это всё не пойдёт. Только ручками исхитряться. Но ой как неохота этим заниматься.
tvv
Цитата(max-i-mum @ Dec 13 2010, 17:00) *
Подскажите, плиз, кто работал с LVDS приемниками.

Есть сенсор с LVDS выходами (17 пар + клок пара), нужно его подключить к третьему или четвёртому циклону.
десериализация в 10 бит, и lvds не ddr-овские (т.е. данные с частотой клока)
Засада в том, что частота клока и данных может менятся от 50 до 480MHz
Раньше с LVDS дела не имел, и появились вопросы:
1) если сгенерить lvds receiver со встроенным PLL, то там частота задается жестко. Если задать 480MHz то будет ли приемник нормально работать на меньших частотах?
2) если генерить lvds receiver с внешним PLL, то ему клок нужен в 2 раза медленнее (т.е. ddr) как это можно обойти и привязаться к реальному клоку ?
3) а вообще реализовать в Cyclone lvds receiver который бы работал на разных частотах можно ?

И ещё:
как по опыту, стоит ли использовать циклоновский PLL в качестве генератора клока для сенсора в диапазоне 50 - 480MHz?
если нет, то какие есть внешние перестраиваемые PLL-ки в этом диапазоне?


Если я правильно догодался (что стоит описать все сразу, не мучая телепатов), то у Вас 16 входов данные, один контрольный и клок. (Очень похоже на выход видеосенсора wink.gif ) По контрольному сигналу летит слово синхронизации, оно или описано в даташите, или задается через, например, spi. Вам придется подгонять чтение данных по фазе к входному быстрому клоку так, чтобы на выходе параллельной 10битной шины, попасть в нулевой бит. Все это проще сделать на altlvds! В ней уже все сделано и нет нужды изобретать велосипед. Кроме того, вы никакими констрейнами не вытятите времянку до десятков пикосекунд, а lvds это гарантирует, при правильной разводке (а неправильно фиттер не даст разложить). Другой вопрос, как меняется частота входного клока, если плавно и непредсказуемо для альтеры, это один дурдом, (не понятно, в принципе, зачем так делать) если параметрически и Вы этот момент контролируете, то делаете асинхронный сброс pll и все дела. Частота жестко не задается, жестко задается отношение битрейта к частоте! PLL ничего про Вашу входную частоту не знает, а все делает на делении и умножении простых чисел. Отношение битрейта к клоку определяет как разложены Ваши сигналы друг к другу.
800Mb это в ддр (400МГц) и, проверенно, реально работает - не сомневайтесь!
DmitryR
Цитата(max-i-mum @ Dec 17 2010, 17:07) *
совсем уже запутался: в доках сказано что для циклона десериализатор генерится на логике, и вместе с тем обещают чуть ли не 800 мегабит в секунду по LVDS входу.
Разве не запредельная частота для циклона получается ? как это они с 800MHz данными то оперируют ?

Как 400 МГц DDR. Не запредельная.
tvv
Цитата(DmitryR @ Dec 20 2010, 12:02) *
Как 400 МГц DDR. Не запредельная.

Все работает в соответствии с описанием: таблица 1-31 на странице 1-22. В чем вопрос собственно?
max-i-mum
Цитата(tvv @ Dec 20 2010, 12:33) *
Все работает в соответствии с описанием: таблица 1-31 на странице 1-22. В чем вопрос собственно?

спасиб, не обратил внимания что клок DDR (в 2 раза медленее).
Получается что сдвиговый регистр в LVDS приемнике циклона (а в циклоне он реализуется просто на обычной логике) может работать на частоте 437.5 МГц?
А более 800Mbs получается за счёт DDR модулей в I/O правильно ?

Цитата(tvv @ Dec 19 2010, 01:34) *
Если я правильно догодался (что стоит описать все сразу, не мучая телепатов), то у Вас 16 входов данные, один контрольный и клок. (Очень похоже на выход видеосенсора wink.gif ) По контрольному сигналу летит слово синхронизации, оно или описано в даташите, или задается через, например, spi. Вам придется подгонять чтение данных по фазе к входному быстрому клоку так, чтобы на выходе параллельной 10битной шины, попасть в нулевой бит. Все это проще сделать на altlvds! В ней уже все сделано и нет нужды изобретать велосипед. Кроме того, вы никакими констрейнами не вытятите времянку до десятков пикосекунд, а lvds это гарантирует, при правильной разводке (а неправильно фиттер не даст разложить). Другой вопрос, как меняется частота входного клока, если плавно и непредсказуемо для альтеры, это один дурдом, (не понятно, в принципе, зачем так делать) если параметрически и Вы этот момент контролируете, то делаете асинхронный сброс pll и все дела. Частота жестко не задается, жестко задается отношение битрейта к частоте! PLL ничего про Вашу входную частоту не знает, а все делает на делении и умножении простых чисел. Отношение битрейта к клоку определяет как разложены Ваши сигналы друг к другу.
800Mb это в ддр (400МГц) и, проверенно, реально работает - не сомневайтесь!

Всё правильно видеосенсор :-) с 16 выходами данных, 1- синхронизация и клок.
На счёт синхронизации Вы имеете вииду bitslip control (rx_data_align) ?
Тоже склоняюсь к использованию визарда altlvds, тем более в первый раз.

Частоту задаю я сам (всё о ней знаю), а сенсор уже выдает данные в нужной фазе со своим клоком (но частота та, что я задал).
На счёт "PLL ничего про Вашу входную частоту не знает, а все делает на делении и умножении простых чисел" не согласен, иначе зачем он её спрашивает в визарде ?
Кроме того провел эксперимент: сделал две ПЛЛ с одинаковыми коэфициентами умножения/деления но разными частотами, и посмотрел advanced настройки.
Так вот разные внутренние параметры (VCO phase tap for M counter, VCO post scale counter, .....) у ПЛЛ-ек получились разные, так что не всё равно какую частоту на ПЛЛ подавать
(при одинаковых коэфициентах умножения/деления но для разных входных частот создаются разные ПЛЛ)
DmitryR
Цитата(max-i-mum @ Dec 20 2010, 13:20) *
На счёт "PLL ничего про Вашу входную частоту не знает, а все делает на делении и умножении простых чисел" не согласен, иначе зачем он её спрашивает в визарде ?

Для того, чтобы расчитать множители. Прочитайте про реконфигурацию PLL - входная частота там действительно внутри нигде не хранится.
max-i-mum
Цитата(Krys @ Dec 18 2010, 09:03) *
А вообще, покажите, пожалуйста, где "предупреждает" и где "нарисованы".



на счёт инверсного клока
alt_lvds_user_guide
страница 3

Цитата(DmitryR @ Dec 20 2010, 13:23) *
Для того, чтобы расчитать множители. Прочитайте про реконфигурацию PLL - входная частота там действительно внутри нигде не хранится.

Т.е. я правильно Вас понимаю, что сгенерив ПЛЛ на деление входного клока 100МГц пополам, и подав на вход ПЛЛ 50МГц клок - я получу на выходе свои 25? надёжные ?
DmitryR
Цитата(max-i-mum @ Dec 20 2010, 13:51) *
Т.е. я правильно Вас понимаю, что сгенерив ПЛЛ на деление входного клока 100МГц пополам, и подав на вход ПЛЛ 50МГц клок - я получу на выходе свои 25? надёжные ?

Нет, вы понимаете неправильно. Дело в том, что задавая эти множители необходимо поддерживать частоту VCO PLL в определенных пределах. То есть, чем ниже входная частота, тем выше необходимо задавать M. То есть если для некоторой входной частоты вам визард насчитал M/N как, допустим, 12/10 - сокращать эту дробь до 6/5 нельзя (как правило). Вобщем там в визарде есть VCO freq - поиграйтесь с разными коэффицентами и посмотрите.
max-i-mum
Цитата(DmitryR @ Dec 20 2010, 15:09) *
Нет, вы понимаете неправильно. Дело в том, что задавая эти множители необходимо поддерживать частоту VCO PLL в определенных пределах. То есть, чем ниже входная частота, тем выше необходимо задавать M. То есть если для некоторой входной частоты вам визард насчитал M/N как, допустим, 12/10 - сокращать эту дробь до 6/5 нельзя (как правило). Вобщем там в визарде есть VCO freq - поиграйтесь с разными коэффицентами и посмотрите.

Понял, СПАСИБО!
warrior-2001
А ещё есть такой документ, как Phase-Locked Loops Reconfiguration (ALTPLL_RECONFIG) Megafunction User Guide.
Там подробно рассказано как сделать перепрограммируемую частоту без перепрошивки ПЛИС.
tvv
Цитата(max-i-mum @ Dec 20 2010, 13:20) *
спасиб, не обратил внимания что клок DDR (в 2 раза медленее).
Получается что сдвиговый регистр в LVDS приемнике циклона (а в циклоне он реализуется просто на обычной логике) может работать на частоте 437.5 МГц?
А более 800Mbs получается за счёт DDR модулей в I/O правильно ?

Не совсем (или совсем нет sm.gif ) на обычной логике (лично мне безрукому) такую частоту не задать ни какими констрейнами. Думаю что входные регистры лвдс не обычная логика. Попробуйте задать на входе 12бит, например для AD9228, я не смог. Но можно задать 6 бит, поставить битрейт 12*Fclock и частоту Fclock, и собрать слово на полупериоде. У меги больше возможностей, чем кажется.

Цитата(max-i-mum @ Dec 20 2010, 13:20) *
Всё правильно видеосенсор :-) с 16 выходами данных, 1- синхронизация и клок.
На счёт синхронизации Вы имеете вииду bitslip control (rx_data_align) ?
Тоже склоняюсь к использованию визарда altlvds, тем более в первый раз.

CMOSIS На 2Mp или 4? bb-offtopic.gif

Цитата(max-i-mum @ Dec 20 2010, 13:20) *
Частоту задаю я сам (всё о ней знаю), а сенсор уже выдает данные в нужной фазе со своим клоком (но частота та, что я задал).
На счёт "PLL ничего про Вашу входную частоту не знает, а все делает на делении и умножении простых чисел" не согласен, иначе зачем он её спрашивает в визарде ?
Кроме того провел эксперимент: сделал две ПЛЛ с одинаковыми коэфициентами умножения/деления но разными частотами, и посмотрел advanced настройки.
Так вот разные внутренние параметры (VCO phase tap for M counter, VCO post scale counter, .....) у ПЛЛ-ек получились разные, так что не всё равно какую частоту на ПЛЛ подавать
(при одинаковых коэфициентах умножения/деления но для разных входных частот создаются разные ПЛЛ)

Тут Вам уже все ответили. sm.gif
tvv
Цитата(max-i-mum @ Dec 20 2010, 13:20) *
Частоту задаю я сам (всё о ней знаю), а сенсор уже выдает данные в нужной фазе со своим клоком (но частота та, что я задал).
На счёт "PLL ничего про Вашу входную частоту не знает, а все делает на делении и умножении простых чисел" не согласен, иначе зачем он её спрашивает в визарде ?
Кроме того провел эксперимент: сделал две ПЛЛ с одинаковыми коэфициентами умножения/деления но разными частотами, и посмотрел advanced настройки.
Так вот разные внутренние параметры (VCO phase tap for M counter, VCO post scale counter, .....) у ПЛЛ-ек получились разные, так что не всё равно какую частоту на ПЛЛ подавать
(при одинаковых коэфициентах умножения/деления но для разных входных частот создаются разные ПЛЛ)

Как запасной "аэродром" посмотрите этот чип, spi завсегда легче программить, чем мегу.
И не забудте отписать результат, пожалуйста. rolleyes.gif
max-i-mum
Цитата(tvv @ Dec 20 2010, 18:43) *
CMOSIS На 2Mp или 4? bb-offtopic.gif

Угадали, CMOSIS blush.gif , только custom

Цитата(tvv @ Dec 21 2010, 15:45) *
Как запасной "аэродром" посмотрите этот чип, spi завсегда легче программить, чем мегу.
И не забудте отписать результат, пожалуйста. rolleyes.gif

спасибо посмотрю, как в железе запущу - отпишусь
dinam
Автор как дела? Хочу тоже применить сенсор этого производителя и тоже на Cyclone, скорее всего IV.
warrior-2001
Добрался и я до подобного сенсора. А вопрос прост - как в Cyclone 4 GX сгенерировать lvds частоту на 480 МГц. Вроде как не тянет.
blackk
Здравствуйте. Кто работал с матрицей CMOSIS CMV4000 подскажите. Подскажите ,с какого момента (относительно чего?) начинать десериализацию данных на контрольном выходе (OUTCTR). Картинку и импульсы синхронизации в принципе получил, но нарушен порядок разрядов.
doom13
Цитата(blackk @ Jul 31 2014, 15:20) *
Здравствуйте. Кто работал с матрицей CMOSIS CMV4000 подскажите. Подскажите ,с какого момента (относительно чего?) начинать десериализацию данных на контрольном выходе (OUTCTR). Картинку и импульсы синхронизации в принципе получил, но нарушен порядок разрядов.

С матрицей не работал и доку на неё посмотреть не дают, могу предположить, должна быть возможность по SPI установить тестовую последовательность на выходы данных (так для АЦП с сериализацией бит передаваемых данных делается), относительно тестовой последовательности и определяется порядок следования бит.
Kuzmi4
2 blackk
для контрольного порта - во время идла смотрите чтобы бы все биты были в нолике, кроме 9го.
blackk
Непонятно как определить положение IDLE. Необходимо определить момент когда начинать десериализацию, чтобы точно попасть в самый первый бит. Даташит
Kuzmi4
Цитата(blackk @ Aug 2 2014, 16:05) *
Непонятно как определить положение IDLE.

Праграф 4.6 TRAINING DATA:
Цитата
...The control channel does not send a training pattern, because it is used to send control information at all time. Word
alignment can be done on this channel when the sensor is idle (not exposing or sending image data). In this case all
bits of the control word are zero, except for bit [9] (= 0010 0000 0000 or 512 decimal)...

И ниже этого текста Figure 33: Training pattern location in the data and control channels.
blackk
Получается что IDLE в нормально режиме работы появляется только в самом начале, после запуска матрицы? И в этот момент нужно отловить первый бит для десериализации?
Kuzmi4
Не только в самом начале. Я сейчас далеко от документов, точно не скажу чего там надо сбрасывать чтобы был IDLE, но, если у вас ALTERA, я вам советую поставить ихний родной сердес и начать крутить его счётчик руками после подачи питания системы и вылавливать его правильное значение по выходным данным. И предварительно проверьте ДШ на предмет всяких контрол битов.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.