Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Приём LVDS с динамической подстройкой фазы
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Страницы: 1, 2
bogaev_roman
Цитата(Flip-fl0p @ Aug 4 2017, 16:10) *
А какую именно из большого множества документов ?
Читал AN433, https://www.alteraforum.com/forum/showthread.php?t=4806, и ещё несколько. Но тут скорее связано в неполном понимании самого процесса расчета Timequest временных ограничений. Сейчас как раз читаю и пытаюсь понять как вообще происходит расчет временных ограничений, и пытаюсь разобраться как временные ограничения влияют на этот расчет.
Именно так и делаю. Каждый раз как я принял 10 бит по LVDS я их отправляю в FIFO. А читаю с FIFO уже на нормальной частоте.

Посмотрите, что они советуют прописывать при разных настройках корки lvds serdes https://www.altera.com/content/dam/altera-w.../ug_altlvds.pdf
На какой частоте пишете, на какой считываете - источник один, а фаза произвольная? Каким образом происходит пересинхронизация - банально пишете на одной, а считываете на другой?
Flip-fl0p
Цитата(bogaev_roman @ Aug 4 2017, 16:42) *
Посмотрите, что они советуют прописывать при разных настройках корки lvds serdes https://www.altera.com/content/dam/altera-w.../ug_altlvds.pdf
На какой частоте пишете, на какой считываете - источник один, а фаза произвольная? Каким образом происходит пересинхронизация - банально пишете на одной, а считываете на другой?

На опорной частоте TMDS_CLK - 40 МГц я запускаю PLL. PLL в режиме source synchronous, хотя в моем случае это никак не влияет на результат.
Поскольку у меня прием идет на DDR регистрах то на PLL я формирую следующие частоты:
CLK_40MHz - 40 МГц
RX0_CLK -200 МГц
RX1_CLK -200 МГц
RX2_CLK -200 МГц
Частоты RX0_CLK, RX1_CLK, RX2_CLK изначально имеют разные сдвиги фаз. Иначе Quartus удаляет частоты RX1_CLK и RX2_CLK. Но на начальный сдвиг фаз нам наплевать, поскольку всё равно мы их двигаем блоком подстройки фазы.
Запрос на чтение FIFO у меня постоянно разрешен и частота чтения FIFO - это частота CLK_40MHz.
Принимаю данные на частоте дессерилизации.
Т.е для приёма данных по линии RX0 я применяю частоту RX0_CLK, которую блоком подстройки фазы я устанавливаю в центр окна.
Каждые 5 тактов частоты RX0_CLK я формирую запрос на запись данных в FIFO. Частота записи у меня естественно RX0_CLK .
Для каждой линии приёма у меня свой FIFO буфер. Общее для них это частота чтения - CLK_40MHz
Лучше конечно выложить сюда проект, многие вопросы отпадут сами собой и появятся новые. Но у меня проект ещё очень сырой и мне просто стыдно такое выкладывать на всеобщее обозрение.
Corner
Частота 800 МГц вытекает из 2 x максимальная частота тактирования регистров. Для этой ПЛИС 400 МГц потолок.
Flip-fl0p
Цитата(Corner @ Aug 7 2017, 15:58) *
Частота 800 МГц вытекает из 2 x максимальная частота тактирования регистров. Для этой ПЛИС 400 МГц потолок.

А где Вы нашли это если не секрет ? Я весь даташит прочитал, и нашёл только:
Global clock and Regional clock 550 MHZ (стр.39)
Максимальная скорость встроенного LVDS приёмника 875Mbs (стр.48)
А вот с какой скоростью могут работать регистры в ячейках я не увидел. Если что у меня speedgrade -C6 (5CSEMA5F31C6).
Да я и не собираюсь выжимать больше, поскольку у меня согласователь уровней CML -> LVDS ограничен скоростью 800 Mbs.
Сейчас основная задача разобраться с временными ограничениями и задать констрейны, чтобы реальная железка соответствовала тому, что говорит Timequest.
bogaev_roman
Цитата(Flip-fl0p @ Aug 7 2017, 16:36) *
А где Вы нашли это если не секрет ? Я весь даташит прочитал, и нашёл только:
Global clock and Regional clock 550 MHZ (стр.39)
Максимальная скорость встроенного LVDS приёмника 875Mbs (стр.48)
А вот с какой скоростью могут работать регистры в ячейках я не увидел. Если что у меня speedgrade -C6 (5CSEMA5F31C6).

Мне тоже интересно, откуда такие цифры. Согласно документации https://www.altera.com/content/dam/altera-w...-v/av_51002.pdf
Global clock and Regional clock 525MHz (1-43)
SERDES factor J = 1 to 2, Uses DDR Registers (1-51, (79*) - The maximum ideal data rate is the SERDES factor (J) x the PLL maximum output frequency (fOUT), provided you can close the design timing and
the signal integrity simulation is clean) Далее, кстати, на 1-44 fOUT_max=400MHz (This specification is limited by the lower of the two: I/O fMAX or FOUT of the PLL). Но это в случае без DPA, для DPA фактор сериализации начинается от 4.
Цитата
Каждые 5 тактов частоты RX0_CLK я формирую запрос на запись данных в FIFO. Частота записи у меня естественно RX0_CLK .
Для каждой линии приёма у меня свой FIFO буфер. Общее для них это частота чтения - CLK_40MHz

У Вас нет никакой пересинхронизации и т.к. фазовые соотношения между стробом на запись и частотой на чтение могут быть любые, в общем случае схема работать стабильно не будет. Кстати, а что там за временные ошибки timequest рисует, этот переход из одного клокового домена в другой там тоже скорее всего есть. Еще второй момент - канальная синхронизация - Вы пишете в отдельные буфера в общем случае в разные моменты времени, если чтение произойдет посредине между записями, то слово на канальном уровне разобьется на два такта ну или опять же будут временные ошибки.
Flip-fl0p
Цитата(bogaev_roman @ Aug 8 2017, 10:39) *
Мне тоже интересно, откуда такие цифры. Согласно документации https://www.altera.com/content/dam/altera-w...-v/av_51002.pdf
Global clock and Regional clock 525MHz (1-43)
SERDES factor J = 1 to 2, Uses DDR Registers (1-51, (79*) - The maximum ideal data rate is the SERDES factor (J) x the PLL maximum output frequency (fOUT), provided you can close the design timing and
the signal integrity simulation is clean) Далее, кстати, на 1-44 fOUT_max=400MHz (This specification is limited by the lower of the two: I/O fMAX or FOUT of the PLL). Но это в случае без DPA, для DPA фактор сериализации начинается от 4.

У Вас нет никакой пересинхронизации и т.к. фазовые соотношения между стробом на запись и частотой на чтение могут быть любые, в общем случае схема работать стабильно не будет. Кстати, а что там за временные ошибки timequest рисует, этот переход из одного клокового домена в другой там тоже скорее всего есть. Еще второй момент - канальная синхронизация - Вы пишете в отдельные буфера в общем случае в разные моменты времени, если чтение произойдет посредине между записями, то слово на канальном уровне разобьется на два такта ну или опять же будут временные ошибки.

Так у меня CYCLONE V а не ARRIA V laughing.gif
А зачем мне делать пересинхронизацию, если я принятые данные отправляю в DC FIFO буфер ? Я принял слово и отдал в FIFO буфер. Сам буфер обеспечит синхронизацию, для этого его и ставил.
Я сейчас привожу проект к тому виду, чтобы можно было показать общественности. Думаю, после того как проект выложу (ну и фиг с ним, что сырой), диалог будет более конструктивный.
Пока выложу структуру приемника по одной линии.
А слаки возникают из-за того, что данные слишком долго идут от выводов DDR регистра до регистра-приёмника.
Ну и заодно вопрос про мультициклы. Является ли путь от SHREG до PARALEL_REG мультицикловым или нет.

bogaev_roman
Цитата(Flip-fl0p @ Aug 8 2017, 10:52) *
Так у меня CYCLONE V а не ARRIA V laughing.gif

А, перепутал, извиняюсь.
Цитата
А слаки возникают из-за того, что данные слишком долго идут от выводов DDR регистра до регистра-приёмника.

Крайний метод - прибить гвоздями поближе к пинам -
Цитата
set_location

Цитата
Ну и заодно вопрос про мультициклы. Является ли путь от SHREG до PARALEL_REG мультицикловым или нет.

Хотел вначале написать да, но на самом деле нет - входные данные меняются каждый такт и актуальны они только один такт. А вот путь между parallel_reg/load_ena_reg и out_fifo в обещем случае да (если частоты от одного источника).
Цитата
А зачем мне делать пересинхронизацию, если я принятые данные отправляю в DC FIFO буфер ? Я принял слово и отдал в FIFO буфер. Сам буфер обеспечит синхронизацию, для этого его и ставил.

Если буфер сделан с хорошей защитой от метастабильности и чтение происходит спустя несколько таков после записи, то пересинхронизацию делать не нужно.
Димыч
Вопрос топикастеру: сколько сейчас у Вас ресурсов съел проект в использумой ПЛИСине?
спасибо!
Flip-fl0p
Весь проект, а это приём по DVI видеопотока и вывод его на VGA монитор, занял в районе 650 логических ячеек CYCLONE V. После оптимизации всего этого дела, проект занимает в районе 250 логических ячеек.
На данный момент не реализовал блок динамической подстройки, который с определенной периодичностью подстраивает частоты чтения. Сейчас у меня идет калибровка "в ручном режиме" Т.е я вручную устанавливаю номер частоты, которою хочу откалибровать, и вручную запускаю автомат подстройки. Так проще на отладке. Целиком весь проект в Modelsim безумно долго моделируется...
P.S. Про оптимизацию я имею ввиду когда Quartus выполнит полную компиляцию проекта.
Димыч
Спасибо! Довольно немного.
Дело в том, что собираюсь сделать что-то подобное на MAX10 и оцениваю необходимую "жирность" чипа. Ставить внешний ресивер (например, TFP401) пока нет желания sm.gif
Corner
Цитата(Димыч @ Aug 9 2017, 08:23) *
Спасибо! Довольно немного.
Дело в том, что собираюсь сделать что-то подобное на MAX10 и оцениваю необходимую "жирность" чипа. Ставить внешний ресивер (например, TFP401) пока нет желания sm.gif

У МАХ10 есть DDR?
Flip-fl0p
Цитата(Corner @ Aug 15 2017, 19:15) *
У МАХ10 есть DDR?

Если верить "MAX 10 External Memory Interface User Guide" то есть DDR регистры. И судя по "MAX 10 High-Speed LVDS I/O User Guide" их можно применять как приёмники LVDS
doom13
Приветствую.
Смотрю доку на Cyclone 10, правильно ли понимаю, что блок DPA работает автоматом без всяких управляющих сигналов? Т.е. подобрать определенное значение задержки не получится, все настроится автоматом оптимально?
_Anatoliy
Цитата(doom13 @ Feb 12 2018, 14:13) *

Очень похоже что так.
Цитата
Dynamic phase alignment (DPA) is independent of the skew between channels or between channels and the clock, and it continuously aligns the data to the clock.
doom13
Т.е. оно круче чем у Xilinx (Kintex-7), там автомат калибровки необходим, но тапов там больше.

Всё само сделает, круто biggrin.gif

Цитата(_Anatoliy)

В Arria V использовали эти блоки?
_Anatoliy
Цитата(_Anatoliy)
В Arria V использовали эти блоки?

Пока нет. Если бы использовал ответил бы гораздо уверенней laughing.gif
По структуре шины управления не нашёл.
Flip-fl0p
Цитата(_Anatoliy @ Feb 12 2018, 15:15) *
Пока нет. Если бы использовал ответил бы гораздо уверенней laughing.gif
По структуре шины управления не нашёл.

А есть где нибудь информация по какому принципу работают блоки DPA, т.е. как определяется центр окошка ?
_Anatoliy
Цитата(Flip-fl0p @ Feb 14 2018, 09:18) *
А есть где нибудь информация по какому принципу работают блоки DPA, т.е. как определяется центр окошка ?

А откуда информация что DPA подстраивается именно под максимум глазка? Можете указать документ?
Flip-fl0p
Цитата(_Anatoliy @ Feb 14 2018, 12:45) *
А откуда информация что DPA подстраивается именно под максимум глазка? Можете указать документ?

Прямо об этом вроде нигде не говорится.
Но вот тут вот:
https://www.altera.com/en_US/pdfs/literature/an/an236.pdf

Код
The dynamic phase aligner block uses the incoming
data and clocks to generate a new clock that is phase-aligned with the data.
_Anatoliy
Цитата(Flip-fl0p @ Feb 14 2018, 13:01) *
Прямо об этом вроде нигде не говорится.

Да, я тоже уже успел кое что найти. А то сбило что у них режимы либо DPA либо CDR, а это всё таки не одно и то же если DPA работает по глазку.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.