Перейти к содержанию
    

Приём LVDS с динамической подстройкой фазы

Вы требуете слишком повышенных обязательств от lvds, даже сама альтера обязуется работать не более чем на 800МГц. Если надо больше, то для этого придумали спец. GX-трансиверы и pcml.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы требуете слишком повышенных обязательств от lvds, даже сама альтера обязуется работать не более чем на 800МГц. Если надо больше придумали пользуйте GX-трансиверы и pcml

Так я и не требую работать со скоростью более 800Mbs. Про скорость выше 800Mbs - это я сказал к слову.

На данный момент я хочу правильно обконстрейнить проект.

Ведь неправильно, что Timequest говорит, что выше 400Mbs работать не будет, а реальная железка работает на 800Mbs +, очевидно что заданы неправильные временные ограничения.

Вот я и хочу разобраться, как задать их правильно. Но, к сожалению, примера констрейнов при динамической подстройки я не нашел.

UPD.

Я не знаю как:

1. Задать констрейны на входные данные, поскольку временные отношения между данными и клоком могут быть абсолютно любые. Более того, они могут быть разные при каждом включении питания.

2. Задать констрейн на клок чтения(приёма данных), поскольку фаза этого клока не фиксированная и подстраивается при включении питания.

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сейчас в процессе написания собственного приёмника LVDS на DDR регистрах. В процессе написания приёмника столкнулся с непонятной работой PLL.

При динамическом сдвиге фазы необходимо указывать адрес частоты , которую надо двигать.

Т.е:

CLK0 - Адрес B"00000"

CLK1 - Адрес B"00001"

CLK2 - Адрес B"00010"

И.Т.Д.

Но столкнулся с тем, что при указании адреса CLK0 у меня ещё одновременно с этой частотой двигается частота CLK2....

А при указании адреса CLK2 частота не двигается вообще.

Кто сталкивался с подобным поведением ?

И вообще, где указана максимально возможная частота работы регистров. В частности модуль ALT_LVDS_RX может принять максимум 840 Mbps

А если его писать собственный приёмник, чем я сейчас и занимаюсь, то как подсчитать максимально возможную теоретическую скорость на DDR регистрах ?

Забыл написать. Проблема была не там где я её искал.

Поскольку про сдвиг частоты я определяю по косвенным признакам - изменение приёма данных по линиям, на видео это видно визуально. То оказалось всё гораздо интереснее. Проблема не в том, что частота не двигалась, а в том, что частота не создавалась. Т.е на RTL видно все частоты которые я создаю на PLL, но в technology map этой частоты уже нет. Более того, TimeQuest не видит этих частот. При чем Quartus удаляет частоты с одинаковым сдвигом фаз. Т.е когда у меня были указаны частоты

CLK0 - 200 Mhz - сдвиг фаз 0 градусов

CLK1 - 200 Mhz - сдвиг фаз 0 градусов

CLK2 - 200 Mhz - сдвиг фаз 0 градусов

Quartus удалил частоты CLK1, CLK2. И даже не выдал сообщение об этом, гад такой. А на RTL все красиво. Все частоты есть.

Если же указать каждой из частоты разные сдвиги фаз, то он их не удаляет.

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не знаю как:

1. Задать констрейны на входные данные, поскольку временные отношения между данными и клоком могут быть абсолютно любые. Более того, они могут быть разные при каждом включении питания.

2. Задать констрейн на клок чтения(приёма данных), поскольку фаза этого клока не фиксированная и подстраивается при включении питания.

Насколько я помню, эти ограничения и не нужно задавать, почитайте документацию. Требуется только прописать входную частоту, а все остальное через set_false_patch. Узкое место - переход из одного клокового домена в другой (если дальше принятые данные работают на другой частоте) - там fifo с обвязкой ставить придется и, опять же, закрывать пути для анализа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

почитайте документацию -

А какую именно из большого множества документов ?

Читал AN433, https://www.alteraforum.com/forum/showthread.php?t=4806, и ещё несколько. Но тут скорее связано в неполном понимании самого процесса расчета Timequest временных ограничений. Сейчас как раз читаю и пытаюсь понять как вообще происходит расчет временных ограничений, и пытаюсь разобраться как временные ограничения влияют на этот расчет.

Узкое место - переход из одного клокового домена в другой (если дальше принятые данные работают на другой частоте) - там fifo с обвязкой ставить придется и, опять же, закрывать пути для анализа.

Именно так и делаю. Каждый раз как я принял 10 бит по LVDS я их отправляю в FIFO. А читаю с FIFO уже на нормальной частоте.

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А какую именно из большого множества документов ?

Читал 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

На какой частоте пишете, на какой считываете - источник один, а фаза произвольная? Каким образом происходит пересинхронизация - банально пишете на одной, а считываете на другой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите, что они советуют прописывать при разных настройках корки 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

Лучше конечно выложить сюда проект, многие вопросы отпадут сами собой и появятся новые. Но у меня проект ещё очень сырой и мне просто стыдно такое выкладывать на всеобщее обозрение.

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Частота 800 МГц вытекает из 2 x максимальная частота тактирования регистров. Для этой ПЛИС 400 МГц потолок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Частота 800 МГц вытекает из 2 x максимальная частота тактирования регистров. Для этой ПЛИС 400 МГц потолок.

А где Вы нашли это если не секрет ? Я весь даташит прочитал, и нашёл только:

Global clock and Regional clock 550 MHZ (стр.39)

Максимальная скорость встроенного LVDS приёмника 875Mbs (стр.48)

А вот с какой скоростью могут работать регистры в ячейках я не увидел. Если что у меня speedgrade -C6 (5CSEMA5F31C6).

Да я и не собираюсь выжимать больше, поскольку у меня согласователь уровней CML -> LVDS ограничен скоростью 800 Mbs.

Сейчас основная задача разобраться с временными ограничениями и задать констрейны, чтобы реальная железка соответствовала тому, что говорит Timequest.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А где Вы нашли это если не секрет ? Я весь даташит прочитал, и нашёл только:

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 рисует, этот переход из одного клокового домена в другой там тоже скорее всего есть. Еще второй момент - канальная синхронизация - Вы пишете в отдельные буфера в общем случае в разные моменты времени, если чтение произойдет посредине между записями, то слово на канальном уровне разобьется на два такта ну или опять же будут временные ошибки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне тоже интересно, откуда такие цифры. Согласно документации 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:

А зачем мне делать пересинхронизацию, если я принятые данные отправляю в DC FIFO буфер ? Я принял слово и отдал в FIFO буфер. Сам буфер обеспечит синхронизацию, для этого его и ставил.

Я сейчас привожу проект к тому виду, чтобы можно было показать общественности. Думаю, после того как проект выложу (ну и фиг с ним, что сырой), диалог будет более конструктивный.

Пока выложу структуру приемника по одной линии.

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

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

 

TMDS_RX.png

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так у меня CYCLONE V а не ARRIA V :laughing:

А, перепутал, извиняюсь.

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

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

set_location

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

Хотел вначале написать да, но на самом деле нет - входные данные меняются каждый такт и актуальны они только один такт. А вот путь между parallel_reg/load_ena_reg и out_fifo в обещем случае да (если частоты от одного источника).

А зачем мне делать пересинхронизацию, если я принятые данные отправляю в DC FIFO буфер ? Я принял слово и отдал в FIFO буфер. Сам буфер обеспечит синхронизацию, для этого его и ставил.

Если буфер сделан с хорошей защитой от метастабильности и чтение происходит спустя несколько таков после записи, то пересинхронизацию делать не нужно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос топикастеру: сколько сейчас у Вас ресурсов съел проект в использумой ПЛИСине?

спасибо!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Весь проект, а это приём по DVI видеопотока и вывод его на VGA монитор, занял в районе 650 логических ячеек CYCLONE V. После оптимизации всего этого дела, проект занимает в районе 250 логических ячеек.

На данный момент не реализовал блок динамической подстройки, который с определенной периодичностью подстраивает частоты чтения. Сейчас у меня идет калибровка "в ручном режиме" Т.е я вручную устанавливаю номер частоты, которою хочу откалибровать, и вручную запускаю автомат подстройки. Так проще на отладке. Целиком весь проект в Modelsim безумно долго моделируется...

P.S. Про оптимизацию я имею ввиду когда Quartus выполнит полную компиляцию проекта.

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо! Довольно немного.

Дело в том, что собираюсь сделать что-то подобное на MAX10 и оцениваю необходимую "жирность" чипа. Ставить внешний ресивер (например, TFP401) пока нет желания :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...