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

Непонятная проблема с LVDS

кратко.

 

есть плис 4 виртекс есть ацп

всё это дело соединено между собой.

 

битовая частота 300 мгц кадровая 50

изначально соединение произведено не правильно - сигналы заведены на центральную колонну плис, поэтому не получается штатно использовать деление с помощью BUFR, а топологию корректировать пока не возможно.

 

поэтому

 

входные буфера сделаны правильно с помощью iserdes и BITSLIP

а вот клок 300 подан на DCM - которым поделён им до 50 мегагерц и использован для десериализации сигналов.

 

генератор 50 мгц стоит на ацп. ацп формирует 300 и кадровую 50 и 50 однопроводную на тактирование остальной плисины.

 

решение кривое, но логически рабочее.

 

так вот есть некоторая непонятная проблема, появившаяся после некоторого заполнения плис.

 

иногда данные не корректные, вернее они с импульсными помехами - однопериодными врезками, причём явно видно, что модули bitslip правильно сдвинули поток

 

переконфигурация bitslip не помогает, всевозможные сдвиги сигналов друг относительно друга не помогают

 

помогает только пересброс ресетом DCM модуля. и если всё включится правильно , то потом работае нормально сколь угодно долго. соответственно если не правильно сколь угодно долго работает не правильно.

 

что это может быть???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Итак, 300 идет на ISERDES напрямик (или через DCM 1:1 ?), 50 идет на ISERDES через DCM. Два вопроса: как обрабатывается кадровый строб от АЦП и уверены ли вы, что фронт 300 МГц, приходящих на ISERDES находится в середине окна данных?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

 

 

Очень похожие симптомы на проблемы с питанием FPGA. У меня похожее было при связи двух V2 между собой через LVDS. В "пустых" плисах- все бегало без ошибок, добавили логику обработки - стали периодически выскакивать ошибки передачи данных. В результате обнаружилось что при начале обработки блока данных небольшая посадка питания вызывала кратковременный сбой DCM (при этом LOCK НЕ!!!! сбрасывался). Вылечилось заменой другой тип стабилизатора питания, и дополнительной обвеской емкостями.

 

Успехов! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Итак, 300 идет на ISERDES напрямик (или через DCM 1:1 ?), 50 идет на ISERDES через DCM. Два вопроса: как обрабатывается кадровый строб от АЦП и уверены ли вы, что фронт 300 МГц, приходящих на ISERDES находится в середине окна данных?

 

да 300 идёт на iserdes c 1*1 DCM соответственно на входы clk_div десериалайзера идёт с 1/6.

 

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

 

значение подобрано и находится в диапазоне от 50 до 250 - вписывается серединка - 150.

 

когда происходит ошибка никакими манипуляциями с этим числом не удаётся ничего ихменить - ложный сигнал идёт как бы в давесок к правильной работе.

 

есть подозрение, что чтото не так с работой самого клок менеджера - так как при его пересбросе он встаёт то так , то так

 

временно сделан модуль, который распознаёт неправильную работу (распознавая помехи) и делает полное переконфигурирование интерфейса до тех пор пока не станет хорошо. Понимаю что это не правильно, но другого способа не придумал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С первым вопросом разобрались, остался второй: как кадровый строб от АЦП обрабатывается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С первым вопросом разобрались, остался второй: как кадровый строб от АЦП обрабатывается.

 

кадровый строб так-же как и данные проходят десериалайзер с тем-же модулем bitslip далее даётся несколько заходов на анализ принятых данных и выдаётся стров на битслип (пропуск) если последовательность не соответствует 111111000000 - как только начинает соответствовать стробы пропуска далее не выдаются и даётся инфа что подстроено

 

само собой стробы пропуска выдаются и на все битслипы данных с ацп. это я взял из 866 документа от ксайлинкс.

 

ацп выдаёт код в прямом коде - то есть при отсутствии сигнала 2047

 

видимо, при переходе через этот ноль(2047) вверх и вниз выскакивают палочки

 

 

2050

2048

2045

3050

2045

---

2046

1000

2046

 

они всегда длиной в один отсчёт короче бред какой-то.

 

но главное - повторюсь если всё сработало правильно - будет работать правильно бесконечно долго не смотря ни на что, а если не правильно - то также неправильно будет работать дальше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть, кадровый строб по сути не используется: АЦП ставится в тестовый режим выдавать 111111000000, и дальше пинается BITSLIP до тех пор, пока внутри не увидится 111111000000. Я в свое время пытался так сделать - это оказалось как-то сложно, и я сделал быстрее и работоспособно:

 

1. Входной поток захватывается клоком 300, прошедшим через IDELAY (или DCM, неважно), сначала в DDR триггеры в пэде и потом попарно в обычный сдвиговый регистр на триггерах.

2. По сигналу FRAME этот сдвиговый регистр переписывается в параллельный - данные готовы. Но они пока в домене 300 МГц.

3. Далее elastic buffer из короткого двуклокового FIFO на LUT: пишется по частоте 300, признак записи - FRAME, читается всегда по частоте 300/6 (сделана банальная схема, дающая ему заполнится до половины перед началом вычитки).

Далее, делается timesim, по нему определяется нужная задержка клока и вписывается в IDELAY или DCM статически. Все, никаких автоматов, никаких динамических подстроек и битслипов.

 

Что же касается вашего случая - то тут еще вопросы следующие:

1. Зачем записывать задержку в порт DCM из автомата, если она расчитана зараннее? Сделайте fixed phase shift и уберите этот автомат.

2. Судя по тому, что вы ждете 12 бит на 50 МГц, а исходная частота 300 МГц - у вас данные все же DDR, а в документации на ISERDES я нигде не вижу, чтобы он мог обрабатывать 12 бит (10 максимум), поэтому до сих пор не понимаю до конца ваш дизайн.

3. Посмотрите на фазовое соотношение FRAME и внутренних 50 МГц (с помощью ChipScope например), может быть, это что-то прояснит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кадровый строб используется.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ууууу... Ужас. Посмотрите в документацию на АЦП: держу пари вы увидите там, что скважность кадрового строба в 50% не гарантируется. Потом, кадровый строб должен захватываться SDR по переднему фронту тактовой частоты, так как он изменяется по ее заднему фронту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ads5242 - там всё гарантируется - то что я сделал это из примеров ксайлинкс

 

порт виртекса 4го симметричный - в параллель работает 2 десериалайзера в сдр режиме. каджый по своему фронту пишет по 6 бит.

 

кадровый строб учитывается 1 раз при подстройке дальше нет.

 

150 сначала было вписано жестко - начал искать глюки переделал на изменяемую

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ads5242 - там всё гарантируется
Страница 7 ДШ, ADCLKOUT duty cycle 45-55%. 10% зазор, это бит целый, однако.

 

- то что я сделал это из примеров ксайлинкс

 

порт виртекса 4го симметричный - в параллель работает 2 десериалайзера в сдр режиме. каджый по своему фронту пишет по 6 бит.

И это Xilinx так рекомендовал делать, поставить в параллель два ISERDES в SDR режиме для захвата DDR сигнала? Не верю, (с) Станиславский: там специально сделана возможность работы ISERDES в режиме DDR, так как параллельное их включение не обеспечивает оптимальной трассировки и может приводить к скосу между их входами.

 

 

кадровый строб учитывается 1 раз при подстройке дальше нет.
Плохо. Итог: у вас проект сделан, что называется, не robust: есть несколько мест, вроде и не ошибочных, но тонких, а в сумме не пашет. Попробуйте сделайте как я писал, это немного времени займет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если я сделаю как у вас то всю плисину займёт десериалайзер

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

http://www.xilinx.com/support/documentatio...tes/xapp866.pdf

 

я уже не первый раз даю тебе эту ссылку - неужели так сложно 1 раз прочитать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я ее прочитал, неоднократно в свое время, но дело не в этом: у меня-то все работает, а о помощи просите вы. Поэтому прочтите его и вы, на странице 8: "The classic ADC interface does not use I/O features of Virtex-4 or Virtex-5 FPGAs". Так что мое предложение - это первая часть xapp866, не более.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...