Перейти к содержанию
    

Suicide

Участник
  • Постов

    18
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Suicide

  • Звание
    Участник
    Участник

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Доброго времени суток, форумчане! Прошу подсказки. Генерируем ядро передатчика Jesd204B TX в Vivado: - 1 линия - 1 фрейм 17 октетов = мультифрейм Формируется Example Design, в тестбенче которого все равно всё написано для дефолтных настроек типа 2 октета 32 фрейма. Но это ладно, само ядро то формируется как положено, а тестбенч правится руками. Период SYSREF 68 клоков (длина мультифрейма * 4 - так в тестбенче подсказывают в комментарии). Запускаем в Questa Sim, добавляем блок tx, и внутри самого блока получается, на линии данных, конфигурация начинается с 4 октета. Должно быть типа "1c 01 02 03 04 05 06 07 08 09 ... 7c", а по факту после запятых (BC которые), конфигурация появляется вот так "04 05 06 07 08 09 ... 7с". Скорее всего я что-то недоправил в тестбенче. Никто не сталкивался с такой проблемой? Нет ли у кого-то случайно лишнего часа времени сгенерить и попробовать? Простите что скринов не добавляю, под рукой нет сейчас, а информация нужна. Если нужна какая-то еще инфа о происходящем, скажите, дополню. Если что большое спасибо сразу!
  2. Спасибо! Сейчас ознакомлюсь. Вот как раз прикол в том, что у моего и альтеровского энкодера RD совпадают, а альтеровский энкодер иногда зачем-то инвертирует код. Я вот и не могу понять этот механизм, зачем он это делает. У меня просто LUT из которого выдирается код соответствующий текущему RD, а вот альтеровский зачем-то еще в некоторых случаях инвертирует. Для меня за недостатком опыта и информации, пока что это загадка.
  3. Большое спасибо! Я подключил свой энкодер в этом тестбенче, и всё стало почти хорошо. На представленных изображениях, сигналы моего энкодера обозначены красным цветом, энкодера из тестбенча желтым цветом, а декодера зеленым цветом. Running disparity (далее RD) у моего энкодера и энкодера из тестбенча совпадают, НО! есть нюанс. Когда в тестбенче подряд передаются символы 1,2,3 и т.д., декодер выплёвывает ошибки Frderr. После изучения временных диаграм, я заметил что после символов 2A8. 297, энкодер из тестбенча начинает выдавать символы противоположного RD, нежели у моего энкодера (при этом RD по сути совпадает). Вероятно это происходит здесь - Но я не до конца понимаю механику выбора кода таким образом. Почему при совпадающем RD код получается разным на каком-то участке (где 1,2,3 и т.д)? Причем дальше всё снова становится нормально. Ознакомление вот с этим документом - https://www.intel.com/programmable/technical-pdfs/654488.pdf - ничего к сожалению не дало(
  4. Что-то я походу конкретно не так делаю, а у вас случайно нет тестбенча где вот эти энкодер и декодер друг друга вкручены? Я подключаю напрямую, а у меня чушь какая-то, как будто что-то отрабатывать не успевает. Буду благодарен за тб или подсказку.
  5. Здравствуйте еще раз! Если не затруднит, взгляните пожалуйста на временную диаграмму энкодера моего. CLK - клок; DATA_8b - входные 8 битные слова; DATA_10b - кодированные слова; DISPARITY_OUT - соответственно текущий running disparity; NULLS/ONES - количество нулей и единиц в текущем 10-битном слове; RST - ресет. Есть ощущение что всё правильно, но может running disparity должен быть сдвинут вперед или вроде того?
  6. Большое спасибо за замечание! Вы оказались правы! Декодер в приложении я пересадил на клок (он по умолчанию срабатывал на любое изменение входного сигнала), и завел в него клок который в 2 раза медленнее того которым тактируется энкодер. В итоге фронт стал приходиться на середину каждого слова в потоке, и все ошибки пропали, при том что декодер верно показывает на своем выходе то, что собственно было на входе энкодера. Спасибо еще раз! Отсюда буду думать, и анализировать, как это по итогу должно будет выглядеть.
  7. Диспаритет -1 да. У меня вот тотал диспаритет мелькает 1,3 где ошибка, тогда видимо что-то там страшное происходит. Пойду разбираться, спасибо)
  8. Здравствуйте! Не могу до конца понять как работает 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
  9. Спасибо! Буду ознакамливаться. Я вот еще немного не понял, как распространяется сигнал SYSREF к приёмнику и передатчику, если они располагаются на разных устройствах. Есть вероятность что вопрос глупый, тапками не бейте сильно, пожалуйста.
  10. Здравствуйте! Чирикаю ручкам JESD204B. Осилил энкодер сделать 8b10b, пока завис на этапе синхронизации, ILAS и т.д. В частности пытаюсь понять концепцию LMFC. В JESD204B Survival Guide написано что эта штука просто считает бесконечно до числа равного "Кол-ву октетов на фрейм Х На Кол-во фреймов в мультифрейме - 1.". Сигнал SYSREF ресетит все LMFC как в передатчике, так и в приёмнике, за счёт чего клоки во всей системе оказываются выровнены. Где я немного залип и зациклился, это в понимании как и где формируется Frame Clock, прямо в LMFC тупо счётчиком? Не могу найти временных диаграмм с пояснениями как в JESD204B клоки расфасованы и как LMFC работает. В гугле не забанили, имею JESD204B Survival Guide, стандарт JEDEC, почитанные но не совсем понятые. Отсюда и вопросы полезли. Помогите пожалуйста дураку кто чем сможет!
  11. Про ядра интересно, надо поискать! Да) цифра) Всем огромное спасибо что откликнулись! Перевариваю пока информацию
  12. Здравствуйте уважаемые форумчане! Изучаю систему Cadence, в частности NC-Verilog и Genus Синтезирую под библиотеку Silterra 180nm CL180G Вот модуль 8-бит умножителя, который хорошо работает на частоте 130 Mhz module multik (clk, A, B, out, reset); input clk; input reset; input [7:0] A; input [7:0] B; output [15:0] out; reg [7:0] Ar,Br; reg [15:0] out_r; reg [7:0] helpers16 [40:0]; reg [15:0] helpers31 [40:0]; integer i; always @ (posedge clk) begin Ar<=A; Br<=B; helpers31[0]<=Ar*Br; for(i=1; i<10; i=i+1) helpers31 [i] <= helpers31[i-1]; end assign out=helpers31[i-1]; endmodule Вот код умножителя на 16-бит, который "захлебывается", т.е. периодически показывает неверные значения на частоте 130 Mhz. Во вложении скрин, там где желтые значения. module multik (clk, A, B, out, reset); input clk; input reset; input [15:0] A; input [15:0] B; output [31:0] out; reg [15:0] Ar,Br; reg [31:0] out_r; reg [15:0] helpers16 [40:0]; reg [31:0] helpers31 [40:0]; integer i; always @ (posedge clk) begin Ar<=A; Br<=B; helpers31[0]<=Ar*Br; for(i=1; i<10; i=i+1) helpers31 [i] <= helpers31[i-1]; end assign out=helpers31[i-1]; endmodule Пробовал retime -prepare retime -min_delay в надежде что генус раскидает регистры, и все заработает, но не вышло. Отсюда возникает 2 вопроса - какая существует тактика для перемножения больших чисел на больших частотах? - как пользоваться командой генуса - retime? Заранее спасибо за любые рекомендации!
  13. Подскажите - FIFO для XAUI нужен сингл-клоковый, или с разными клоками?
  14. Можно ли рассмотреть что в принципе входит в XAUI? Допустим - FIFO, конвертер параллельно-последовательный и т.д.
×
×
  • Создать...