Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передача большого потока
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Anton1990
Всем добрый день.
Есть две платы (точнее будут - сейчас стадия разработки) на каждой из них ПЛИС Virtex 6. Необходимо из одной платы передать данные в другую. Расстояние пол метра. Поток представляет из себя параллельный код 16 бит на тактовой частоте 200 МГц. Я так понимаю нужно применять GTH или что-то в этом роде? Или использовать просто хороший коаксиальный шлейф? Шлейф вроде легко, но это на первый взгляд. Да и дорог он очень. В общем порекомендуйте что хорошее. Заранее спасибо за ответы.
Lmx2315
16*200 = 3200 Мгц
..можно через гигабитные трансиверы передать посредством HDMI кабеля.
Anton1990
Цитата(Lmx2315 @ Oct 25 2015, 20:17) *
16*200 = 3200 Мгц
..можно через гигабитные трансиверы передать посредством HDMI кабеля.


А можно как-то подробней? В одной плис есть тактовая + 16р шина. Передаю через HDMI кабель. Что я получаю в ПЛИС приемнике? Мне бы хотелось опять же 16р. + тактовый сигнал. Это возможно? Я вообще в плис не новичок, но с приемопередатчиками встроенными никогда дела не имел. Так что если можно разжуйте немного. Если можно - то примерчик неплохо. Нужна ли какая-то внешняя обвеска ПЛИС. Если да то какая?
Lmx2315
..ваши 16 бит и тактовую нужно пропустить через эту корку - http://www.xilinx.com/support/documentatio...8b10b_ds637.pdf
выдать наружу через гигабитный трансивер, затем также принять на другой ПЛИС.
Внешняя обвеска - конденсаторы, разъёмы. Если жалко ПЛИС то можно поставить высокоскоростные компараторы в роли буферов.
Сам так никогда не делал - потому философствую как теоретик.
з.ы.
схему можно скопировать с демоплаты xilinx-а
http://www.xilinx.com/support/documentatio..._schematics.pdf
RobFPGA
Приветствую!

Сначала надо определится как делать - "стандартно - правильно" или "велосипед для себя"

Если "стандартно " - Aurora, 10G через SFP+ - и задачу решит и в будущем может пригодится.
Если "велосипед" то можно ту-же Aurora через разъемы от SATA.
Если страшно работать с MGT то можно и LVDS - но тут как минимум 4-8 линий в параллель на 800-400 Mb/s
Вариантов море - главное определитесь с "физикой" и возможностями.

Успехов! Rob.
Алексей_1990
Доброго времени суток! Прошу прощения, если не по адресу, но покапавшись в форуме не нашёл ничего приближенного. Подскажите, пожалуйста с помощью каких ip ядер я могу принять высокоскоростной последовательный асинхронный код? Да, и не могли бы расписать поподробнее.
Железо cyclone v.
Maverick
Цитата(Алексей_1990 @ Dec 14 2015, 14:10) *
Доброго времени суток! Прошу прощения, если не по адресу, но покапавшись в форуме не нашёл ничего приближенного. Подскажите, пожалуйста с помощью каких ip ядер я могу принять высокоскоростной последовательный асинхронный код? Да, и не могли бы расписать поподробнее.
Железо cyclone v.

мало данных - подробнее
_pv
Цитата(Anton1990 @ Oct 25 2015, 19:55) *
Или использовать просто хороший коаксиальный шлейф? Шлейф вроде легко, но это на первый взгляд. Да и дорог он очень.

если из говна и палок, то
http://www.dns-shop.ru/product/d6c41c2dbba...7/slejf-noname/
как раз полметра, ATA Ultra DMA - до 166МБайт в секунду обеспечивал по 16ти разрядной шине,
не думаю что возникнут какие-то непреодолимые сложности покачать через это 100МГц х 32.
хотя если уже есть virtexы с трансиверами под это дело, то правильнее пожалуй будет через них.
Алексей_1990
Цитата(Maverick @ Dec 15 2015, 00:07) *
мало данных - подробнее

Стоит задача принять асинхронный сигнал с выхода сериалайзера и дессериплизировать его. Выход с сериалайзера представляет собой последовательный код со стартовым и стоповым битами. Скорость выдачи потока 960 Mbps. На выходе должен получится параллельный 18-разрядный код.


Цитата(Алексей_1990 @ Dec 15 2015, 10:14) *
Стоит задача принять асинхронный сигнал с выхода сериалайзера и дессериплизировать его. Выход с сериалайзера представляет собой последовательный код со стартовым и стоповым битами. Скорость выдачи потока 960 Mbps. На выходе должен получится параллельный 18-разрядный код.

Вообще если ещё более подробнее, то у нас есть ацп с 16-разрядным выходом и частотой 48 МГц. Все это дело загоняется на внешний сериалайзер, который работает с 18-разрядным кодом. Добавляем 2 бита + стартовый и стоповый. С результате получаем на выходе сериалайзера последовательные пачки по 20 бит. Так вот стоит задача получить 16 разрядный параллельный код, как с ацп
doom13
Цитата(Алексей_1990 @ Dec 15 2015, 09:20) *

Попробуйте глянуть в сторону ядра ALT_LVDS в режиме RX (смущает только то, что у Вас 18-бит, а так именно оно используется для приёма данных с АЦП по описанному протоколу).
Алексей_1990

Цитата(Алексей_1990 @ Dec 15 2015, 09:20) *
Попробуйте глянуть в сторону ядра ALT_LVDS в режиме RX (смущает только то, что у Вас 18-бит, а так именно оно используется для приёма данных с АЦП по описанному протоколу).

А разве altlvds_rx позволяет работать на таких скоростях (960 Mbps)? На сколько я понял у него ограничение скорости битрейта порядка 800 Mbps. К тому же для приёма сигнала я использую разъёмы sma на отладочной плате, которые железно соединены с высокоскоростными приемопередатчиками. Вот поэтому и хотел уточнить про ядра использующие именно их. Порывшись в интернете вроде понял, что мне может пригодиться custom PHY transciever. Не знакомы с ним?
Go to the top of the pageReport Post

Maverick
Цитата(Алексей_1990 @ Dec 16 2015, 07:55) *
А разве altlvds_rx позволяет работать на таких скоростях (960 Mbps)? На сколько я понял у него ограничение скорости битрейта порядка 800 Mbps. К тому же для приёма сигнала я использую разъёмы sma на отладочной плате, которые железно соединены с высокоскоростными приемопередатчиками. Вот поэтому и хотел уточнить про ядра использующие именно их. Порывшись в интернете вроде понял, что мне может пригодиться custom PHY transciever. Не знакомы с ним?
Go to the top of the pageReport Post


Цитата(Алексей_1990 @ Dec 15 2015, 09:55) *
А разве altlvds_rx позволяет работать на таких скоростях (960 Mbps)? На сколько я понял у него ограничение скорости битрейта порядка 800 Mbps. К тому же для приёма сигнала я использую разъёмы sma на отладочной плате, которые железно соединены с высокоскоростными приемопередатчиками. Вот поэтому и хотел уточнить про ядра использующие именно их. Порывшись в интернете вроде понял, что мне может пригодиться custom PHY transciever. Не знакомы с ним?


кросспосты на данном форуме не приветствуются...


Посмотрите SerialLite
Цитата
The SerialLite III Streaming IP core is a high-speed serial communication protocol for chip-to-chip,
board-to-board, and backplane application data transfers. This protocol offers high-bandwidth, low
overhead frames, low I/O count, and supports scalability in both number of lanes and lane speed.
Алексей_1990


Посмотрите SerialLite
[/quote]
А custom PHY не подходит для этих целей? Просто сложности возникли с word alignment pattern при конфигурации custom PHY. Что означает выравнивание слова? Правильно ли я понял, что это как раз для определения начала и конца пакетов данных?
doom13
Цитата(Алексей_1990 @ Dec 16 2015, 09:40) *
Посмотрите SerialLite

А custom PHY не подходит для этих целей? Просто сложности возникли с word alignment pattern при конфигурации custom PHY. Что означает выравнивание слова? Правильно ли я понял, что это как раз для определения начала и конца пакетов данных?

Это означает, что если будет использоваться только приёмник (ядра Custom PHY или другого), то придётся вручную синхронизировать его с передатчиком данных. На передатчике выставляется тестовая последовательность и проверяется правильность приёма, при неправильном приёме делается сдвиг принимаемого слова на бит, и так пока не получим правильное слово. Потом переходим в рабочий режим с уже правильным word alignment.
Алексей_1990
Цитата(doom13 @ Dec 16 2015, 10:56) *
Это означает, что если будет использоваться только приёмник (ядра Custom PHY или другого), то придётся вручную синхронизировать его с передатчиком данных. На передатчике выставляется тестовая последовательность и проверяется правильность приёма, при неправильном приёме делается сдвиг принимаемого слова на бит, и так пока не получим правильное слово. Потом переходим в рабочий режим с уже правильным word alignment.

То есть передающее устройство помимо стартовых и стоповых битов передаёт сначала какую-то постоянную последовательность? Есть смысл залезть в datasheet сериалайзера за этой последовательностью?
Maverick
Цитата(Алексей_1990 @ Dec 16 2015, 09:28) *
То есть передающее устройство помимо стартовых и стоповых битов передаёт сначала какую-то постоянную последовательность? Есть смысл залезть в datasheet сериалайзера за этой последовательностью?

Можно взять пример проекта и попробовать например SerialLite или любой другой промоделировать
doom13
Цитата(Алексей_1990 @ Dec 16 2015, 10:28) *
То есть передающее устройство помимо стартовых и стоповых битов передаёт сначала какую-то постоянную последовательность? Есть смысл залезть в datasheet сериалайзера за этой последовательностью?

Не знаю, как работает данный сериалайзер, наверное стоит. Для всех ядер на базе трансиверов есть "ручной" режим выравнивания слова на основе тестовой последовательности если используется half duplex (про старт/стоп биты не встречал, тут наверное свой word aligner придётся сделать). Для АЦП с последовательным LVDS интерфейсом (например ADS6445) используется метод выравнивания на основе тестовой последовательности (для этого есть режим, когда АЦП гонит на линии тестовые данные по которым синхронизируется приёмник).

Расскажите, что за сериалайзер используется?
RobFPGA
Приветствую!

Скорее всего TC использует чтото типа DS92LV18.

Успехов! Rob.
doom13
Цитата(RobFPGA @ Dec 16 2015, 12:03) *
Скорее всего TC использует чтото типа DS92LV18.

Тогда вообще хз, как его синхронизировать с приёмником.
Алексей_1990
Цитата(doom13 @ Dec 16 2015, 12:03) *
Не знаю, как работает данный сериалайзер, наверное стоит. Для всех ядер на базе трансиверов есть "ручной" режим выравнивания слова на основе тестовой последовательности если используется half duplex (про старт/стоп биты не встречал, тут наверное свой word aligner придётся сделать). Для АЦП с последовательным LVDS интерфейсом (например ADS6445) используется метод выравнивания на основе тестовой последовательности (для этого есть режим, когда АЦП гонит на линии тестовые данные по которым синхронизируется приёмник).

Расскажите, что за сериалайзер используется?

Сериалайзер DS92LV18. И да, спасибо Вам, что отзываетесь.

Цитата(doom13 @ Dec 16 2015, 14:11) *
Тогда вообще хз, как его синхронизировать с приёмником.

В datasheet я обнаружил такое понятие, как sync pattern. То есть последовательность для синхронизации, как я понял. Так вот она представляет собой "a fixed pattern with 9-bits of data high followed by 9-bits of data low".

Да и ещё на сериалайзер приходит sync, который к тому же приходит на десериалайзер. Судя по всему, когда sync = 0 с выходов идёт фиксированная последовательность 9 нулей 9 единиц. А когда sync = 1, на выход идут данные.
doom13
Цитата(Алексей_1990 @ Dec 16 2015, 15:43) *
Да и ещё на сериалайзер приходит sync, который к тому же приходит на десериалайзер. Судя по всему, когда sync = 0 с выходов идёт фиксированная последовательность 9 нулей 9 единиц. А когда sync = 1, на выход идут данные.

Тогда немного понятнее (бегло просмотрел доку и не заметил, какая последовательность используется для синхронизации). Для выравнивания слова используете последовательность FFC00, когда поймаете переходите в рабочий режим. Какое ядро на базе трансивера подойдёт лучше - смотрите доку (немного смущает разрядность слова 20 бит, но, думаю, можно будет подобрать параметры ядра).

Цитата(Алексей_1990 @ Dec 16 2015, 15:43) *
Да и ещё на сериалайзер приходит sync, который к тому же приходит на десериалайзер. Судя по всему, когда sync = 0 с выходов идёт фиксированная последовательность 9 нулей 9 единиц. А когда sync = 1, на выход идут данные.

Наоборот, 1 - sync pattern.
Алексей_1990
Цитата(doom13 @ Dec 16 2015, 17:02) *
Тогда немного понятнее (бегло просмотрел доку и не заметил, какая последовательность используется для синхронизации). Для выравнивания слова используете последовательность FFC00, когда поймаете переходите в рабочий режим. Какое ядро на базе трансивера подойдёт лучше - смотрите доку (немного смущает разрядность слова 20 бит, но, думаю, можно будет подобрать параметры ядра).


Наоборот, 1 - sync pattern.

Так вот у меня как раз проблема в выборе ядра. Какую документацию посоветуете посмотреть?
doom13
Цитата(Алексей_1990 @ Dec 16 2015, 17:17) *
Так вот у меня как раз проблема в выборе ядра. Какую документацию посоветуете посмотреть?

xcvr_user_guide
Если железо есть, то тут можно и опытным путём пойти.
Думаю, можете Custom PHY смотреть и не прогадаете. Глянул доку - ширина слова в 20 бит есть, так что должно работать.
Алексей_1990
Цитата(doom13 @ Dec 16 2015, 18:35) *
xcvr_user_guide
Если железо есть, то тут можно и опытным путём пойти.
Думаю, можете Custom PHY смотреть и не прогадаете. Глянул доку - ширина слова в 20 бит есть, так что должно работать.

А в этом случае не могли бы прояснить следующий момент: Ширина слова 20 бит, а word alignment в этом случае либо 7, либо 10 бит. Почему так? Да и в datasheet на сериалайзер указан 18 битный фиксированный код для синхронизации. Как быть?
doom13
Цитата(Алексей_1990 @ Dec 16 2015, 20:22) *
А в этом случае не могли бы прояснить следующий момент: Ширина слова 20 бит, а word alignment в этом случае либо 7, либо 10 бит. Почему так? Да и в datasheet на сериалайзер указан 18 битный фиксированный код для синхронизации. Как быть?

18+start+stop = 20, итого Ваше синхрослово 20 бит, после приёма в рабочем режиме будете два крайних выбрасывать.

Из вышеуказанной доки для Custom PHY:
Цитата
Word Alignment Parameters
The word aligner restores word boundaries of received data based on a predefined alignment pattern. This
pattern can be 7, 8, 10, 16, 20, or 32 bits long. The word alignment module searches for a programmed
pattern to identify the correct boundary for the incoming stream.
Алексей_1990
Цитата(doom13 @ Dec 16 2015, 22:21) *
18+start+stop = 20, итого Ваше синхрослово 20 бит, после приёма в рабочем режиме будете два крайних выбрасывать.

Из вышеуказанной доки для Custom PHY:

Ага, с этим разобрался. А вот при конфигурации ядра, когда выбираешь ширину слова 20 бит, он предлагает word alignment либо 7, либо 10 бит. Или мне стоит выбрать режим 10 бит и задать все единицы?
doom13
Цитата(Алексей_1990 @ Dec 17 2015, 06:43) *
Ага, с этим разобрался. А вот при конфигурации ядра, когда выбираешь ширину слова 20 бит, он предлагает word alignment либо 7, либо 10 бит. Или мне стоит выбрать режим 10 бит и задать все единицы?

Да, какая-то ерунда получается, в доке одно написано, а GUI ядра не даёт выставить нужные настройки (QII v14.0). Возможно более новая версия QII поможет или можно попробовать сгенерить ядро, а потом вручную задать нужные параметры для топ модуля.
Алексей_1990
Цитата(doom13 @ Dec 17 2015, 11:47) *
Да, какая-то ерунда получается, в доке одно написано, а GUI ядра не даёт выставить нужные настройки (QII v14.0). Возможно более новая версия QII поможет или можно попробовать сгенерить ядро, а потом вручную задать нужные параметры для топ модуля.

А если решать задачу немного другого характера: есть ацп, выход которого последовательный дифференциальный с фреймовой синхронизацией. Разрядность ацп 16-битная. В этом случае легче? И нужна ли фиксированная последовательность для синхронизации?
doom13
Цитата(Алексей_1990 @ Dec 18 2015, 13:25) *
А если решать задачу немного другого характера: есть ацп, выход которого последовательный дифференциальный с фреймовой синхронизацией. Разрядность ацп 16-битная. В этом случае легче? И нужна ли фиксированная последовательность для синхронизации?

Я бы сказал, что это более правильный вариант, данные АЦП попадают в FPGA без "посредников". В данном случае для приёма данных с АЦП используется ядро ALT_LVDS RX. Режим синхронизации будет необходим при старте. По SPI (может какой другой интерфейс для чтения/записи регистров АЦП) загоняете АЦП в режим синхронизации, выбираете sync pattern, его ловите на стороне FPGA (сдвигаете принятое слово пока не совпадёт с sync pattern) и переходите в рабочий режим.

Если железо ещё только проектируется, то я бы остановился на данном варианте, ещё можно попробовать АЦП с более новым JSD204B.
Алексей_1990
Цитата(doom13 @ Dec 18 2015, 14:45) *
Я бы сказал, что это более правильный вариант, данные АЦП попадают в FPGA без "посредников". В данном случае для приёма данных с АЦП используется ядро ALT_LVDS RX. Режим синхронизации будет необходим при старте. По SPI (может какой другой интерфейс для чтения/записи регистров АЦП) загоняете АЦП в режим синхронизации, выбираете sync pattern, его ловите на стороне FPGA (сдвигаете принятое слово пока не совпадёт с sync pattern) и переходите в рабочий режим.

Если железо ещё только проектируется, то я бы остановился на данном варианте, ещё можно попробовать АЦП с более новым JSD204B.

Железо уже оговорено, к сожалению. Вы упомянули про altlvds-rx. А если скорость порядка 800 Mbps, разве altlvds-rx адекватно будет воспринимать данные?
doom13
Цитата(Алексей_1990 @ Dec 18 2015, 22:58) *
Железо уже оговорено, к сожалению. Вы упомянули про altlvds-rx. А если скорость порядка 800 Mbps, разве altlvds-rx адекватно будет воспринимать данные?

Для CV заявлено (cv_51001.pdf), но надо ещё в какой доке глянуть:
Цитата
875 Mbps LVDS receiver and 840 Mbps LVDS transmitter
, но для Вашего случая оно не подходит, если только ставить "правильный" АЦП.
Алексей_1990
Цитата(doom13 @ Dec 19 2015, 00:55) *
Для CV заявлено (cv_51001.pdf), но надо ещё в какой доке глянуть:
, но для Вашего случая оно не подходит, если только ставить "правильный" АЦП.

А ситуация с асинхронным кодом патовая? Может у Вас есть ещё какие мысли?

На самом деле стоит две задачи:
В первом случае принять сигнал с сериалайзера, т.е. организовать десериалайзер.
Во втором случае будет необходимо принять сигнал с АЦП lts 2193.
Первая задача вроде как промежуточная.

Также для отладки всего этого есть в наличии отладочная плата Cyclone V GX Starter Kit
doom13
Я так и не понял, железо уже есть или можно ещё что-то менять? Если железо есть, то пробуйте использовать ядро Custom PHY, в GUI ставте для SYNC PATTERN настройки, которые оно позволяет выбрать, а в топ модуле подправте вручную и пробуйте скомпилить.

Цитата(Алексей_1990 @ Dec 21 2015, 09:31) *
Во втором случае будет необходимо принять сигнал с АЦП lts 2193.

Если правильно понял, что АЦП это LTC2193, то никакой внешний сериалайзер не нужен, заводите сигналы прямо на FPGA и используете ядро ALT_LVDS RX. Клоки - на клоковую ногу FPGA (которую можно протянуть до PLL), достаточно будет DATA CLOCK OUT.
Алексей_1990
Цитата(doom13 @ Dec 21 2015, 10:48) *
Я так и не понял, железо уже есть или можно ещё что-то менять? Если железо есть, то пробуйте использовать ядро Custom PHY, в GUI ставте для SYNC PATTERN настройки, которые оно позволяет выбрать, а в топ модуле подправте вручную и пробуйте скомпилить.


Если правильно понял, что АЦП это LTC2193, то никакой внешний сериалайзер не нужен, заводите сигналы прямо на FPGA и используете ядро ALT_LVDS RX. Клоки - на клоковую ногу FPGA (которую можно протянуть до PLL), достаточно будет DATA CLOCK OUT.

Железо выбрано. Сейчас колдую над custom PHY. При чем я отошёл от сериалайзера и подаю на вход просто последовательность единиц с генератора импульсов, при этом решил попробовать режим bitslip. Вывел его на кнопку, при нажатии код смещается, как я понял, так и должно быть. Но все идёт нормально только до 8ого бита, потом код скачет вверх, пропуская много позиций.
Хотелось бы, конечно, проверить режим с выравниванием слова по последовательности, но я не располагаю таким генератором, с которого я подаю сначала синхро-последовательность, а потом какой-то код.
doom13
Про АЦП Вы не ответили, это LTC2193???
Алексей_1990
Цитата(doom13 @ Dec 21 2015, 11:33) *
Про АЦП Вы не ответили, это LTC2193???

Да, именно. Прошу прощения.

Попробовал в топ модуле подправить, компилятор ругается.
doom13
Цитата(Алексей_1990 @ Dec 21 2015, 10:52) *
Попробовал в топ модуле подправить, компилятор ругается.

Возможно ещё что-то завязано на эти параметры.

Цитата(Алексей_1990 @ Dec 21 2015, 10:52) *
Да, именно. Прошу прощения.

Тогда тут не нужен внешний трансивер. Для приёма достаточно завести все сигналы АЦП в FPGA (линии данных канала АЦП для 4-line mode и тактовую АЦП DATA CLOCK OUT) и при максимальной частоте тактирования АЦП 125 MHz получится всего 500 Mbps на линию. Для 800 Mbps от канала АЦП можно использовать 2-line mode (а если FPGA держит приведённые выше характеристики, то будет достаточно и 1-line mode).
PS:
ALT_LVDS вполне подходит.
Алексей_1990
Цитата(doom13 @ Dec 21 2015, 12:05) *
Возможно ещё что-то завязано на эти параметры.


Тогда тут не нужен внешний трансивер. Для приёма достаточно завести все сигналы АЦП в FPGA (линии данных канала АЦП для 4-line mode и тактовую АЦП DATA CLOCK OUT) и при максимальной частоте тактирования АЦП 125 MHz получится всего 500 Mbps на линию. Для 800 Mbps от канала АЦП можно использовать 2-line mode (а если FPGA держит приведённые выше характеристики, то будет достаточно и 1-line mode).
PS:
ALT_LVDS вполне подходит.

А в этом случае, не проясните ли мне почему в altlvds_rx максимальный возможный фактор дессериализации равен 10? Как я понимаю, чтобы принять 16битную последовательность нужно поставить каскадно два приёмника по 8 бит
doom13
Цитата(Алексей_1990 @ Dec 23 2015, 08:55) *
А в этом случае, не проясните ли мне почему в altlvds_rx максимальный возможный фактор дессериализации равен 10? Как я понимаю, чтобы принять 16битную последовательность нужно поставить каскадно два приёмника по 8 бит

У Вашего АЦП есть режимы 4-line/2-line/1-line mode, где фактор десериализации будет соответственно 4/8/16 (вот только 16 выбрать не получится, тут только если делать свой приёмник). Используйте 4-line mode, чтоб можно было работать на максимальной частоте тактирования АЦП.
Алексей_1990
Цитата(doom13 @ Dec 23 2015, 10:47) *
У Вашего АЦП есть режимы 4-line/2-line/1-line mode, где фактор десериализации будет соответственно 4/8/16 (вот только 16 выбрать не получится, тут только если делать свой приёмник). Используйте 4-line mode, чтоб можно было работать на максимальной частоте тактирования АЦП.

Так вот задача то и заключается в принятии сигнала по 1 линии.
doom13
Цитата(Алексей_1990 @ Dec 23 2015, 14:15) *
Так вот задача то и заключается в принятии сигнала по 1 линии.

Если учесть, что согласно даташиту на ALTLVDS_RX:
Цитата
In Cyclone series, the SERDES circuitry is always implemented in logic cells.

то, как вариант, можно попробовать сделать свой приёмник для Вашего случая. Когда-то давно делал такое, а потом нашёл ALTLVDS_RX, который работает намного лучше. В настоящей системе используется ALTLVDS_RX, который принимает 800 Mbps с одной линии, так что пробуйте.
Алексей_1990
Цитата(doom13 @ Dec 23 2015, 16:00) *
Если учесть, что согласно даташиту на ALTLVDS_RX:

то, как вариант, можно попробовать сделать свой приёмник для Вашего случая. Когда-то давно делал такое, а потом нашёл ALTLVDS_RX, который работает намного лучше. В настоящей системе используется ALTLVDS_RX, который принимает 800 Mbps с одной линии, так что пробуйте.

Буду пробовать, только жаль что на отладочной плате высокочастотные выводы железно завязаны на аппаратные высокоскоростные трансиверы. Не могли бы прояснить ещё один момент: как я понимаю в altlvds_rx на пин inclock я завожу свою фреймовую частоту?

Немного не по теме, но хочу поделиться: был на семинаре, так вот там упоминался интерфейс jesd204b. Знакомы с ним? Это чисто моё любопытство)
doom13
Цитата(Алексей_1990 @ Dec 23 2015, 19:17) *
Буду пробовать, только жаль что на отладочной плате высокочастотные выводы железно завязаны на аппаратные высокоскоростные трансиверы. Не могли бы прояснить ещё один момент: как я понимаю в altlvds_rx на пин inclock я завожу свою фреймовую частоту?

Если хотите использовать вход трансивера, то тут altlvds_rx прицепить не получится. Мне кажется, что должен быть способ настроить Custom PHY для Вашего случая. Сами заложили в своём устройстве соединение между FPGA через трансиверы в режиме half duplex и предполагал использовать Custom PHY (по документации всё должно работать, но железа пока ещё нет, а так проект скомпилился, не помню, правда, какие настройки для шины данных там задавал). На inclock заводится либо frame clock либо bit clock (можно оба, но это избыточно), если только один АЦП на плате, то разницы нет, если несколько и надо будет их все синхронизировать - тогда bit clock. Заводится на ногу, которую можно забросить на PLL.
Цитата(Алексей_1990 @ Dec 23 2015, 19:17) *
Немного не по теме, но хочу поделиться: был на семинаре, так вот там упоминался интерфейс jesd204b. Знакомы с ним? Это чисто моё любопытство)

У нас DDS с этим интерфейсом используется, но запускал его коллега.
warrior-2001
jesd204b - это готовый стандарт. Использую его в AD9656. Написал сам. Если бы была ПЛИС 5 серии - поставил бы ядро альтеровское.
Алексей_1990
Цитата(warrior-2001 @ Dec 24 2015, 09:26) *
jesd204b - это готовый стандарт. Использую его в AD9656. Написал сам. Если бы была ПЛИС 5 серии - поставил бы ядро альтеровское.

И в какую нынче цену такое ядро?

Цитата(doom13 @ Dec 23 2015, 22:42) *
Если хотите использовать вход трансивера, то тут altlvds_rx прицепить не получится. Мне кажется, что должен быть способ настроить Custom PHY для Вашего случая. Сами заложили в своём устройстве соединение между FPGA через трансиверы в режиме half duplex и предполагал использовать Custom PHY (по документации всё должно работать, но железа пока ещё нет, а так проект скомпилился, не помню, правда, какие настройки для шины данных там задавал). На inclock заводится либо frame clock либо bit clock (можно оба, но это избыточно), если только один АЦП на плате, то разницы нет, если несколько и надо будет их все синхронизировать - тогда bit clock. Заводится на ногу, которую можно забросить на PLL.

У нас DDS с этим интерфейсом используется, но запускал его коллега.

На самом деле, уже много режимов перепробовал для трансивера, ничего даже приближенного к правде не выдавалось.
warrior-2001
Цитата(Алексей_1990 @ Dec 24 2015, 10:17) *
И в какую нынче цену такое ядро?


Не знаю, говорю же - написал сам. Вариантов "купить" платное ядро много. wink.gif
Алексей_1990
Цитата(doom13 @ Dec 23 2015, 22:42) *
Если хотите использовать вход трансивера, то тут altlvds_rx прицепить не получится. Мне кажется, что должен быть способ настроить Custom PHY для Вашего случая. Сами заложили в своём устройстве соединение между FPGA через трансиверы в режиме half duplex и предполагал использовать Custom PHY (по документации всё должно работать, но железа пока ещё нет, а так проект скомпилился, не помню, правда, какие настройки для шины данных там задавал). На inclock заводится либо frame clock либо bit clock (можно оба, но это избыточно), если только один АЦП на плате, то разницы нет, если несколько и надо будет их все синхронизировать - тогда bit clock. Заводится на ногу, которую можно забросить на PLL.

У нас DDS с этим интерфейсом используется, но запускал его коллега.

День добрый) с наступившими праздниками. Хотел поинтересоваться больше не ковырялись с custom PHY?
doom13
Цитата(Алексей_1990 @ Jan 11 2016, 10:40) *
День добрый) с наступившими праздниками. Хотел поинтересоваться больше не ковырялись с custom PHY?

Пока нет.
Bad0512
Цитата(Алексей_1990 @ Dec 16 2015, 13:28) *
То есть передающее устройство помимо стартовых и стоповых битов передаёт сначала какую-то постоянную последовательность? Есть смысл залезть в datasheet сериалайзера за этой последовательностью?

Там чуть посложнее, чем в UART. Нет никаких стартовых и стоповых бит, по линии всегда что-то летит. Это либо данные либо синхропоследовательности, закодированные с помощью 10B8B или более современных кодов.
Кодирование необходимо для реализации как минимум двух важных задач : 1 - сделать вероятность появления низкого и высокого уровней одинаковой чтобы избавиться от необходимости передавать постоянную составляющую 2 - избавиться от длинных последовательностей нулей и единиц чтобы приёмная CDR PLL(Clock and Data Recovery Phase Locked Loop) не сбивалась. За счёт кодирования эффективная скорость передачи данных увеличивается (в случае 8B10B на 25 процентов). В общем, с виду система сложноватая, но на деле очень хорошо изученная и очень часто используемая (SATA - PCI Express - Fiber Ethernet и так далее).
Алексей_1990
Цитата(Bad0512 @ Jan 13 2016, 11:25) *
Там чуть посложнее, чем в UART. Нет никаких стартовых и стоповых бит, по линии всегда что-то летит. Это либо данные либо синхропоследовательности, закодированные с помощью 10B8B или более современных кодов.
Кодирование необходимо для реализации как минимум двух важных задач : 1 - сделать вероятность появления низкого и высокого уровней одинаковой чтобы избавиться от необходимости передавать постоянную составляющую 2 - избавиться от длинных последовательностей нулей и единиц чтобы приёмная CDR PLL(Clock and Data Recovery Phase Locked Loop) не сбивалась. За счёт кодирования эффективная скорость передачи данных увеличивается (в случае 8B10B на 25 процентов). В общем, с виду система сложноватая, но на деле очень хорошо изученная и очень часто используемая (SATA - PCI Express - Fiber Ethernet и так далее).

То есть не исключён тот вариант, что с моего сериалайзера данные выходят закодированными?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.