count_enable 0 20 июня, 2013 Опубликовано 20 июня, 2013 (изменено) · Жалоба Передаю 32-битные слова через трансивер, сконфигурированный в режиме 32бит. После установки канала, в данные каждые несколько тысяч слов влазит лишний байт или теряется один. Соответственно если передавалось AABBCCDD 00010203 то получается BBCCDD00 010203AA.... И смещение это меняется каждые несколько тысяч слов. Прикрепил vcd где пойман момент перехода с одного смещения во второе. Вот на картинке четко виден момент перехода- теряется одна кома ВС. Перепробовал с Comma Alignment и без -все без толку. Не знаю что дальше делать. Изменено 20 июня, 2013 пользователем count_enable Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cerg19 0 21 июня, 2013 Опубликовано 21 июня, 2013 · Жалоба Сделал "по книге" а что за книга, если не секрет. А искажения происходят только в словах Comma или в любом слове передаваемого потока? Используется ли clock correction? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
count_enable 0 21 июня, 2013 Опубликовано 21 июня, 2013 · Жалоба "По книге" - сгенерил корку визардом, взял пример и изменил только генератор данных на передачу и приемник. Т.е. дизайн такой же как описан в GTP Wrapper User Guide. Clock correction не использую, сейчас буду пробовать с ним. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
count_enable 0 21 июня, 2013 Опубликовано 21 июня, 2013 · Жалоба Добавил clock correction, только хуже стало. Выравнивание дальше плавает, но значительно больше ошибок передачи стало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_su 1 23 июня, 2013 Опубликовано 23 июня, 2013 · Жалоба Добавил clock correction, только хуже стало. Выравнивание дальше плавает, но значительно больше ошибок передачи стало. Добрый день. Вы соединяете разные платы или замыкаете петлю на одной? Для того, чтобы работал clock correction надо на передающей стороне вклинивать в поток символы коррекции синхронизации, а на приемной обеспечить их отслеживание. А лучше всего сгенерить Avrora интерфейс. Там уже заложены механизмы коррекции синхронизации. При генерации ядра генерируются все исходники. При желании можно разобраться, как все работает. При условии, что генераторы на разных сторонах расходятся не более, чем (по моему) на 100ppm, ядро Avrora само вставляет в нужный момент в поток синхросимволы и коммы, обеспечивая нормальную передачу данных, поднятие и отслеживание линка, а также регистрацию ошибок. Соединял таким образом платы ML505 и SP605, передача велась на скорости 3.125 Гбит, тестировал по 10-11 часов. Работает без ошибок. Учитывая большее, чем допустимо расхождение генераторов, подкорректировал гнемного исходники, чтобы синхросимволы вклинивались чаще. Удачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
count_enable 0 23 июня, 2013 Опубликовано 23 июня, 2013 · Жалоба Да, соединяю платы сата-кабелем 50 см. Сгенерил авроровскую корку, запускаю готовый тестбенч demo_tb, но передача не начинается! Идут резеты, стабилизируется канал, но channel_up не поднимается в 1. Симулирую в Исиме, моделсима нету. Не менял ни байта в тестбенче. Где я накосячил? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
count_enable 0 24 июня, 2013 Опубликовано 24 июня, 2013 (изменено) · Жалоба Симуляция Авроры 5.2 для Spartan 6: channel_up поднимается в 1 на 7000 ns , но lane_up_1_i не устанавливается ( UU) вообще. Принимаются сами нули. Ничего не менял в корке и тестбенче - все IP Core Gen сделал. Если можете выложить Вас проект с авророй, который симулируется в исиме, буду очень благодарен. Изменено 24 июня, 2013 пользователем count_enable Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
count_enable 0 27 июня, 2013 Опубликовано 27 июня, 2013 · Жалоба Методом научного тыка определил что проблема в выравнивании клоков. Если получается RX Elastic Buffer underflow, то в том же слове дублируется 1 байт. Если же переполнение, то через 16 слов теряется 1 байт! Кто-нибудь сталкивался с этим? Аврора упорно не хочет симулироваться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 27 июня, 2013 Опубликовано 27 июня, 2013 · Жалоба Если получается RX Elastic Buffer underflow, то в том же слове дублируется 1 байт. Если же переполнение, то через 16 слов теряется 1 байт!Логично B) Кто-нибудь сталкивался с этим? Видимо те, кто придумал clock correction и Сomma символы сталкивались Либо синхронизируйте клок на приемном конце с клоком на передающем, либо разбирайтесь как работает этот самый clock correction, его недостаточно просто включить ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
count_enable 0 27 июня, 2013 Опубликовано 27 июня, 2013 · Жалоба Я так понимаю, что для clock correction мне надо периодически передавать слово коррекции, тогда приемник сам будет его урезать или вставлять больше? В визарде задал слово коррекции 00000000 - по дефолту. Вставляю каждый 6 байт сами нули, каждые 6 байт слово из comma (BCBCBCBC). Но тем не менее никакого эффекта не произвело - режутся и вставляются символы когда им вздумается, а не нули. Тоже не очень понимаю эффект Recovered Clock. В мануале сказано, что если выбрать RX_XCLK_SEL_0 = ("RXREC"), то будет использоваться клок, восстановленый с входящего сигнала и тогда clock correction не нужно. Но не заметил эффекта никакого. Дальше регулярно ловлю недополнения и переполнения буфера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 27 июня, 2013 Опубликовано 27 июня, 2013 · Жалоба Я так понимаю, что для clock correction мне надо периодически передавать слово коррекции, тогда приемник сам будет его урезать или вставлять больше?Теорически да. Практически надо читать DS, как именно корка хочет работать с clock correction В визарде задал слово коррекции 00000000 - по дефолту. ... Тоже не очень понимаю эффект Recovered Clock. Что то не так сделали. Что пишут в DS и Errata? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
count_enable 0 28 июня, 2013 Опубликовано 28 июня, 2013 · Жалоба Теорически да. Практически надо читать DS, как именно корка хочет работать с clock correction Что то не так сделали. Что пишут в DS и Errata? Первое что есть: "After an RX buffer overflow or underflow, the RX elastic buffer must be reset using the RXBUFRESET port to ensure correct behavior." - но тогда я утрачиваю около 16 слов данных! Второе это с коррекцией (стр. 147) The RX elastic buffer limits are set using CLK_COR_MIN_LAT (minimum latency) and CLK_COR_MAX_LAT (maximum latency). When the number of bytes in the RX elastic buffer drops below CLK_COR_MIN_LAT, the clock correction circuit writes an additional CLK_COR_ADJ_LEN bytes from the first clock correction sequence it matches to prevent the buffer from underflowing. Similarly, when the number of bytes in the RX elastic buffer exceeds CLK_COR_MAX_LAT, the clock correction circuit deletes CLK_COR_ADJ_LEN bytes from the first clock correction sequence it matches, starting with the first byte of the sequence. Все данные с руководства http://www.xilinx.com/support/documentatio...uides/ug386.pdf Бьюсь с этим уже больше недели, полный ступор. Добился пока что только сигнализации добавления или удаления байта. Если с добавлением коррекция данных тривиальна, то с удалением восстановить данные невозможно. Тестирую на 2 самодельных платах, на одной постоянно overflow, на другой underflow. Никаких сил уж нет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 28 июня, 2013 Опубликовано 28 июня, 2013 · Жалоба А сами патерны установили? CLK_COR_SEQ_*, CLK_COR_SEQ_*_ENABLE, CLK_COR_SEQ_*_USE, CLK_CORRECT_USE_*, RX_DECODE_SEQ_MATCH_* И вообще, все что написано начиная со страницы 147 руководства по вашей ссылке то с удалением восстановить данные невозможно.Так удаляться должны как раз ваши специально добавленные на передающей стороне данные. Зачем их восстанавливать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
count_enable 0 28 июня, 2013 Опубликовано 28 июня, 2013 · Жалоба А сами патерны установили? CLK_COR_SEQ_*, CLK_COR_SEQ_*_ENABLE, CLK_COR_SEQ_*_USE, CLK_CORRECT_USE_*, RX_DECODE_SEQ_MATCH_* И вообще, все что написано начиная со страницы 147 руководства по вашей ссылке Так удаляться должны как раз ваши специально добавленные на передающей стороне данные. Зачем их восстанавливать? Пробую с CLK_COR_SEQ_1_1_0 => ("0111011100"), и CLK_COR_SEQ_1_1_0=> ("0100000000"), каждые 6 байт передаю или 4 коммы BCBCBCBC или четыре нуля 0000000. Если сделать buffer reset overflow или underflow - удаляется 16 байт. Все параметры установлены как ниже: --RX Elastic Buffer and Phase alignment Attributes RX_BUFFER_USE_0 => (TRUE), RX_EN_IDLE_RESET_BUF_0 => (FALSE), RX_IDLE_HI_CNT_0 => ("1000"), RX_IDLE_LO_CNT_0 => ("0000"), RX_XCLK_SEL_0 => ("RXUSR"), RX_BUFFER_USE_1 => (TRUE), RX_EN_IDLE_RESET_BUF_1 => (FALSE), RX_IDLE_HI_CNT_1 => ("1000"), RX_IDLE_LO_CNT_1 => ("0000"), RX_XCLK_SEL_1 => ("RXUSR"), --Clock Correction Attributes CLK_COR_ADJ_LEN_0 => (4), CLK_COR_DET_LEN_0 => (4), CLK_COR_INSERT_IDLE_FLAG_0 => (TRUE), CLK_COR_KEEP_IDLE_0 => (FALSE), CLK_COR_MAX_LAT_0 => (18), CLK_COR_MIN_LAT_0 => (16), CLK_COR_PRECEDENCE_0 => (TRUE), CLK_COR_REPEAT_WAIT_0 => (5), CLK_COR_SEQ_1_1_0 => ("0000000000"), CLK_COR_SEQ_1_2_0 => ("0000000000"), CLK_COR_SEQ_1_3_0 => ("0000000000"), CLK_COR_SEQ_1_4_0 => ("0000000000"), CLK_COR_SEQ_1_ENABLE_0 => ("0000"), CLK_COR_SEQ_2_1_0 => ("0000000000"), CLK_COR_SEQ_2_2_0 => ("0000000000"), CLK_COR_SEQ_2_3_0 => ("0000000000"), CLK_COR_SEQ_2_4_0 => ("0000000000"), CLK_COR_SEQ_2_ENABLE_0 => ("0000"), CLK_COR_SEQ_2_USE_0 => (FALSE), CLK_CORRECT_USE_0 => (TRUE), RX_DECODE_SEQ_MATCH_0 => (TRUE), CLK_COR_ADJ_LEN_1 => (4), CLK_COR_DET_LEN_1 => (4), CLK_COR_INSERT_IDLE_FLAG_1 => (TRUE), CLK_COR_KEEP_IDLE_1 => (FALSE), CLK_COR_MAX_LAT_1 => (18), CLK_COR_MIN_LAT_1 => (16), CLK_COR_PRECEDENCE_1 => (TRUE), CLK_COR_REPEAT_WAIT_1 => (5), CLK_COR_SEQ_1_1_1 => ("0100000000"), CLK_COR_SEQ_1_2_1 => ("0100000000"), CLK_COR_SEQ_1_3_1 => ("0100000000"), CLK_COR_SEQ_1_4_1 => ("0100000000"), CLK_COR_SEQ_1_ENABLE_1 => ("0000"), CLK_COR_SEQ_2_1_1 => ("0100000000"), CLK_COR_SEQ_2_2_1 => ("0100000000"), CLK_COR_SEQ_2_3_1 => ("0100000000"), CLK_COR_SEQ_2_4_1 => ("0100000000"), CLK_COR_SEQ_2_ENABLE_1 => ("0000"), CLK_COR_SEQ_2_USE_1 => (FALSE), CLK_CORRECT_USE_1 => (TRUE), RX_DECODE_SEQ_MATCH_1 => (TRUE), Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
count_enable 0 28 июня, 2013 Опубликовано 28 июня, 2013 · Жалоба Добавил себе порт RXCLKCORCNT0 - коррекции клока не происходит, даже при обнаружении переполнения. Скорее всего, не детектится clock correction sequence как такая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться