Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 8b/10b code. Восстановление тактовой синхронизации
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Костян
Возможно ли в FPGA c применением доп. внеш элементов восстановить битовую синхронизацию в 8b/10b decoder -е ? Подобный модуль реализован на схеме CDR в RocketIO , но мне совершенно не понятны принципы его работы.
Выделение в CDR синхронизации идет только по comma symbol , либо также по данным ?
iosifk
Цитата(Костян @ Nov 10 2010, 15:56) *
Возможно ли в FPGA c применением доп. внеш элементов восстановить битовую синхронизацию в 8b/10b decoder -е ?

а посмотреть аппликухи у ксайлинкса об этом?
Shtirlits
Как мне кажется, comma нужна исключительно, чтобы узнать где граница символов, а выделение клока с помощью PLL происходит по кажому фронту данных. Восстановление клока к кодированию не имеет прямого отношения.
С тем же успехом можно отключить блок 8b/10b и пальчиками кодировать 64/66 или любым другим способом обеспечивающим достаточную частоту перехода между 0 и 1 и их баланс.
DW0
8b/10b комма действительно только границу пакета определяет, для синхронизации приемника с передатчиком важно то, что частоты и фазы разные, еще и дышат, и без подстройки частоты, или еще каких либо "танцев" Вы не получите результат без сбоев. можете почитать про метастабильность, но сразу предупреждаю решение проблем с метастабильностью не решает проблемы синхронизации
DmitryR
Цитата(Костян @ Nov 10 2010, 14:56) *
Возможно ли в FPGA c применением доп. внеш элементов восстановить битовую синхронизацию в 8b/10b decoder -е ?
Зачем на стадии 8b/10 нужна битовая синхронизация? Все уже параллельно, нужна словная. Что касается RocketIO - то я недавно сделал на нем SATA-II, совершенно не пытаясь вникнуть в то, как он достает синхронизацию. Он подавал мне наружу слова и словную синхру, а как там внутри - кому это надо голову ломать?
Shtirlits
OFF:
Разница частот специфицирована в протоколах типа PCIe, 10Gb Ethernet, USB3.0 - специально смотрел, а распространенное решение этой проблемы - эластичный буфер - выдумка реализаторов.
Наихудший случай, когда разница в частотах максимальная, а пакет наибольшей длины.
Это несколько символов, в разных протоколах по разному.
Тоже самое может быть в другую сторону, когда быстрый кварц оказался в противоположном устройстве.
И все было б не так плохо, если бы эластичный буфер заполнялся перед приемом пакета именно на это время.
USB superspeed 8 символов, PCI-e 4 символа, Infiniband 3 символа.
В трансиверах FPGA он заполняется на половину своего размера, да и в других устройствах тоже, retiming repeaters этим тоже грешат.
Соответственно, данные почти всегда будут отставать на эти несколько символов на каждом хопе.
В FPGA этот же буфер используется для выравнивания каналов и кое-что можно простить, но не 16 символов.
Вообще, лишний символ "/" в "http://" может оказаться ерундой по сравнению с потерями на PCI-e компьютерах при коротких запросах.
andrewkrot
Цитата(Костян @ Nov 10 2010, 15:56) *
Возможно ли в FPGA c применением доп. внеш элементов восстановить битовую синхронизацию в 8b/10b decoder -е ? Подобный модуль реализован на схеме CDR в RocketIO , но мне совершенно не понятны принципы его работы.
Выделение в CDR синхронизации идет только по comma symbol , либо также по данным ?

Восстановление битовой тактовой частоты возможно с применением цифровой ФАПЧ, правда для ее нормальной работы внутренняя тактовая частота должна быть по крайней мере в 8 раз выше битовой частоты. Джиттер при этом будет нехилый, ну так никто и не знает, какой он Вам нужен...
Костян
QUOTE (DmitryR @ Nov 10 2010, 10:34) *
Зачем на стадии 8b/10 нужна битовая синхронизация? Все уже параллельно, нужна словная. Что касается RocketIO - то я недавно сделал на нем SATA-II, совершенно не пытаясь вникнуть в то, как он достает синхронизацию. Он подавал мне наружу слова и словную синхру, а как там внутри - кому это надо голову ломать?

это понятно, поясню, нужно захватить сигнал в кодировке 8b/10b (сформированный тем же RocketIO) на спартане3 , который не имеет ни CDR, ни RocketIO. Поэтому и разбираюсь как там внутри.
Shtirlits
Меня почему-то смущает, что RocketIO в знакомом мне Virtex-IIpro начинается с 622MHz. Медленнее PLL-ка не запускается.
На spartan-3 не получится. Может быть лучше AVR-кой? smile.gif
В природе есть трансиверы, которые по отношению к FPGA будут называться внешними, и есть spartan-6 с трансиверами на борту, arria, stratix gx ...
Костян
QUOTE (Shtirlits @ Nov 10 2010, 13:22) *
Меня почему-то смущает, что RocketIO в знакомом мне Virtex-IIpro начинается с 622MHz. Медленнее PLL-ка не запускается.

хм..верно для V5 0.78Gbit. Но мне не интересна задача формирования потока(можно сформировать на том же спартан3, рокет написал для примера выше), нужен его захват с выделением тактовой!
Shtirlits
Непонятно, это круглая лошадь при низком давлении или реальная плата с экономически обоснованными решениями?

Чтобы просто поиграть на какой получится частоте, можно сделать цифровую модель PLL, которая содержит, ясное дело, регулируемый генератор и компаратор детектор фазы, который определяет, какой сигнал поменялся раньше, входной или принимаемя и дает команду чуточку сменить частоту. Реагировать компаратор детектор фазы должен только внутри битового периода. Обычная спартановская PLL частоту захватит, так как тренировка идет на символах с кодировкой 101010101..., но скорее всего будет терять синхронизацию. Я не знаю, как именно устроеных PLL в FPGA и как они относятся к пропускам импульсов.

http://en.wikipedia.org/wiki/Multi-gigabit_transceiver
agate
QUOTE (Костян @ Nov 10 2010, 14:56) *
Возможно ли в FPGA c применением доп. внеш элементов восстановить битовую синхронизацию в 8b/10b decoder -е ? Подобный модуль реализован на схеме CDR в RocketIO , но мне совершенно не понятны принципы его работы.
Выделение в CDR синхронизации идет только по comma symbol , либо также по данным ?

K28.5 кома - Это единственный символ который позволяет выделить 10 битные границы в последовательном потоке 8В10В данных. Остальные символы имеют алиасы.
DmitryR
Цитата(Костян @ Nov 10 2010, 17:42) *
это понятно, поясню, нужно захватить сигнал в кодировке 8b/10b (сформированный тем же RocketIO) на спартане3

Или вам все же не понятно, или вы не можете объяснить, что вам нужно. Повторю: чтобы захватить выход RocketIO чем угодно нужно использовать восстановленную в RocketIO СЛОВНУЮ синхронизацию. Надо начинать не с разбирательств как устроен RocketIO внутри, а с того как устроен его интерфейс. Потому что понимание внутренних алгоритмов его работы конечно полезно, но работать с интерфейсом не помогает никак вообще.

И еще абсолютно непонятно, зачем к большой FPGA, в которой есть RoketIO еще рядом приделывать Spartan3.

А, на всякий случай: если вы хотите захватить в Spartan3 ПОСЛЕДОВАТЕЛЬНЫЙ поток, который где-то выходит из RocketIO - забудьте: там слишком высокая частота. Если бы это было возможно - RocketIO никто бы не делал.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.