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

LVDS под одной паре (без клока)

Есть связь из Spartan 7 в Cyclone 10 LP по одной дифференциальной паре проводников (есть и обратная пара). Хочется понять, как действовать, если хочется передавать данные без передачи клока?

Допустим, задействую такой код 8/10, где байт будет передаваться так, чтобы хотя бы раз в три бита будет инверсия. Ведь сам поток данных это по сути прерывистые нерегулярные такты.

Или например, буду добавлять преамбулы в начала пакетов, escape-последовательности.

 

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

 

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

 

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

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


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

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

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

А далеко передавать на такой "бешеной" скорости?

 

 

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


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

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

Есть связь из Spartan 7 в Cyclone 10 LP по одной дифференциальной паре проводников (есть и обратная пара). Хочется понять, как действовать, если хочется передавать данные без передачи клока?

...

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

Однако! - самое первое что на ум приходит Манчестер-II - восстанавливаем клок на приеме XORя поток с самим собой задержанным на пол такта жестко заданными задержками. Не знаю как на счет 400 Mbit но на 100 думаю запустится.

 

Удачи! Rob.

 

 

 

 

 

 

 

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


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

Есть связь из Spartan 7 в Cyclone 10 LP по одной дифференциальной паре проводников (есть и обратная пара). Хочется понять, как действовать, если хочется передавать данные без передачи клока?

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

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


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

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

Тот же USB2.0 передает по двум проводам 480 Mb/s на расстояние до пяти метров и без всяких LVDS..

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

 

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

 

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

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


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

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

Это как так ?

... по одному проводу передавать клок, а по другому данные.

Относительно GND?

Да, чудненько так!

 

 

 

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


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

Это как так ?

... по одному проводу передавать клок, а по другому данные.

Относительно GND?

Да, чудненько так!

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

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


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

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

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

Так что не так.

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


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

Отставить флуд! :rolleyes:

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

 

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

 

Вопрос: как это сделать на Cyclone 10 LP, ведь там LVDS приемник не позволяет ответвить 8 версий с 8 фазами.

Второе, может у PLL есть какая-то возможность с каждым фронтом данных, не реагируя на пропуски, подстраиваться под этот поток?

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


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

Не нужно забывать, что там по стандарту в 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

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


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

Допустим, задействую такой код 8/10, где байт будет передаваться так, чтобы хотя бы раз в три бита будет инверсия. Ведь сам поток данных это по сути прерывистые нерегулярные такты.

Или например, буду добавлять преамбулы в начала пакетов, escape-последовательности.

 

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

 

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

 

Путь номер 1. Затащить данные на встроенные PLL и получить внутренний клок привязанный к данным. Потом принятые данные перенести в другой клоковый домен.

Путь номер 2. Тактируем с передискретизацией и воостанавливаем поток данных. Подробности описаны например тут https://www.xilinx.com/support/documentatio...tes/xapp250.pdf

 

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


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

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

Я недавно создавал тему тут, как раз по этому вопросу. На тему что делать, если подобных задержек в C10LP нету.

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

 

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

 

Вижу такой документ: https://www.ti.com/lit/ds/slls570d/slls570d.pdf

Тут как раз передача данных без клока по LVDS, и при этом в приемнике есть Clock Recovery.

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


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

Путь номер 1. Затащить данные на встроенные PLL и получить внутренний клок привязанный к данным. Потом принятые данные перенести в другой клоковый домен.

Это называется CDR? Clock&Data Recovery?

Путь номер 2. Тактируем с передискретизацией и воостанавливаем поток данных. Подробности описаны например тут https://www.xilinx.com/support/documentatio...tes/xapp250.pdf

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

 

Вот эти варианты я и рассматриваю как самые реальные. Но с точки зрения самой "тупой" ПЛИС из этих двух.

Решение создать клок на основе данных а затем через FIFO перетащить в основной домен - идеальное решение.

Но как называется эта функция? Я запутался в куче этих всяких режимов и опций. Это и есть CDR - верно?

 

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

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

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


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

Может я что-то не понял, но тем не менее - функция не вполне рабочей кажется.

А xapp1017 и xapp585 читали?

 

И вот, может ПЛИС выбрать нужно другую? Может 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).

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


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

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

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

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

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

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

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

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

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

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