Suicide 0 28 июля, 2023 Опубликовано 28 июля, 2023 (изменено) · Жалоба Здравствуйте! Не могу до конца понять как работает disparity_error в 8b10b декодере во вложении, достался в наследство откуда-то из интернета вроде. Ошибка привязана к выходу out_disperr. В тестбенче подключено так - jesd204_8b10b_decoder i_dec (.in_char(DATA_10b),.in_disparity(disp),.out_disparity(disp),.out_char(OUT_CHAR)); Энкодер который я туда подсовываю на длинной дистанции выдает 50% нулей и 50% единиц, коды правильные, в энкодер прям таблица зашита с ними, а выход out_disperr дрыгается туда сюда там где 0 и 1 соответственно 6 и 4, или 4 и 6, и total_disparity показывает 1 и 3. Буду благодарен, если кто-нибудь подскажет, потому что для меня сейчас не совсем понятно как понять наличие ошибки, должно ли в total_disparity всегда быть 0 или 2. jesd204_8b10b_decoder.v Изменено 28 июля, 2023 пользователем Suicide Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 28 июля, 2023 Опубликовано 28 июля, 2023 · Жалоба Я в VHDL не умею, но: начальный диспаритет передатчика и приемника установлен на -1? Running disparity всегда должно быть -1 или +1 в конце каждого символа. Total, в свою очередь, да, будет мотыляться -2, 0, +2 (т.е. по модулю 0 или 2). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Suicide 0 28 июля, 2023 Опубликовано 28 июля, 2023 · Жалоба 1 hour ago, Arlleex said: Я в VHDL не умею, но: начальный диспаритет передатчика и приемника установлен на -1? Running disparity всегда должно быть -1 или +1 в конце каждого символа. Total, в свою очередь, да, будет мотыляться -2, 0, +2 (т.е. по модулю 0 или 2). Диспаритет -1 да. У меня вот тотал диспаритет мелькает 1,3 где ошибка, тогда видимо что-то там страшное происходит. Пойду разбираться, спасибо) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 28 июля, 2023 Опубликовано 28 июля, 2023 · Жалоба Прежде чем принимать поток по 8b/10b - неплохо было бы сделать битовую синхронизацию. Ошибки могут быть не только из-за неправильной работы декодера, но и из-за неправильного положения фронта клока. Вообще можно скачать готовое ядро 8b/10b от Xilinx. У них есть разные варианты в том числе и на основе блочной памяти. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Suicide 0 28 июля, 2023 Опубликовано 28 июля, 2023 · Жалоба 51 minutes ago, Flip-fl0p said: Прежде чем принимать поток по 8b/10b - неплохо было бы сделать битовую синхронизацию. Ошибки могут быть не только из-за неправильной работы декодера, но и из-за неправильного положения фронта клока. Вообще можно скачать готовое ядро 8b/10b от Xilinx. У них есть разные варианты в том числе и на основе блочной памяти. Большое спасибо за замечание! Вы оказались правы! Декодер в приложении я пересадил на клок (он по умолчанию срабатывал на любое изменение входного сигнала), и завел в него клок который в 2 раза медленнее того которым тактируется энкодер. В итоге фронт стал приходиться на середину каждого слова в потоке, и все ошибки пропали, при том что декодер верно показывает на своем выходе то, что собственно было на входе энкодера. Спасибо еще раз! Отсюда буду думать, и анализировать, как это по итогу должно будет выглядеть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Suicide 0 28 июля, 2023 Опубликовано 28 июля, 2023 · Жалоба А нет, пардон, кажется я рано радуюсь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 28 июля, 2023 Опубликовано 28 июля, 2023 · Жалоба В 28.07.2023 в 14:32, Suicide сказал: А нет, пардон, кажется я рано радуюсь Странно все это. Раньше кодер, декодер 8b/10b шли отдельными ip_core (без клока я такое впервый раз вижу). А сейчас изъяли за ненадобностью. Оно все должно быть уже встроенное. Как и rx_aligner перед декодером. Может поможет. mail_out_2023.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 31 июля, 2023 Опубликовано 31 июля, 2023 · Жалоба В 28.07.2023 в 21:04, sazh сказал: rx_aligner А можно поподробнее ? ))) Все время приходилось своими силами выравнивать клок путем динамического сдвига фазы. Неужели можно это не делать теперь ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Suicide 0 31 июля, 2023 Опубликовано 31 июля, 2023 · Жалоба Здравствуйте еще раз! Если не затруднит, взгляните пожалуйста на временную диаграмму энкодера моего. CLK - клок; DATA_8b - входные 8 битные слова; DATA_10b - кодированные слова; DISPARITY_OUT - соответственно текущий running disparity; NULLS/ONES - количество нулей и единиц в текущем 10-битном слове; RST - ресет. Есть ощущение что всё правильно, но может running disparity должен быть сдвинут вперед или вроде того? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 31 июля, 2023 Опубликовано 31 июля, 2023 · Жалоба В 31.07.2023 в 11:45, Flip-fl0p сказал: Все время приходилось своими силами выравнивать клок путем динамического сдвига фазы. Я про клок ничего не говорил. Даже не знаю, куда его впихнуть. 1. На передающей стороне канала каждая 10-битная кодовая последовательность трансформируется с помощью операции сериализации в последовательный поток битов. 2. На принимающей стороне канала последовательный поток битов трансформируется с помощью операции десериализации в поток 10-битных кодовых последовательностей. 3. Поток данных выровнен с помощью операции символьного выравнивания, проводимой на символьном уровне путем установления границ между принимаемыми из канала кодовыми последовательностями длиной 10 битов. Ну а теперь есть ip_core. И его описание. rx_aligner.v Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Suicide 0 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба On 7/29/2023 at 12:04 AM, sazh said: Странно все это. Раньше кодер, декодер 8b/10b шли отдельными ip_core (без клока я такое впервый раз вижу). А сейчас изъяли за ненадобностью. Оно все должно быть уже встроенное. Как и rx_aligner перед декодером. Может поможет. mail_out_2023.zip 9.5 kB · 7 downloads Что-то я походу конкретно не так делаю, а у вас случайно нет тестбенча где вот эти энкодер и декодер друг друга вкручены? Я подключаю напрямую, а у меня чушь какая-то, как будто что-то отрабатывать не успевает. Буду благодарен за тб или подсказку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба В 01.08.2023 в 11:53, Suicide сказал: Что-то Скачайте описание этого Альтеровского ip_core. Оно свободно висит в сети. test.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Suicide 0 7 августа, 2023 Опубликовано 7 августа, 2023 · Жалоба On 8/1/2023 at 11:49 PM, sazh said: test.zip 1.1 kB · 2 downloads Большое спасибо! Я подключил свой энкодер в этом тестбенче, и всё стало почти хорошо. На представленных изображениях, сигналы моего энкодера обозначены красным цветом, энкодера из тестбенча желтым цветом, а декодера зеленым цветом. Running disparity (далее RD) у моего энкодера и энкодера из тестбенча совпадают, НО! есть нюанс. Когда в тестбенче подряд передаются символы 1,2,3 и т.д., декодер выплёвывает ошибки Frderr. После изучения временных диаграм, я заметил что после символов 2A8. 297, энкодер из тестбенча начинает выдавать символы противоположного RD, нежели у моего энкодера (при этом RD по сути совпадает). Вероятно это происходит здесь - Spoiler case (invert) 2'b00: _Sdat10b_pos = {dat10b[9], (dat10b[8] ^ speciald), (dat10b[7] ^ speciald), dat10b[6], dat10b[5:0]}; 2'b01: _Sdat10b_pos = {dat10b[9:6], ~ dat10b[5:0]}; 2'b10: _Sdat10b_pos = {~ dat10b[9:6], dat10b[5:0]}; 2'b11: _Sdat10b_pos = {~ dat10b[9:6], ~ dat10b[5:0]}; endcase Но я не до конца понимаю механику выбора кода таким образом. Почему при совпадающем RD код получается разным на каком-то участке (где 1,2,3 и т.д)? Причем дальше всё снова становится нормально. Ознакомление вот с этим документом - https://www.intel.com/programmable/technical-pdfs/654488.pdf - ничего к сожалению не дало( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 7 августа, 2023 Опубликовано 7 августа, 2023 · Жалоба В 07.08.2023 в 13:21, Suicide сказал: Показать контент case (invert) 2'b00: _Sdat10b_pos = {dat10b[9], (dat10b[8] ^ speciald), (dat10b[7] ^ speciald), dat10b[6], dat10b[5:0]}; 2'b01: _Sdat10b_pos = {dat10b[9:6], ~ dat10b[5:0]}; 2'b10: _Sdat10b_pos = {~ dat10b[9:6], dat10b[5:0]}; 2'b11: _Sdat10b_pos = {~ dat10b[9:6], ~ dat10b[5:0]}; endcase Почему Не знаю. Поэтому и пользуюсь ip ( в сети много вариантов и все они хорошо работают, когда сами на себя). Вы сами для себя определитесь, чей энкодер правильно работает. Вот еще вариант Вам для сравнения. Больше ничем помочь не могу. endec8b10b_rev1.0.tar.gz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 7 августа, 2023 Опубликовано 7 августа, 2023 · Жалоба Почитайте вот это еще, мне в свое время весьма пригодилось. В конечно счете, просматривайте начальные состояния RD (должен быть -1 на первом SOF). Либо берите в руки калькулятор и вручную посчитайте, какой должен быть на выходе энкодера 10-битный символ и смотрите, чей правильный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться