реклама на сайте
подробности

 
 
5 страниц V  « < 2 3 4 5 >  
Reply to this topicStart new topic
> Приём LVDS с динамической подстройкой фазы, Как это реализовать на Altera, не имея спец. блоков DPA
Magnum
сообщение Aug 4 2017, 10:22
Сообщение #46


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 26-05-05
Пользователь №: 5 397



Вы требуете слишком повышенных обязательств от lvds, даже сама альтера обязуется работать не более чем на 800МГц. Если надо больше, то для этого придумали спец. GX-трансиверы и pcml.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 4 2017, 10:27
Сообщение #47


Местный
***

Группа: Участник
Сообщений: 430
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(Magnum @ Aug 4 2017, 13:22) *
Вы требуете слишком повышенных обязательств от lvds, даже сама альтера обязуется работать не более чем на 800МГц. Если надо больше придумали пользуйте GX-трансиверы и pcml

Так я и не требую работать со скоростью более 800Mbs. Про скорость выше 800Mbs - это я сказал к слову.
На данный момент я хочу правильно обконстрейнить проект.
Ведь неправильно, что Timequest говорит, что выше 400Mbs работать не будет, а реальная железка работает на 800Mbs +, очевидно что заданы неправильные временные ограничения.
Вот я и хочу разобраться, как задать их правильно. Но, к сожалению, примера констрейнов при динамической подстройки я не нашел.
UPD.
Я не знаю как:
1. Задать констрейны на входные данные, поскольку временные отношения между данными и клоком могут быть абсолютно любые. Более того, они могут быть разные при каждом включении питания.
2. Задать констрейн на клок чтения(приёма данных), поскольку фаза этого клока не фиксированная и подстраивается при включении питания.

Сообщение отредактировал Flip-fl0p - Aug 4 2017, 11:22
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 4 2017, 12:50
Сообщение #48


Местный
***

Группа: Участник
Сообщений: 430
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(Flip-fl0p @ Jul 27 2017, 10:59) *
Сейчас в процессе написания собственного приёмника 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 - Aug 4 2017, 12:51
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Aug 4 2017, 12:56
Сообщение #49


Профессионал
*****

Группа: Свой
Сообщений: 1 039
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(Flip-fl0p @ Aug 4 2017, 13:27) *
Я не знаю как:
1. Задать констрейны на входные данные, поскольку временные отношения между данными и клоком могут быть абсолютно любые. Более того, они могут быть разные при каждом включении питания.
2. Задать констрейн на клок чтения(приёма данных), поскольку фаза этого клока не фиксированная и подстраивается при включении питания.

Насколько я помню, эти ограничения и не нужно задавать, почитайте документацию. Требуется только прописать входную частоту, а все остальное через set_false_patch. Узкое место - переход из одного клокового домена в другой (если дальше принятые данные работают на другой частоте) - там fifo с обвязкой ставить придется и, опять же, закрывать пути для анализа.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 4 2017, 13:10
Сообщение #50


Местный
***

Группа: Участник
Сообщений: 430
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



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

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

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

Сообщение отредактировал Flip-fl0p - Aug 4 2017, 13:11
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Aug 4 2017, 13:42
Сообщение #51


Профессионал
*****

Группа: Свой
Сообщений: 1 039
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(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
На какой частоте пишете, на какой считываете - источник один, а фаза произвольная? Каким образом происходит пересинхронизация - банально пишете на одной, а считываете на другой?
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 4 2017, 14:15
Сообщение #52


Местный
***

Группа: Участник
Сообщений: 430
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(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
Лучше конечно выложить сюда проект, многие вопросы отпадут сами собой и появятся новые. Но у меня проект ещё очень сырой и мне просто стыдно такое выкладывать на всеобщее обозрение.

Сообщение отредактировал Flip-fl0p - Aug 4 2017, 14:19
Go to the top of the page
 
+Quote Post
Corner
сообщение Aug 7 2017, 12:58
Сообщение #53


Профессионал
*****

Группа: Участник
Сообщений: 1 067
Регистрация: 11-12-12
Пользователь №: 74 815



Частота 800 МГц вытекает из 2 x максимальная частота тактирования регистров. Для этой ПЛИС 400 МГц потолок.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 7 2017, 13:36
Сообщение #54


Местный
***

Группа: Участник
Сообщений: 430
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(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.
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Aug 8 2017, 07:39
Сообщение #55


Профессионал
*****

Группа: Свой
Сообщений: 1 039
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(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 рисует, этот переход из одного клокового домена в другой там тоже скорее всего есть. Еще второй момент - канальная синхронизация - Вы пишете в отдельные буфера в общем случае в разные моменты времени, если чтение произойдет посредине между записями, то слово на канальном уровне разобьется на два такта ну или опять же будут временные ошибки.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 8 2017, 07:52
Сообщение #56


Местный
***

Группа: Участник
Сообщений: 430
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(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 мультицикловым или нет.



Сообщение отредактировал Flip-fl0p - Aug 8 2017, 07:56
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Aug 8 2017, 08:29
Сообщение #57


Профессионал
*****

Группа: Свой
Сообщений: 1 039
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(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 буфер. Сам буфер обеспечит синхронизацию, для этого его и ставил.

Если буфер сделан с хорошей защитой от метастабильности и чтение происходит спустя несколько таков после записи, то пересинхронизацию делать не нужно.
Go to the top of the page
 
+Quote Post
Димыч
сообщение Aug 8 2017, 14:39
Сообщение #58


Частый гость
**

Группа: Свой
Сообщений: 138
Регистрация: 1-02-05
Из: the Earth
Пользователь №: 2 331



Вопрос топикастеру: сколько сейчас у Вас ресурсов съел проект в использумой ПЛИСине?
спасибо!
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 8 2017, 16:41
Сообщение #59


Местный
***

Группа: Участник
Сообщений: 430
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Весь проект, а это приём по DVI видеопотока и вывод его на VGA монитор, занял в районе 650 логических ячеек CYCLONE V. После оптимизации всего этого дела, проект занимает в районе 250 логических ячеек.
На данный момент не реализовал блок динамической подстройки, который с определенной периодичностью подстраивает частоты чтения. Сейчас у меня идет калибровка "в ручном режиме" Т.е я вручную устанавливаю номер частоты, которою хочу откалибровать, и вручную запускаю автомат подстройки. Так проще на отладке. Целиком весь проект в Modelsim безумно долго моделируется...
P.S. Про оптимизацию я имею ввиду когда Quartus выполнит полную компиляцию проекта.

Сообщение отредактировал Flip-fl0p - Aug 8 2017, 16:52
Go to the top of the page
 
+Quote Post
Димыч
сообщение Aug 9 2017, 05:23
Сообщение #60


Частый гость
**

Группа: Свой
Сообщений: 138
Регистрация: 1-02-05
Из: the Earth
Пользователь №: 2 331



Спасибо! Довольно немного.
Дело в том, что собираюсь сделать что-то подобное на MAX10 и оцениваю необходимую "жирность" чипа. Ставить внешний ресивер (например, TFP401) пока нет желания sm.gif
Go to the top of the page
 
+Quote Post

5 страниц V  « < 2 3 4 5 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th December 2017 - 21:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016