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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Проектирование LVDS на ПЛИС Altera, проектирование канала LVDS на Cyclone3
Александр77
сообщение Feb 15 2016, 18:36
Сообщение #31


Знающий
****

Группа: Свой
Сообщений: 564
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Цитата(Алексей_1990 @ Feb 15 2016, 14:40) *
...Теперь облегчили задачу: нужно хотябы для начала принять 16 битный параллельный поток и преобразовать его в последовательность. Скорость параллельного потока 48 МГц, выходной соответственно 769 Mgps. Выходная последовательность нужна lvds.

А насколько строго должна быть передача по одной паре?
Если требование не жесткое, то можно пустить поток по нескольким парам и снизить требования к скорости в единичном канале.
Цитата(Алексей_1990 @ Feb 15 2016, 14:40) *
Кристалл Cyclone V 5cgxfc5c6f27c7n.

Имея циклон с GXB (со скоростями больше 1Gb/s), несколько странно упираться в lvds. Это имеет смысл лишь при занятых приемо-передатчиках.
Go to the top of the page
 
+Quote Post
Алексей_1990
сообщение Feb 16 2016, 02:57
Сообщение #32


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 20-10-15
Пользователь №: 88 934



Цитата(Александр77 @ Feb 15 2016, 22:36) *
А насколько строго должна быть передача по одной паре?
Если требование не жесткое, то можно пустить поток по нескольким парам и снизить требования к скорости в единичном канале.

Имея циклон с GXB (со скоростями больше 1Gb/s), несколько странно упираться в lvds. Это имеет смысл лишь при занятых приемо-передатчиках.

Дело в том, что эта задача промежуточная. То есть у меня есть ацп с параллельным 16битным выходом, так вот преобразованный последовательный сигнал необходимо подать как раз на тот десириалайзер. Это делается дабы проверить адекватность преобразования параллельного кода в последовательный в плис.

Ну и отвечая на вопрос о жёсткости привязки к одному каналу: к сожалению, нужен только один канал.
Go to the top of the page
 
+Quote Post
Tue
сообщение Aug 17 2017, 15:10
Сообщение #33


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

Группа: Свой
Сообщений: 162
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340



Пытаюсь разработать два независимых (один туда, другой обратно) 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 (cool.gif" равным 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*cool.gif, то должно быть 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-канал. Где какие должны быть частоты ? Поняв как правильно настроить передатчики и приемники буду двигать дальше.

Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 17 2017, 15:54
Сообщение #34


Местный
***

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



LVDS у Вас запускается на DDR регистрах. Соответственно частота дессерелизации не 600 МГц а 300.
Крайне желательно после включения "обучить" приёмник. Т.е по какой-либо тестовой последовательности найти правильный порядок бит.
Например приёмник и передатчик включились не одновременно. Передатчик отдает биты в таком порядке 3-2-1-0 3-2-1-0 3-2-1-0 А приёмник ловит данные неправильно:
2-1-0-3 2-1-0-3 2-1-0-3.
Go to the top of the page
 
+Quote Post
Tue
сообщение Aug 17 2017, 16:00
Сообщение #35


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

Группа: Свой
Сообщений: 162
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340



Да, обучения я предусмотрел и сделал (в модели). Но пока до этого не дошло. Мне бы с частотами разобраться.
Go to the top of the page
 
+Quote Post
Tue
сообщение Aug 23 2017, 14:16
Сообщение #36


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

Группа: Свой
Сообщений: 162
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340



Еще остались непонятными следующие вопросы:

1. Если говорим о передаче (ALTLVDS_TX) нужно ли вместе с tx_out выдавать tx_outclock ?
1.1 Если да, то что за частоту нужно выдавать, откуда ее брать ? Частоту параллельных данных (slow_clock) ?
1.2 Выдавать как I/O Standard LVDS ? Или как обычный, не диф. парой, однополярный ?
1.3 Как вообще констрейнится через sdc такой интерфейс ?

2. По приему (ALTLVDS_RX) тоже подобные вопросы. Нужно ли заводить rx_inclock ?
2.1 Он нужен просто для получения частоты fast_clock (скажем 600Мбит/с -> 600МГц) ? Могу ли для получения такой частоты (а также rx_enable, rx_coreclock) использовать обычную PLL и любую частоту для разгона PLL ?
2.2 Непонятно про сигнал rx_channel_data_align. Дергаю его, но никакого изменения. Если речь идет о многоразрядном LVDS-канале, то каждый разряд rx_channel_data_align отвечает за свою LVDS линию и их можно дергать независимо ли это не так ?
2.3 Тот же вопрос про констрейны через sdc ?


Если у кого-то есть рабочий проект с LVDS-приемником/передатчиком для Cyclone 5, можно выложить тут архив проекта, касающийся только приема-передачи. Вместе с назначениями пинов и их I/O Standard ?
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 24 2017, 07:26
Сообщение #37


Местный
***

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



Цитата(Tue @ Aug 23 2017, 17:16) *
Еще остались непонятными следующие вопросы:

1. Если говорим о передаче (ALTLVDS_TX) нужно ли вместе с tx_out выдавать tx_outclock ?
1.1 Если да, то что за частоту нужно выдавать, откуда ее брать ? Частоту параллельных данных (slow_clock) ?
1.2 Выдавать как I/O Standard LVDS ? Или как обычный, не диф. парой, однополярный ?
1.3 Как вообще констрейнится через sdc такой интерфейс ?

2. По приему (ALTLVDS_RX) тоже подобные вопросы. Нужно ли заводить rx_inclock ?
2.1 Он нужен просто для получения частоты fast_clock (скажем 600Мбит/с -> 600МГц) ? Могу ли для получения такой частоты (а также rx_enable, rx_coreclock) использовать обычную PLL и любую частоту для разгона PLL ?
2.2 Непонятно про сигнал rx_channel_data_align. Дергаю его, но никакого изменения. Если речь идет о многоразрядном LVDS-канале, то каждый разряд rx_channel_data_align отвечает за свою LVDS линию и их можно дергать независимо ли это не так ?
2.3 Тот же вопрос про констрейны через sdc ?


Если у кого-то есть рабочий проект с LVDS-приемником/передатчиком для Cyclone 5, можно выложить тут архив проекта, касающийся только приема-передачи. Вместе с назначениями пинов и их I/O Standard ?

В модуле ALT_LVDS_RX в режиме с внутренним PLL, порт rx_inclock - это опорная частота PLL. В режиме внешнего PLL (external PLL) порт rx_inclock - частота дессерилизации (учитывайте в каком режиме работает ALT_LVDS_RX. В режиме DDR или SDR. Если в режиме DDR - то частота дессерилизации соответственно в 2 раза ниже).
Сигнал rx_channel_data_align нужен для "обучения" приёмника, подали одиночный сигнал, и приём сдвинулся на 1 бит. Таким образом вы настраиваетесь на правильный порядок приёма бит. При многоканальном приёме каждый rx_channel_data_align отвечает за свой канал. Как я понял их можно дергать независимо друг от друга. Но лучше посмотрите при моделировании.

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


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

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



Цитата(Flip-fl0p @ Aug 24 2017, 10:26) *
В модуле ALT_LVDS_RX в режиме с внутренним PLL, порт rx_inclock - это опорная частота PLL. В режиме внешнего PLL (external PLL) порт rx_inclock - частота дессерилизации (учитывайте в каком режиме работает ALT_LVDS_RX. В режиме DDR или SDR. Если в режиме DDR - то частота дессерилизации соответственно в 2 раза ниже).

Есть проект, в котором используется именно внешняя pll и data_alignment, работоспособность зависит от компиляции к компиляции, т. е. вроде проблемы с таймингами. При попытке посмотреть временные пути столкнулся с проблемой - физика реализована на жестких блоках, анализ закрыт. Как там вообще физика реализована, нужно что-то прописывать во временных ограничениях кроме мультицикла на выходе и частоты на входе pll и ее производных? Временных ошибок нет, анализ unconstraint_patch говорит, что необконстрейненых путей тоже нет.
ЗЫ. Кстати, каким образом принудительно задать режим работы DDR - там настройки такой нет, только с помощью настроек pll?
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 24 2017, 08:20
Сообщение #39


Местный
***

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



Цитата(bogaev_roman @ Aug 24 2017, 10:57) *
Есть проект, в котором используется именно внешняя pll и data_alignment, работоспособность зависит от компиляции к компиляции, т. е. вроде проблемы с таймингами. При попытке посмотреть временные пути столкнулся с проблемой - физика реализована на жестких блоках, анализ закрыт. Как там вообще физика реализована, нужно что-то прописывать во временных ограничениях кроме мультицикла на выходе и частоты на входе pll и ее производных? Временных ошибок нет, анализ unconstraint_patch говорит, что необконстрейненых путей тоже нет.

Скажу так: В LVDS SERDES Transmitter/Receiver IP Cores User Guide явного указания что-либо констрейнить кроме входного клока и данных я не увидел, хотя если честно я совсем плохой советчик по констрейнам. Изучать боле-менее осмысленно я их стал относительно недавно, для меня они ещё темный лес wacko.gif
Интересно, а можно ли как-то получить доступ к жестким блокам ALT_LVDS_RX ? Уж jочень заманчива мысль получить доступ к IR_FIFO_SERDES, который , как я понял, является "железным" высокоскоростным FIFO.
А в режиме extrenal PLL вы так-же ставили клоковый буфер между PLL и LVDS_RX ?

Сообщение отредактировал Flip-fl0p - Aug 24 2017, 08:21
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Aug 24 2017, 08:25
Сообщение #40


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

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



Цитата(Flip-fl0p @ Aug 24 2017, 11:20) *
А в режиме extrenal PLL вы так-же ставили клоковый буфер между PLL и LVDS_RX ?

Проект не мой, я пока не ковырял подробно, но на сколько я понял там буфер стоит. Тут еще момент появился - все работает со скоростью 600Mb/s в режиме SDR для циклон5, в документации вроде максимальная частота отталкивается от максимально возможной частоты с выход pll, т.е. 550МГц, что меньше требуемой.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 24 2017, 08:34
Сообщение #41


Местный
***

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



Цитата(bogaev_roman @ Aug 24 2017, 11:25) *
Проект не мой, я пока не ковырял подробно, но на сколько я понял там буфер стоит. Тут еще момент появился - все работает со скоростью 600Mb/s в режиме SDR для циклон5, в документации вроде максимальная частота отталкивается от максимально возможной частоты с выход pll, т.е. 550МГц, что меньше требуемой.

А каков коэффициент дессерелизации ? Может смысл имеет запустить в режиме DDR ? Тогда и частоту можно в 2 раза понизить...
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Aug 24 2017, 08:42
Сообщение #42


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

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



Цитата(Flip-fl0p @ Aug 24 2017, 11:34) *
А каков коэффициент дессерелизации ? Может смысл имеет запустить в режиме DDR ? Тогда и частоту можно в 2 раза понизить...

Я об этом и думаю коэффициент - 10, просто все расчеты велись изначально по этому документу https://www.altera.com/support/support-reso...142011_962.html
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 24 2017, 08:49
Сообщение #43


Местный
***

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



Цитата(bogaev_roman @ Aug 24 2017, 11:42) *
Я об этом и думаю коэффициент - 10, просто все расчеты велись изначально по этому документу https://www.altera.com/support/support-reso...142011_962.html

В каком режиме работает PLL ? А если вручную фазу частоты приёма крутить, получается стабильный приём ?
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Aug 24 2017, 08:54
Сообщение #44


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

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



Цитата(Flip-fl0p @ Aug 24 2017, 11:49) *
В каком режиме работает PLL ?

Direct mode, есть возможность подключить lvds mode. Что это даст?
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 24 2017, 09:05
Сообщение #45


Местный
***

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



Цитата(bogaev_roman @ Aug 24 2017, 11:54) *
Direct mode, есть возможность подключить lvds mode. Что это даст?

На сколько я понял там по-разному компенсируется задержка. Точно сказать не могу в чем принципиально отличаются. Где-то я видел хорошее объяснение режимов работы PLL, постараюсь найти и выложить. На сколько я понял правильнее всего применять source-synchronous compensator mode. Но тут я могу ошибаться.

Сообщение отредактировал Flip-fl0p - Aug 24 2017, 09:07
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th November 2017 - 04:46
Рейтинг@Mail.ru


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