Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: GTP Spartan6
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Volkov
Запускаю GTP трансивер, и вот наткнулся на то что происходит рассинхронизация слов. для тестирования использую FRAME_GEN блок, который выдает поток данных с K28.5+, с интервалом в 32 слова. рассинхронизация происходит где то после 1 ms - байты меняются местами.
Как с этим бороться?
DmitryR
А как настроен-то GTP? Realign по K28.5 - отнюдь не есть его функция по умолчанию.
Volkov
Вывел сигнал RX_BYTE_IS_ALIGN - он в "1". То есть, байты выравнены. Но внутри пакета LSB и MSB меняются местами.
Но вот что к этому приводит? Понятно что частоты плывут, но кварц не плохой +-25PPM, в предидущем проекте Arria GX без проблем работала с обычным Geyer-овским кварцем.

Цитата(DmitryR @ Sep 27 2011, 12:53) *
А как настроен-то GTP? Realign по K28.5 - отнюдь не есть его функция по умолчанию.


SATA II - 2.5 Ghz. Больше я ничего не менял, за базу брал сгенерированный example.
По умолчанию, К28.5. В Frame_Gen bp example - bc, то есть, как я понимаю К28.5+.
ALIGN_COMMA_WORD, по умолчанию - 2. Тоесть, выравнивание по LSB.
Переделал под ALIGN_COMMA_WORD - 1, все равно те же грабли. НаXilinx пишут что нужно снимать rxencommaalign - не помогает.
DmitryR
Сигнал ладно, внутри блок должен быть настроен понимать K28.5 как realign. K28.5+ что такое - я не понимаю. Что плюс означает?

А кварц все равно какой: там за секунду передается минимум миллиард бит. Даже если разбег кварцев 1ppb - за восемь секунд набежит байт.
Volkov
Цитата(DmitryR @ Sep 27 2011, 13:01) *
Сигнал ладно, внутри блок должен быть настроен понимать K28.5 как realign. K28.5+ что такое - я не понимаю. Что плюс означает?

А кварц все равно какой: там за секунду передается минимум миллиард бит. Даже если разбег кварцев 1ppb - за восемь секунд набежит байт.


Внутри, Comma detection - K28.5. Передается K28.5+ - comma plus - x"bc"(восемь бит), так же как в example. Непонятно почему в этом example разрешается выравнивание comma minus, но это нюансы.
Я так понимаю что в трансивере есть логика, которая должна компенсировать этот разбег. Иначе никак. Может я не совсем понимаю логику работы, может быть нельзя передавать непрерывный поток пакетов?
DmitryR
Цитата(Volkov @ Sep 27 2011, 13:32) *
Передается K28.5+ - comma plus

Дошло. Но тогда не понимаю, почему вы управляете 10b символами. У вас не включен 8b/10b внутри GTP? Я посылал 8b поток и он там сам разбирался, что ему сейчас надо послать: плюс или минус.

В любом случае, как я помню align делается по любому K28.5. И еще вспоминаю, что в SATA они вроде должны парами передаваться.
Volkov
У меня 16 битный интерфейс, посылаю в младшем байте - 101 11100. На счет плюс,минус теперь понятно. 8b/10b включен.
Volkov
В принципе, мне простой serdes нужен. Не думал, что нужно заморачиаться с комами, и т.д. У альтеры в визарде, выбираешь Basic, и не думаешь как там протокол реализуется.
Как в спартане6 реализовать serdes?
DmitryR
Цитата(Volkov @ Sep 27 2011, 17:12) *
Не думал, что нужно заморачиаться с комами,

Можно не заморачиваться - тактируйте весь приемник частотой, извлеченой из потока и будет вам счастье. А если нужно иметь независимые частоты - увы, они всегда будут отличаться, и необходимо в протоколе предусматривать возможность синхронизации.

Что же до SATA - там примитивы состоят из четырех символов. ALIGNp - K28.5, D10.2, D10.2, D27.3. ALIGNp, как я правильно вспомнил ранее, должен посылаться два раза подряд. RTFM, короче.

Volkov
Цитата(DmitryR @ Sep 28 2011, 11:30) *
Можно не заморачиваться - тактируйте весь приемник частотой, извлеченой из потока и будет вам счастье.


Тоесть, для приемника, не использовать опрный генератор? А какой клок завести?
DmitryR
Первый бит GTPCLKOUT. Но вам еще остается найти в документации, каким сигналом при этом делать ресет схеме (пока PLL не увидела входной поток).
gutzzz
может вам сгенерить Xilinx AURORA интерфейс, там проблема разницы частот опорных генераторов решена с помощью Clock Correction алгоритма.
а сам протокол вроде несложный
DmitryR
Clock correction sequence в AURORA - идеологически то же самое, что ALIGNp в SATA.
Volkov
Сгенерил Aurora интерфейс, тот же результат. Я вот что не понимаю, я ведь компилю "example design", и если отбросить возможность того что в плате проблемы, то он по сути должен работать.
В нем есть модуль FRAME_GEN, который и генерит данные.

MEM_00 => x"00000e0d00000c0b00000a09000008070000060500000403000002bc00000100",
MEM_01 => x"00001e1d00001c1b00001a19000018170000161500001413000012110000100f",
MEM_02 => x"00002e2d00002c2b00002a29000028270000262500002423000022210000201f",
MEM_03 => x"00003e3d00003c3b00003a39000038370000363500003433000032310000302f",
MEM_04 => x"00004e4d00004c4b00004a49000048470000464500004443000042410000403f",
MEM_05 => x"00005e5d00005c5b00005a59000058570000565500005453000052510000504f",
MEM_06 => x"00006e6d00006c6b00006a69000068670000666500006463000062610000605f",
MEM_07 => x"00007e7d00007c7b00007a79000078770000767500007473000072710000706f",

MEM_08 => x"00000e0d00000c0b00000a09000008070000060500000403000002bc00000100",
MEM_09 => x"00001e1d00001c1b00001a19000018170000161500001413000012110000100f",
MEM_0A => x"00002e2d00002c2b00002a29000028270000262500002423000022210000201f",
MEM_0B => x"00003e3d00003c3b00003a39000038370000363500003433000032310000302f",
MEM_0C => x"00004e4d00004c4b00004a49000048470000464500004443000042410000403f",
MEM_0D => x"00005e5d00005c5b00005a59000058570000565500005453000052510000504f",
MEM_0E => x"00006e6d00006c6b00006a69000068670000666500006463000062610000605f",
MEM_0F => x"00007e7d00007c7b00007a79000078770000767500007473000072710000706f",


На приемной стороне я получаю


Нажмите для просмотра прикрепленного файла02bc - comma aligment.


LSB - 67 69 6A 6C
MSB - 68 6A 6B 6D











Только что посмотрел, у меня еластик буфер underflow. Навеное в этом и проблема.
DmitryR
А где у вас в памяти данные, которые вы посылаете на вход TXCHARISK?
Volkov
Данные есть, TXCHARISK устанавливается.
DmitryR
Значит прочтите документацию на Аврору. Я например сходу обнаружил, что clock-compensation там делается символом K23.7, а не запятой. Причем посылать этот символ нужно 12 раз подряд.

Вообще, перестаньте расчитывать на то что у вас все заработает out-of-the-box, читайте документацию на протоколы хотя бы поверхностно. Я уж не говорю о том, что это нужно было бы сделать до того, как выбирать протокол.
Volkov
Вот скажите, входные данные для трансивета - это пакеты соответствующего протокола? Тогда я не понимаю суть генерируемого екзампла. вот где там K23.7 двенадцать раз подряд. Нет. Может этот екзампл для симуляции только годиться?
У меня это первый проект на Xilinx FPGA. Плохая у них документация.
DmitryR
Цитата(Volkov @ Oct 5 2011, 11:34) *
Вот скажите, входные данные для трансивета - это пакеты соответствующего протокола?

Нет. Трансивер - это просто конвертор из параллельной формы в последовательную и обратно с 8b/10b в качестве бонуса. Он оперирует потоком, а не пакетами.

Цитата(Volkov @ Oct 5 2011, 11:34) *
Тогда я не понимаю суть генерируемого екзампла. вот где там K23.7 двенадцать раз подряд. Нет. Может этот екзампл для симуляции только годиться?

Сам не пользовался, но судя по описанию FRAME_GEN из UG353 он (FRAME_GEN) предназначен чтобы подключаться к Aurora IP core (в котором и содержится собственно реализация протокола), а не прямо к GTP. И с SATA у вас я думаю было то же самое: вы взяли формирователь третьего уровня и его выход воткнули напрямик в первый уровень, а второй (собственно link layer) у вас отсутствует.

Цитата(Volkov @ Oct 5 2011, 11:34) *
У меня это первый проект на Xilinx FPGA. Плохая у них документация.

Интересно, как вы сделали вывод, что документация плохая, если вы ее не читали?
Volkov
Нажмите для просмотра прикрепленного файла

Если бы это было так. Реализовал бы протокол.
Там читать нечего. Думаешь, вот суть проблемы, вчитываешся, а сути то нет. Влом им было писать.
DmitryR
Ну как нечего, описание Авроры - 127 старниц. SATA - еще поболее.

Что касается картинки - я не знаю, откуда вы ее скопипастили, вы источник не приводите, но в документации по Авроре (UG353) картинка иная, и иллюстрирует она как раз то, что я сказал. Поэтому вам имеет все же смысл туда (в UG353) заглянуть (если конечно вы ставите целью заставить Аврору заработать, а не голословно охаить Xilinx).
Volkov
LogiCORE IP Spartan-6 FPGA GTP Transceiver Wizard v1.10 UG546

Читал я UG353. Я пытаюсь понять как работать с GTP Transceiver - ом. К примеру, если я выберу Start from scratch в Protocol Template, мне какой протокол реализовывать?
DmitryR
Цитата(Volkov @ Oct 5 2011, 14:23) *
LogiCORE IP Spartan-6 FPGA GTP Transceiver Wizard v1.10 UG546

Цитата
FRAME_GEN module: Generates a user-definable data stream for simulation analysis.



Цитата(Volkov @ Oct 5 2011, 14:23) *
мне какой протокол реализовывать?

Этот вопрос звучит как "куда пойти учиться". Определитесь с задачами, изучите поддерживаемые протоколы, выберите подходящий под задачи. Для "просто передавать данные" и Аврора подойдет. Если же хотите обойтись голым GTP без link-layer протокола вообще, просто данные гнать - надо приемник тактировать частотой потока, тогда и без clock correction у вас данные пропадать не будут.
Volkov
DmitryR, огромное вам спасибо!!! Заработало!!! Вставил K23.7 в поток, TXCHARISK ом указал, что это K-character и у меня заработал блок коррекции клока. Еще раз спасибо!
alfa80x
Я пытаюсь запустить GTX . Приемник синхронизуется востановленной частотой. Выравнивание выполняю указанием TXCHARISK символа К 28,5 (bc) 15 раз подряд. Далее у меня идет непрерывный поток 8 ми битных слов с кодированием 8/10. Я заметил что время от времени появляется сигнал rxdisperr, в момент возникновения которого происходит небольшое отклонение принимаемого слова (тестовая послеовательность синусоида - отклонение восновном выбросы амплитуды) далее ошибок не наблюдается до поры до времени . В чем дело ? Я не очень понимаю смысл сигнала rxdisperr.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.