Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум разработчиков электроники ELECTRONIX.ru _ Работаем с ПЛИС, области применения, выбор _ LVDS под одной паре (без клока)

Автор: AVR Sep 25 2018, 10:21

Есть связь из Spartan 7 в Cyclone 10 LP по одной дифференциальной паре проводников (есть и обратная пара). Хочется понять, как действовать, если хочется передавать данные без передачи клока?
Допустим, задействую такой код 8/10, где байт будет передаваться так, чтобы хотя бы раз в три бита будет инверсия. Ведь сам поток данных это по сути прерывистые нерегулярные такты.
Или например, буду добавлять преамбулы в начала пакетов, escape-последовательности.

Вообще, реально ли какими-то алгоритмическими мерами и кодами, просто принимая поток с LVDS (от 10 до 400 Мбит/с, но каждый раз это константа), учитывая что тактовые не синхронные (хотя их стабильность 50 ppm) и плавают, что мы не знаем где центр глаза, как-то принимать данные, как-то делать обнаруживать битовые сдвиги и компенсировать их?

Нужно именно не задействовать хитрые режимы PLL, задержки, приемы на разных фазах, потому что возможности Cyclone 10 LP тут ничтожны. Или я ошибаюсь?

Опираюсь на бутылочное горлышко - на ту ПЛИС из этих двух, что имеет наименьшие возможности (C10LP), пусть будет единое со Spartan 7 решение.

Автор: serj1979 Sep 25 2018, 10:59

Цитата(AVR @ Sep 25 2018, 13:21) *
Вообще, реально ли какими-то алгоритмическими мерами и кодами, просто принимая поток с LVDS (от 10 до 400 Мбит/с, но каждый раз это константа), учитывая что тактовые не синхронные (хотя их стабильность 50 ppm) и плавают, что мы не знаем где центр глаза, как-то принимать данные, как-то делать обнаруживать битовые сдвиги и компенсировать их?

Без скремблирования (или что то наподобие) тут ИМХО трудно будет, какая тактовая частота ПЛИС?
А далеко передавать на такой "бешеной" скорости?


Автор: RobFPGA Sep 25 2018, 11:00

Приветствую!

Цитата(AVR @ Sep 25 2018, 13:21) *
Есть связь из Spartan 7 в Cyclone 10 LP по одной дифференциальной паре проводников (есть и обратная пара). Хочется понять, как действовать, если хочется передавать данные без передачи клока?
...
Вообще, реально ли какими-то алгоритмическими мерами и кодами, просто принимая поток с LVDS (от 10 до 400 Мбит/с, но каждый раз это константа), учитывая что тактовые не синхронные (хотя их стабильность 50 ppm) и плавают, что мы не знаем где центр глаза, как-то принимать данные, как-то делать обнаруживать битовые сдвиги и компенсировать их?
Однако! - самое первое что на ум приходит Манчестер-II - восстанавливаем клок на приеме XORя поток с самим собой задержанным на пол такта жестко заданными задержками. Не знаю как на счет 400 Mbit но на 100 думаю запустится.

Удачи! Rob.







Автор: blackfin Sep 25 2018, 11:05

Цитата(AVR @ Sep 25 2018, 13:21) *
Есть связь из Spartan 7 в Cyclone 10 LP по одной дифференциальной паре проводников (есть и обратная пара). Хочется понять, как действовать, если хочется передавать данные без передачи клока?

ИМХО, забыть про LVDS, по одному проводу передавать клок, а по другому данные.

Автор: AVR Sep 25 2018, 11:11

Цитата(blackfin @ Sep 25 2018, 14:05) *
ИМХО, забыть про LVDS, по одному проводу передавать клок, а по другому данные.
Тот же USB2.0 передает по двум проводам 480 Mb/s на расстояние до пяти метров и без всяких LVDS..

Вообще-то там диффпара, причем на low/full и high speed.

Вот тот же PCI-E 1.0 мог же работать от разных клоков - только данные идут, но там и приемная часть сильно хитрая, ничем не ограниченная в возможностях.

А я пока что внутренне не верю что эта задача не решается, чую есть тут способ. Расстояние всего 10-15 см.

Автор: Aner Sep 25 2018, 11:12

QUOTE (blackfin @ Sep 25 2018, 14:05) *
ИМХО, забыть про LVDS, по одному проводу передавать клок, а по другому данные.

Это как так ?
... по одному проводу передавать клок, а по другому данные.
Относительно GND?
Да, чудненько так!



Автор: blackfin Sep 25 2018, 11:14

Цитата(Aner @ Sep 25 2018, 14:12) *
Это как так ?
... по одному проводу передавать клок, а по другому данные.
Относительно GND?
Да, чудненько так!

Память DDR3 именно так и работает.. biggrin.gif

Автор: Aner Sep 25 2018, 11:19

QUOTE (blackfin @ Sep 25 2018, 14:14) *
Память DDR3 именно так и работает.. biggrin.gif

Не нужно забывать, что там по стандарту в DDR3/4 внутри лог автоматы с обоих сторон интерфейса с подстройкой фронтов. А не просто лог вход/выход.
Так что не так.

Автор: AVR Sep 25 2018, 11:27

Отставить флуд! rolleyes.gif
В задаче я вижу основную проблему: локальный клок приемника может уехать на середину места смены битового значения (на край глаз-диаграммы). И тогда битовый поток будет иметь множественные фатальные искажения. Если принимать на клоке с 8 разными фазами (как я видел в доках от TI) - то там да, можно будет на основе преамбулы очередного пакета выбирать версию с наилучшим положением, и этого выбора хватит на весь пакет, пакеты у меня до 2048 байт.

Основное решение пока вижу в приеме на 8 фазах + алгоритмическая некая обработка.

Вопрос: как это сделать на Cyclone 10 LP, ведь там LVDS приемник не позволяет ответвить 8 версий с 8 фазами.
Второе, может у PLL есть какая-то возможность с каждым фронтом данных, не реагируя на пропуски, подстраиваться под этот поток?

Автор: blackfin Sep 25 2018, 11:30

Цитата(Aner @ Sep 25 2018, 14:19) *
Не нужно забывать, что там по стандарту в DDR3/4 внутри лог автоматы с обоих сторон интерфейса с подстройкой фронтов. А не просто лог вход/выход.

Во-первых, в Spartan 7 есть регулируемые линии задержки по входам:
Цитата
I/O Logic

Input Delay
All inputs can be configured as either combinatorial or registered. Double data rate (DDR) is supported by all inputs and outputs. Any input can be individually delayed by up to 32 increments of 78ps, 52ps, or 39ps each. Such delays are implemented as IDELAY. The number of delay steps can be set by configuration and can also be incremented or decremented while in use.

ISERDES and OSERDES
Many applications combine high-speed, bit-serial I/O with slower parallel operation inside the device. This requires a serializer and deserializer (SerDes) inside the I/O structure. Each I/O pin possesses an 8-bit IOSERDES (ISERDES and OSERDES) capable of performing serial-to-parallel or parallel-to-serial conversions with programmable widths of 2, 3, 4, 5, 6, 7, or 8 bits. By cascading two IOSERDES from two adjacent pins (default from differential I/O), wider width conversions of 10 and 14 bits can also be supported. The ISERDES has a special oversampling mode capable of asynchronous data recovery for applications like a 1.25Gb/s LVDS I/O-based SGMII interface.


Во-вторых, 400 Mb/s это все-таки не 800 Mb/s на которых работает контроллер DDR3 Spartan'a:
Цитата
The SSTL I/O standard can support data rates of up to 800Mb/s for DDR3 interfacing applications.

См. DS171, page 5,6

Автор: MegaVolt Sep 25 2018, 11:39

Цитата(AVR @ Sep 25 2018, 13:21) *
Допустим, задействую такой код 8/10, где байт будет передаваться так, чтобы хотя бы раз в три бита будет инверсия. Ведь сам поток данных это по сути прерывистые нерегулярные такты.
Или например, буду добавлять преамбулы в начала пакетов, escape-последовательности.

Вообще, реально ли какими-то алгоритмическими мерами и кодами, просто принимая поток с LVDS (от 10 до 400 Мбит/с, но каждый раз это константа), учитывая что тактовые не синхронные (хотя их стабильность 50 ppm) и плавают, что мы не знаем где центр глаза, как-то принимать данные, как-то делать обнаруживать битовые сдвиги и компенсировать их?


Не вижу больших проблем. Разве что частоты 400 могут вызывать вопросы.

Путь номер 1. Затащить данные на встроенные PLL и получить внутренний клок привязанный к данным. Потом принятые данные перенести в другой клоковый домен.
Путь номер 2. Тактируем с передискретизацией и воостанавливаем поток данных. Подробности описаны например тут http://electronix.ru/redirect.php?https://www.xilinx.com/support/documentation/application_notes/xapp250.pdf

Автор: AVR Sep 25 2018, 11:47

Цитата(blackfin @ Sep 25 2018, 14:30) *
Во-первых, в Spartan 7 есть регулируемые линии задержки по входам:

Я недавно создавал тему тут, как раз по этому вопросу. На тему что делать, если подобных задержек в C10LP нету.
В Spartan7 они есть, и работают, правда позволяют регулировать задержку +- 0,5 клока, причем идиотским способом. Теоретически, +- 0,5 времени символа достаточно, только вот на границе -0,5 там невозможно быстро перейти к +0,5. Половина диапазона там тупо недоступна. Может я что-то не понял, но тем не менее - функция не вполне рабочей кажется.

На первом макете некоего устройства (не скоро сделают) у меня будет клоковая линия. Но это сейчас, потом от нее нужно будет отойти как от костыля. И вот, может ПЛИС выбрать нужно другую? Может Cyclone 10 GX? И вот в ней уже я знаю есть многое что нужно, те же DPA.

Вижу такой документ: http://electronix.ru/redirect.php?https://www.ti.com/lit/ds/slls570d/slls570d.pdf
Тут как раз передача данных без клока по LVDS, и при этом в приемнике есть Clock Recovery.

Автор: DuHast Sep 25 2018, 11:54

А вариант с внешней микросхемой СDR не рассматриваете?

Автор: AVR Sep 25 2018, 11:54

Цитата(MegaVolt @ Sep 25 2018, 14:39) *
Путь номер 1. Затащить данные на встроенные PLL и получить внутренний клок привязанный к данным. Потом принятые данные перенести в другой клоковый домен.

Это называется CDR? Clock&Data Recovery?
Цитата
Путь номер 2. Тактируем с передискретизацией и воостанавливаем поток данных. Подробности описаны например тут http://electronix.ru/redirect.php?https://www.xilinx.com/support/documentation/application_notes/xapp250.pdf

На Spartan7 не проблема, это ясно, а вот на C10LP?

Вот эти варианты я и рассматриваю как самые реальные. Но с точки зрения самой "тупой" ПЛИС из этих двух.
Решение создать клок на основе данных а затем через FIFO перетащить в основной домен - идеальное решение.
Но как называется эта функция? Я запутался в куче этих всяких режимов и опций. Это и есть CDR - верно?

Цитата(DuHast @ Sep 25 2018, 14:54) *
А вариант с внешней микросхемой SDR не рассматриваете?

Нет, причем это требование "свыше". Вот для себя для дома-хозяйства, я бы именно так и сделал в этом случае - ставил бы микросхемы, например SN65LV1023A + SN65LV1224A.

Автор: blackfin Sep 25 2018, 11:57

Цитата(AVR @ Sep 25 2018, 14:47) *
Может я что-то не понял, но тем не менее - функция не вполне рабочей кажется.

А xapp1017 и xapp585 читали?

Цитата(AVR @ Sep 25 2018, 14:47) *
И вот, может ПЛИС выбрать нужно другую? Может Cyclone 10 GX?

Странный выбор.. Тогда уж лучше выбрать Spartan-7 + Artix-7 (или Kintex-7, или Kintex Ultra)..

Кстати, ещё раз процитирую DS171:
Цитата
The ISERDES has a special oversampling mode capable of asynchronous data recovery for applications like a 1.25Gb/s LVDS I/O-based SGMII interface.

Если я правильно понимаю, Spartan таки умеет аппаратно восстанавливать клок из данных. То есть, достаточно одной пары LVDS..

Цитата
The serial gigabit media-independent interface (SGMII) is a variant of MII, a standard interface used to connect an Ethernet MAC block to a PHY. It is used for Gigabit Ethernet but can also carry 10/100 Mbit/s Ethernet.

It uses differential pairs at 625 MHz clock frequency DDR for TX and RX data and TX and RX clocks. It differs from GMII by its low-power and low pin-count serial 8b/10b-coded interface (commonly referred to as a SerDes). Transmit and receive path each use one differential pair for data and another differential pair for clock. The TX/RX clocks must be generated on device output but are optional on device input (clock recovery may be used alternatively).

Автор: umarsohod Sep 25 2018, 12:13

Когдато давно, соединял две CPLD сдедующим образом : передача одного бита происходила за 3 цикла,
сначала "1" затем, собственно один бит данных, затем "0". На приемной стороне этот поток подавался на вход "D"
триггера, а на клок этот-же поток, только задержанный на 1.5 цикла. Таким образом при тактовой в 200Мгц, скорость
обмена была 66 мегабит.
10LP в "DDR" -режиме может работать на 800 Мгц, и таким способом можно получить скорость 260 мбит.
Если на приемной стороне есть свободный PLL, то можно передавать 2 бита за 5 циклов и получить скорость 320 мбит.

Автор: Leka Sep 25 2018, 12:14

Если Cyclone10LP не хуже Сyclone4, то задача решаемая.
Оптимально делать не равные частоты у приемника и передатчика, а чуть разные, чтобы гарантировать знак расхождения частот.

Автор: andrew_b Sep 25 2018, 12:30

Цитата(umarsohod @ Sep 25 2018, 15:13) *
этот-же поток, только задержанный на 1.5 цикла.

Во первых, "же" никогда не пишется через дефис. Либо слитно, либо раздельно: "тоже"/"то же". Как, кстати, и "бы": "чтобы"/"что бы".
Во-вторых, как вы задерживали на полтора такта?

Автор: MegaVolt Sep 25 2018, 12:44

Цитата(AVR @ Sep 25 2018, 14:54) *
На Spartan7 не проблема, это ясно, а вот на C10LP?
А что в нём нет триггеров? Или нельзя сдвинуть клок на 90градусов? По моему ПЛИСы сейчас же примерно равны. Плюс минус лапоть.
Цитата
Вот эти варианты я и рассматриваю как самые реальные. Но с точки зрения самой "тупой" ПЛИС из этих двух.
Решение создать клок на основе данных а затем через FIFO перетащить в основной домен - идеальное решение.
Тогда манчестер вам в руки.
Цитата
Но как называется эта функция? Я запутался в куче этих всяких режимов и опций. Это и есть CDR - верно?
Способов восстановления клока есть несколько.
1. Передавать клок в данных (Манчестер). Скорость передачи в два раза ниже чем может позволить линия зато всё просто на приёмной стороне.
2. Восстановление клока на PLL (DCM) установленных внутри ПЛИС.
3. Восстановление клока на специальных внешних микросхемах которые по сути представляют собой тот же PLL

Автор: AVR Sep 25 2018, 12:45

Я месяц назад создавал тему примерно, там выяснили что для динамической подстройки фазы требуется именно DPA.
Сейчас я осознал, что то что хочется сейчас, называется soft-CDR, я нашел у альтеры доку где показано на примере SGMII, но опять упираюсь в то, что у C10LP нет этой функции.

Похоже облом, PLL в C10LP крайне примитивный, и тему можно закрывать с результатом: реализовать никак.

Самый нормальный варик - поставить внешнюю LVDSину с Clock Recovery, коих много, но насяльника не велит. Там есть причины.

Автор: MegaVolt Sep 25 2018, 12:47

Цитата(blackfin @ Sep 25 2018, 14:57) *
Если я правильно понимаю, Spartan таки умеет аппаратно восстанавливать клок из данных. То есть, достаточно одной пары LVDS..
По моим сведениям не умеет. По крайней мере аппаратно. Если есть другие сведения буду благодарен. Из приведённой цитаты это не следует.

Автор: AVR Sep 25 2018, 12:50

Цитата(MegaVolt @ Sep 25 2018, 15:44) *
1. Передавать клок в данных (Манчестер). Скорость передачи в два раза ниже чем может позволить линия зато всё просто на приёмной стороне.
2. Восстановление клока на PLL (DCM) установленных внутри ПЛИС.
3. Восстановление клока на специальных внешних микросхемах которые по сути представляют собой тот же PLL

1. Я понимаю что такое манчестер, только не очень ясно - так что там с этим манчестером на входе делать? Что если биты манчестера встанут неудобно относительно клока? В какой блок принимать этот манчестер?
2. DCM есть в Spartan6/7/Cyclone10GX, но не вижу подобной штуки в C10LP.
3. Есть малогабаритные такие штуки? Им что, данные на вход дают, а они клок этих данных наружу? Как называется такой тип микрух?

Автор: MegaVolt Sep 25 2018, 12:52

Цитата(AVR @ Sep 25 2018, 15:45) *
Я месяц назад создавал тему примерно, там выяснили что для динамической подстройки фазы требуется именно DPA.
Не не не.... это разные фичи. В данном случае DPA не нужна.
DPA нужна при наличия данных и клока чтобы привязать одно к другому. Тут клока нету. А вновь синтезированный уже должен быть привязан к входному потоку.

Прошу прощения кинул не тот апнот.
Вот то что нужно:
http://electronix.ru/redirect.php?https://www.xilinx.com/support/documentation/application_notes/xapp224.pdf

Автор: DuHast Sep 25 2018, 12:54

Цитата(AVR @ Sep 25 2018, 15:50) *
3. Есть малогабаритные такие штуки? Им что, данные на вход дают, а они клок этих данных наружу? Как называется такой тип микрух?

на входе ещё референс клок нужен. micrel делал

Автор: MegaVolt Sep 25 2018, 13:00

Цитата(AVR @ Sep 25 2018, 15:50) *
1. Я понимаю что такое манчестер, только не очень ясно - так что там с этим манчестером на входе делать? Что если биты манчестера встанут неудобно относительно клока? В какой блок принимать этот манчестер?
Xcell17.pdf



Цитата
2. DCM есть в Spartan6/7/Cyclone10GX, но не вижу подобной штуки в C10LP.

Плохо sad.gif Значит отказаться от восстановления клока и заниматься приёмом данных непосредственно. Или как в xapp224.pdf или манчестер
Цитата
3. Есть малогабаритные такие штуки? Им что, данные на вход дают, а они клок этих данных наружу? Как называется такой тип микрух?
Можно попробовать jitter cleaner использовать для этого.... но не факт нужно читать. Отдельные микрухи я не знаю. Они хитрые делают парами.

Автор: Zig Sep 25 2018, 13:12

Цитата(AVR @ Sep 25 2018, 15:50) *
3. Есть малогабаритные такие штуки? Им что, данные на вход дают, а они клок этих данных наружу? Как называется такой тип микрух?

Называются CDR (Clock & Data Recovery/Retiming).
Выпускает в том числе http://electronix.ru/redirect.php?http://www.analog.com/en/products/rf-microwave/timing-ics-clocks/clock-data-recoveryretiming.html.

Использовал в проекте http://electronix.ru/redirect.php?http://www.analog.com/en/adn2816. Восстанавливала такты и данные из SDI и DVB-ASI. Внешняя частота не обязательна.
Восстанавливает такты из данных от 10 Mb/s до 675 Mb/s.

Автор: blackfin Sep 25 2018, 13:13

Цитата(MegaVolt @ Sep 25 2018, 15:47) *
По моим сведениям не умеет. По крайней мере аппаратно. Если есть другие сведения буду благодарен. Из приведённой цитаты это не следует.

http://electronix.ru/redirect.php?http://www.xilinx.com/support/documentation/application_notes/xapp523-lvds-4x-asynchronous-oversampling.pdf

Автор: Leka Sep 25 2018, 13:22

Цитата(AVR @ Sep 25 2018, 15:45) *
Похоже облом, PLL в C10LP крайне примитивный, и тему можно закрывать с результатом: реализовать никак.


Клок восстанавливать вовсе необязательно, это всего-лишь один из вариантов решения задачи.

По докам С10LP по возможностям соответствует C4E, в этом случае потолок, по моим оценкам, д/б в районе 1Гбит/сек.
Некоторое время назад хотел из спортивного интереса попробовать практически, но нет времени.

Автор: doom13 Sep 25 2018, 13:57

В старых версиях QII было ядро ASI, которое выполняло необходимую Вам функцию.

Автор: MegaVolt Sep 25 2018, 13:59

Цитата(blackfin @ Sep 25 2018, 16:13) *
http://electronix.ru/redirect.php?http://www.xilinx.com/support/documentation/application_notes/xapp523-lvds-4x-asynchronous-oversampling.pdf
ISERDES работает штатно просто как сериализатор. С внешней PLL и логикой становиться возможным слежение за фазой. Т.е. это не аппаратная фича.

Автор: AVR Sep 25 2018, 14:05

Цитата(Leka @ Sep 25 2018, 16:22) *
Клок восстанавливать вовсе необязательно, это всего-лишь один из вариантов решения задачи.
По докам С10LP по возможностям соответствует C4E, в этом случае потолок, по моим оценкам, д/б в районе 1Гбит/сек.
Некоторое время назад хотел из спортивного интереса попробовать практически, но нет времени.

Прошу тут немного подробнее. На какой пример Вы ссылаетесь? Есть ли статья на этот волшебный метод?

Цитата(doom13 @ Sep 25 2018, 16:57) *
В старых версиях QII было ядро ASI, которое выполняло необходимую Вам функцию.

Вижу у Xilinx DVB-ASI IP core, у Альтеры Altera IP-ASI: IP CORE - ASI Video Interface - это оно?

Автор: Zig Sep 25 2018, 14:21

Цитата(AVR @ Sep 25 2018, 17:05) *
Вижу у Xilinx DVB-ASI IP core, у Альтеры Altera IP-ASI: IP CORE - ASI Video Interface - это оно?

Оно, только скорость там фиксированная 270 Мбит/с.
У Xilinx многое делается на задержках в LUT и перестроить на другую скорость потока сложно.
Про Altera не знаю, но думаю что аналогично.

Три варианта приёма данных без восстановления тактов для 8B10B описаны в XAPP514, XAPP1014 и XAPP1015.

Старая тема: http://electronix.ru/redirect.php?https://electronix.ru/forum/index.php?showtopic=131291.

Автор: blackfin Sep 25 2018, 14:22

Цитата(MegaVolt @ Sep 25 2018, 16:59) *
ISERDES работает штатно просто как сериализатор. С внешней PLL и логикой становится возможным слежение за фазой. Т.е. это не аппаратная фича.

Ну, понятно, что ручками что-то сделать всё же придется. biggrin.gif

Аппаратная фича состоит в том, что к каждому дифференциальному входу IBUFDS плисины можно одновременно(!) подключить две(!) линии задержки IDELAY и два(!) набора регистров IDDR тактируемых от сдвинутых на 90 градусов клоков, что дает четыре семпла данных на каждый бит входного потока. Остальное - дело техники и простенькой FSM.. Понятно, что про кодировку 8/10 эта схема ничего не знает и аппаратно не учитывает.

Автор: Leka Sep 25 2018, 16:32

Цитата(AVR @ Sep 25 2018, 17:05) *
На какой пример Вы ссылаетесь? Есть ли статья на этот волшебный метод?

Статьи нет. Из практического опыта, на Циклонах можно делать многофазную выборку.
Кроме того, задачу можно решить через измерение интервалов между переходами входного сигнала, те через TDC.
В итоге, ограничение будет обусловлено передатчиком, а не приемником - из-за большой емкости пина в Циклонах.

Автор: AVR Sep 25 2018, 17:58

Цитата(Leka @ Sep 25 2018, 19:32) *
Статьи нет. Из практического опыта, на Циклонах можно делать многофазную выборку.

Выше кинули ссылку: http://electronix.ru/redirect.php?https://www.xilinx.com/support/documentation/application_notes/xapp224.pdf
Видимо это и есть подобный метод.

Про TDC почитаю.

Автор: RobFPGA Sep 25 2018, 18:02

Приветствую!

Цитата(AVR @ Sep 25 2018, 15:50) *
1. Я понимаю что такое манчестер, только не очень ясно - так что там с этим манчестером на входе делать? Что если биты манчестера встанут неудобно относительно клока? В какой блок принимать этот манчестер?
Не совсем значит понимаете - из манчестера клок выделяется на раз - причем если уж совсем хардкорно то для этого даже внешний клок не нужен - пару задержек на цепочке lcell или триггеров, и пару элементов and и xor.
И вы получаете клок привязанный к данным (ну или наоборот). Этим клоком капчите данные и через fifo или cdc переносите на рабочий клок.
Понятное дело вся эта садо-мазо асинхронщина должна быть жестко прибита constrain при P&R . Ну и рассчитывать задержки нужно с учетом гуляния от температуры и вольтажа.
Но зато нарисовать все это можно за пол дня, на любой FPGA.

Удачи! Rob.





Автор: andrewkrot Sep 25 2018, 20:26

У Lattice есть дешевые чипы с SERDES. А на спартанах только манчестер в помощь. По крайней мере не нужно будет выравнивать по постоянке данные. Одним геморроем меньше)

Автор: Leka Sep 25 2018, 20:34

Цитата(AVR @ Sep 25 2018, 20:58) *
Выше кинули ссылку... Видимо это и есть подобный метод.

М/б и другие методы. Например, декодировать пакеты по всем каналам(фазам), и брать с правильными контрольными кодами (сам делал похожее).

Автор: MegaVolt Sep 25 2018, 21:32

Цитата(Leka @ Sep 25 2018, 23:34) *
М/б и другие методы. Например, декодировать пакеты по всем каналам(фазам), и брать с правильными контрольными кодами (сам делал похожее).
Это не решит проблемы если разбежка за пакет больше пары бит.

Автор: blackfin Sep 26 2018, 03:54

Цитата(MegaVolt @ Sep 26 2018, 00:32) *
Это не решит проблемы если разбежка за пакет больше пары бит.

Не будет там такой "разбежки"..

У ТС клоки на обоих концах линка равны с точностью до 100 ppm. Из этого следует, что сдвиг на один бит случится после 10 тысяч бит. Меж тем, у ТС длина пакета 2048 бит. То есть, за время передачи пакета накопленная ошибка будет не больше 1/5 битового интервала.

Цитата(AVR @ Sep 25 2018, 13:21) *
... поток с LVDS (от 10 до 400 Мбит/с, но каждый раз это константа), учитывая что тактовые не синхронные (хотя их стабильность 50 ppm) и плавают, ...
Цитата(AVR @ Sep 25 2018, 14:27) *
... можно будет на основе преамбулы очередного пакета выбирать версию с наилучшим положением, и этого выбора хватит на весь пакет, пакеты у меня до 2048 байт.

PS. Только сейчас заметил, что у ТС длина пакета указана в байтах. То есть, в битах это 16384. Так что ошибка в один бит вполне реальна. Тогда только кодировка 8/10 и подстраивать момент выборки бита на лету..

Автор: Leka Sep 26 2018, 07:22

2Кбайта, это логический пакет, на физическом уровне пакеты м/б меньше, например по 1Кбиту (те вставлять контрольные коды через каждые 1Кбит).

Автор: ViKo Sep 26 2018, 07:27

Протянули бы уже тактовый сигнал. Ради связи на 15 см столько фантазий.

Автор: AVR Sep 26 2018, 08:03

Цитата(blackfin @ Sep 26 2018, 06:54) *
Не будет там такой "разбежки"..
У ТС клоки на обоих концах линка равны с точностью до 100 ppm. Из этого следует, что сдвиг на один бит случится после 10 тысяч бит. Меж тем, у ТС длина пакета 2048 бит. То есть, за время передачи пакета накопленная ошибка будет не больше 1/5 битового интервала.
PS. Только сейчас заметил, что у ТС длина пакета указана в байтах. То есть, в битах это 16384. Так что ошибка в один бит вполне реальна. Тогда только кодировка 8/10 и подстраивать момент выборки бита на лету..

Т.е. не надо никакого реклокинга, так получается? Я опасаюсь, а не вылезет ли в месте перехода цепочка из десятков бит, раскиданных по обе стороны от граничной ситуации?

Автор: blackfin Sep 26 2018, 08:15

Цитата(AVR @ Sep 26 2018, 11:03) *
Т.е. не надо никакого реклокинга, так получается? Я опасаюсь, а не вылезет ли в месте перехода цепочка из десятков бит, раскиданных по обе стороны от граничной ситуации?

Если вы откалибровались по преамбуле и длина пакета не превышает 2500 бит, то "реклокинг" внутри пакета уже не нужен. Можно также поставить более дорогие TXCO с лучшей начальной точностью и стабильностью. Скажем, 10 ppm будет не сильно дороже, а расхождение клоков на обеих сторонах линка будет в пять раз меньше. Как следствие, допустимый размер пакета будет тоже в пять раз больше.

Автор: AVR Sep 26 2018, 08:24

Цитата(blackfin @ Sep 26 2018, 11:15) *
Если вы откалибровались по преамбуле и длина пакета не превышает 2500 бит, то "реклокинг" не нужен. Можно также поставить более дорогие TXCO с лучшей начальной точностью и стабильностью. Скажем, 10 ppm будет не сильно дороже, а расходжение клоков на обеих сторонах линка будет в пять раз меньше. Соответстенно, допустимый размер пакета будет тоже в пять раз больше.

А что значит откалиброваться по преамбуле? Допустим, принимаю преамбулу, вижу ее смещение (у меня уже есть такое решение в модели) - определив величину битового смещения, начинаю кушать пакет. Что защищает от ситуации, чтобы не попасть на зону перехода, когда после приема 1250 бит пойдет зона на десятки бит, где битовое положение будет колбаситься туда-сюда из-за джиттера???

Цитата(ViKo @ Sep 26 2018, 10:27) *
Протянули бы уже тактовый сигнал. Ради связи на 15 см столько фантазий.

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

Автор: Leka Sep 26 2018, 08:39

По преамбуле калиброваться нет смысла, тк слишком короткая.
Можно другое - по ошибкам выделять биения разностной частоты, и подстраиваться по фазе этой частоты.
Пробовал, работает. Но это имеет смысл для жестко заданных протоколов, например ethernet.
Для самопального много проще и компактнее по ресурсам будет принимать по всем фазам и выбрать правильные.
1Кбит*8фаз=1Кбайт, это 1 блок памяти в Циклоне. Пишем 8 потоков, а дальше пускаем только 1 из них с правильным контрольным кодом.

Автор: blackfin Sep 26 2018, 08:56

Цитата(AVR @ Sep 26 2018, 11:24) *
А что значит откалиброваться по преамбуле? Допустим, принимаю преамбулу, вижу ее смещение (у меня уже есть такое решение в модели) - определив величину битового смещения, начинаю кушать пакет. Что защищает от ситуации, чтобы не попасть на зону перехода, когда после приема 1250 бит пойдет зона на десятки бит, где битовое положение будет колбаситься туда-сюда из-за джиттера???

Ну, я ориентируюсь на xapp523. Там каждый бит данных семплируется четыре раза. При таком семплировании наибольшая ошибка в определении положения максимума в линии данных не будет превышать 0.25*UI. Далее вы начинаете принимать пакет, но поскольку клок на приемной стороне имеет систематическую ошибку, со временем возникает сдвиг между центром бита и временем семплирования этого бита. Джиттер здесь влияния не оказывает, так как его величина мала по сравнению с длительностью одного бита на частоте 400 МГц и он не приводит к систематическому смещению фронта данных.

Цитата(AVR @ Sep 26 2018, 11:24) *
Таково жесткое требование на данное устройство.
...
Но теперь я обязан убрать общий клок на приемной и передающей стороне, и не давать клок в параллель с данными.

А чем вызвано столь "жесткое требование"?

Цитата(Leka @ Sep 26 2018, 11:39) *
Для самопального много проще и компактнее по ресурсам будет принимать по всем фазам и выбрать правильные.
Пишем 8 потоков, а дальше пускаем только 1 из них с правильным контрольным кодом.

Не соглашусь. Проще и компактнее то, как описано у Xilinx'а в xapp523. Один конечный автомат на четыре состояния, один триггер для граничных условий и немного логики для управления этим автоматом. Этот метод, кроме всего прочего, позволяет подстраивать момент выборки бита на интервале меньшем десяти бит (для кодировки 8/10) и не зависеть от длины пакета в принципе. Ваш же метод при большой длине пакета может привести к ситуации, когда во всех восьми блоках памяти будут лежать данные с неверными CRC.

Автор: AVR Sep 26 2018, 13:50

Цитата(blackfin @ Sep 26 2018, 11:56) *
Не соглашусь. Проще и компактнее то, как описано у Xilinx'а в xapp523. Один конечный автомат на четыре состояния, один триггер для граничных условий и немного логики для управления этим автоматом. Этот метод, кроме всего прочего, позволяет подстраивать момент выборки бита на интервале меньшем десяти бит (для кодировки 8/10) и не зависеть от длины пакета в принципе. Ваш же метод при большой длине пакета может привести к ситуации, когда во всех восьми блоках памяти будут лежать данные с неверными CRC.

Скачал xapp523.zip размером 5138659 байт 75138e67fc7f40fda0e89e998214e645
Но там много пустых каталогов, нет файлов проекта, нет PDF-файлов с описанием. Вроде качал с официального сайта, но это странно очень.

xapp224.zip не могу нигде скачать, но подозреваю там другой метод и другая идея, которая не так хороша, как в xapp523 - верно?

Мне нравится xapp523, я почти уловил мысль, но не до конца. Там пример на 1250 мегабит SGMII, но я ожидаю, что могу взять не 8 а всего 4 фазы для этой идеи и обойтись лишь одним десериализатором (а не двумя, сдвинутыми на сколько-то пс при помощи IDELAY). Но нужно посимулить и понять идею глубже.

Автор: bogaev_roman Sep 26 2018, 14:30

Можно попробовать сделать 4 параллельные семы приема на вс длину пакета. Каждая сема тактируется частотами 400МГ, сдвинутыx на 90 градусов. Потребуется 3 вещи:
1. Сxема решения - с какой именно забирать данные (подобные реализаии видел, потребутся служебные символы вначале/коне пакета).
2. орошего выравнивания по времени для водныx триггеров сем и частот (вручну точно придется прибивать).
3. Плавание частоты передащей части от приемной за интервал передачи пакета не более чем на четверть периода символа.

Каким образом все ляжет на конкретно Ваш чип - ответить не могу - не работал с ним.

ЗЫ.. Извинясь за написание - проблема с ПО - часть символов не печатается.

Автор: blackfin Sep 26 2018, 16:45

Цитата(AVR @ Sep 26 2018, 16:50) *
Там пример на 1250 мегабит SGMII, но я ожидаю, что могу взять не 8 а всего 4 фазы для этой идеи и обойтись лишь одним десериализатором (а не двумя, сдвинутыми на сколько-то пс при помощи IDELAY). Но нужно посимулить и понять идею глубже.

С четырьмя семплами и одним десериализатором не получится следить за направлением смещения фронта данных относительно точек семплирования. В этом случае алгоритм "Bit Skip" работать не будет.

Иными словами FSM из рисунка 9 должен шагать строго по кругу - либо по часовой стрелке, либо против. Недопустимы переходы между состояниями "по диагонали"..

Автор: AVR Sep 27 2018, 04:33

Цитата(blackfin @ Sep 26 2018, 19:45) *
С четырьмя семплами и одним десериализатором не получится следить за направлением смещения фронта данных относительно точек семплирования. В этом случае алгоритм "Bit Skip" работать не будет.
Иными словами FSM из рисунка 9 должен шагать строго по кругу - либо по часовой стрелке, либо против. Недопустимы переходы между состояниями "по диагонали"..

Так, похоже идея работать не будет, потому что в C10LP нет такого элемента как задержка входного сигнала на X пикосекунд. Где-то даже читал на форумах альтеры ответ сотрудника что типа "а нафига это теоретически было бы надо". К тому же не знаю, можно ли подать с одного входа на два десериализатора в C10LP задав соответствующие констрейны чтоб не расползалось.

Автор: blackfin Sep 27 2018, 04:43

Цитата(AVR @ Sep 27 2018, 07:33) *
Так, похоже идея работать не будет, потому что в C10LP нет такого элемента как задержка входного сигнала на X пикосекунд.

А в чем смысл скрещивать ужа Altera и ежа Xilinx в одном проекте? Страсть к мазохизму?

Автор: andrewkrot Sep 27 2018, 19:54

Дык, если есть обратная пара так по ней клок и передавайте (в обратную сторону). И по этому клоку выставляйте данные в передатчике. CDC или или FIFO еще в помощь.

Автор: Plain Sep 28 2018, 07:17

А собрать трёхфазный генератор 200 МГц на ножках — политические убеждения не позволяют? Или это ещё хуже, чем асинхронщина?

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)