Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Непонятная проблема с LVDS
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
rv3dll(lex)
кратко.

есть плис 4 виртекс есть ацп
всё это дело соединено между собой.

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

поэтому

входные буфера сделаны правильно с помощью iserdes и BITSLIP
а вот клок 300 подан на DCM - которым поделён им до 50 мегагерц и использован для десериализации сигналов.

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

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

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

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

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

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

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


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

Успехов! Rob.
rv3dll(lex)
Цитата(DmitryR @ Apr 9 2009, 10:53) *
Итак, 300 идет на ISERDES напрямик (или через DCM 1:1 ?), 50 идет на ISERDES через DCM. Два вопроса: как обрабатывается кадровый строб от АЦП и уверены ли вы, что фронт 300 МГц, приходящих на ISERDES находится в середине окна данных?


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

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

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

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

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

временно сделан модуль, который распознаёт неправильную работу (распознавая помехи) и делает полное переконфигурирование интерфейса до тех пор пока не станет хорошо. Понимаю что это не правильно, но другого способа не придумал.
DmitryR
С первым вопросом разобрались, остался второй: как кадровый строб от АЦП обрабатывается.
rv3dll(lex)
Цитата(DmitryR @ Apr 9 2009, 12:28) *
С первым вопросом разобрались, остался второй: как кадровый строб от АЦП обрабатывается.


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

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

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

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


2050
2048
2045
3050
2045
---
2046
1000
2046

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

но главное - повторюсь если всё сработало правильно - будет работать правильно бесконечно долго не смотря ни на что, а если не правильно - то также неправильно будет работать дальше.
DmitryR
То есть, кадровый строб по сути не используется: АЦП ставится в тестовый режим выдавать 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 например), может быть, это что-то прояснит.
rv3dll(lex)
кадровый строб используется.

так как он сопровождает 12 бит данных на 6 импульсах клока - то после его десериализации получается 111111000000 если он в фазе с делённым клоком клок менеджера, а так как он в фазе с данными то подстройкой пропуска битслипа достигается правильный сдвиг.
DmitryR
Ууууу... Ужас. Посмотрите в документацию на АЦП: держу пари вы увидите там, что скважность кадрового строба в 50% не гарантируется. Потом, кадровый строб должен захватываться SDR по переднему фронту тактовой частоты, так как он изменяется по ее заднему фронту.
rv3dll(lex)
ads5242 - там всё гарантируется - то что я сделал это из примеров ксайлинкс

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

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

150 сначала было вписано жестко - начал искать глюки переделал на изменяемую
DmitryR
Цитата(rv3dll(lex) @ Apr 9 2009, 15:02) *
ads5242 - там всё гарантируется
Страница 7 ДШ, ADCLKOUT duty cycle 45-55%. 10% зазор, это бит целый, однако.

Цитата(rv3dll(lex) @ Apr 9 2009, 15:02) *
- то что я сделал это из примеров ксайлинкс

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


Цитата(rv3dll(lex) @ Apr 9 2009, 15:02) *
кадровый строб учитывается 1 раз при подстройке дальше нет.
Плохо. Итог: у вас проект сделан, что называется, не robust: есть несколько мест, вроде и не ошибочных, но тонких, а в сумме не пашет. Попробуйте сделайте как я писал, это немного времени займет.
rv3dll(lex)
если я сделаю как у вас то всю плисину займёт десериалайзер
DmitryR
У страха глаза велики, там будет примерно по 25 триггеров и лутов.
rv3dll(lex)
http://www.xilinx.com/support/documentatio...tes/xapp866.pdf

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

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

если есть узкие места они должны проявляться на ходу,

если кадровый клок не меандр - не правильно захватит десериалайзер - сигналы сдвинутся и вместо 2000 будет или 4000 или 1000

но сигналы правильные только сбоенные. и в таком состоянии они когда все подстройки уже проведены

переподстройка ничего не даёт

ПОВТОРЯЮ НАЛИЧИЕ СБОЯ ЗАВИСИТ ТОЛЬКО ОТ ПЕРЕСБРОСА DCM И БОЛЬШЕ НЕ ОТ ЧЕГО.

в классическом интерфейсе он останется на своём месте
DmitryR
А если вам надо подключить 64 канала - как вы собираетесь вообще на DCM выезжать? Если вы расчитываете, что LCLK у всех будет строго синфазный, вы возьмете один и пощелкаете им 64 канала - вас может постичь такое разочарование, по сравнению с которым текущие проблемы померкнут.
rv3dll(lex)
вот под 64 будет новая плата - правильная. а пока надо понять как работать с имеющимся железом

повторюсь - работает или нет зависит от загрузки плисины. если её освободить до 80 процентов всё работает как часы
rloc
Цитата(rv3dll(lex) @ Apr 9 2009, 18:26) *
повторюсь - работает или нет зависит от загрузки плисины. если её освободить до 80 процентов всё работает как часы


По опыту могу сказать в Virtex-4 DCM крайне нестабильны. Вы заметили какой в репорт-файле пишется джиттер на DCM? На мой взгляд величина очень огромная.
Некоторое время назад я проводил ряд экспериментов над решением вопроса о быстродействии Virtex-4 и по случайному стечению обстоятельств на первой плате из партии в 10 шт. удалось разогнать DCM до 600МГц по выходу FX (по даташиту максимальная частота которого составляет где-то 300МГц) и пройти тесты по фильтрации сигнала с АЦП с помощью FIR-фильтра. Обрадованный результатом я попытался повторить эксперимент на других платах, но ничего не вышло - прошивка работала со сбоями, причем даже при снижении частоты по выходу FX до максимально рекомендованных 300МГц (в качестве опорного использовался КГ с низкими фазовыми шумами на 5-ой механической гармонике). Тогда я ради эксперимента попробовал подать опору от внешнего генератора исключив DCM - все платы устойчиво заработали на 600МГц. Ставить на плату отдельный генератор не позволяло место, а работать на низкой частоте не хотелось при таком-то потенциале! Тогда я сделал следующее - я стал поочередно фиксировать местоположение DCM на кристалле с помощью атрибута RLOC_ORIGIN, пока не добился устойчивой работы всех плат на частоте ~425МГц.
Проблема мне видится в плохой ЭМС внутри кристалла из-за отсутствия развязки по цепям питания DCM и всей остальной части, отсюда очевидна и прямая зависимость от занимаемого объема и потребления (в моем случае вся площадь BGA кристалла на ПП была усеяна конденсаторами 0402).
Могу с уверенностью сказать, что на частотах до 400МГц DDR можно спокойно обходиться без DCM и SERDES, особенно когда по условиям работы тактовая частота идет с перерывами, как например при общении по линк-портам TigerSHARC'а.

P.S. Есть надежда, что в новых Virtex-6 эта проблема решена
Цитата
MMCM Programmable Features
The MMCM has three input-jitter filter options: low bandwidth, high bandwidth, or optimized mode. Low-bandwidth mode has
the best jitter attenuation but not the smallest phase offset. High-bandwidth mode has the best phase offset, but not the best
jitter attenuation. Optimized mode allows the tools to find the best setting.
avesat
Цитата(rloc @ Apr 9 2009, 21:55) *
По опыту могу сказать в Virtex-4 DCM крайне нестабильны. Вы заметили какой в репорт-файле пишется джиттер на DCM? На мой взгляд величина очень огромная.
Некоторое время назад я проводил ряд экспериментов над решением вопроса о быстродействии Virtex-4 и по случайному стечению обстоятельств на первой плате из партии в 10 шт. удалось разогнать DCM до 600МГц по выходу FX (по даташиту максимальная частота которого составляет где-то 300МГц) и пройти тесты по фильтрации сигнала с АЦП с помощью FIR-фильтра.

Выложите отроученый проект в котором сошлись констрейнсы прописанные на 600MHz для DCM, что то слабо верится этим цифрам.
DmitryR
Цитата(rloc @ Apr 9 2009, 22:55) *
Могу с уверенностью сказать, что на частотах до 400МГц DDR можно спокойно обходиться без DCM и SERDES

Ну вот послушайте же наконец, второе мнение совпадает с моим. Также еще хочу заметить следующее: в новом дизайне, где будет 64 канала, вы если будете ячить по-своему, у вас на выходах ISERDES, относящихся к разным кристаллам АЦП получатся разные временные домены, поэтому все равно придется ставить elastic. То есть сделав сейчас по-моему вы получите решение, которое одинаково бодро будет работать и на этом железе, и на новом. Если же вы будете продолжать по-своему - вы потратите время дважды: один раз сейчас, чтобы найти и прибить баг, и один раз потом, делая новый дизайн для нового железа.
rloc
Цитата(avesat @ Apr 10 2009, 11:25) *
Выложите отроученый проект в котором сошлись констрейнсы прописанные на 600MHz для DCM, что то слабо верится этим цифрам.

Я частоту DCM задаю потом, программным путем, а для ISE в констрейнсах ставлю условия помягче rolleyes.gif
rv3dll(lex)
Цитата(DmitryR @ Apr 10 2009, 12:00) *
Ну вот послушайте же наконец, второе мнение совпадает с моим. Также еще хочу заметить следующее: в новом дизайне, где будет 64 канала, вы если будете ячить по-своему, у вас на выходах ISERDES, относящихся к разным кристаллам АЦП получатся разные временные домены, поэтому все равно придется ставить elastic. То есть сделав сейчас по-моему вы получите решение, которое одинаково бодро будет работать и на этом железе, и на новом. Если же вы будете продолжать по-своему - вы потратите время дважды: один раз сейчас, чтобы найти и прибить баг, и один раз потом, делая новый дизайн для нового железа.



про временные домены не понятно????

второе мнение - это у кого????

сделав по Вашему равносильно тому, что в Fx кристалле делать процессор на микроблейзе. Я не прошу навязывания мне своего дизайна, который вы кстати не дадите, а задаю вопрос про имеющийся, сделанный как гибрид из предоставленных на сайте ксилинка примеров. И повторюсь делать я буду так как надо, а не как получилось у Вас.

У меня были сомнения что ошибки возникают при переходе с домена на домен и я сделал следующее.

поставил переход 1 и 2 канала ацп по одному фронту а 3 и 4 по другому. ошибок от этого меньше не стало. все каналы или работают или не работают То есть дело тут в ошибке более серьёзной чем переход с домена на домен.
DmitryR
Цитата(rv3dll(lex) @ Apr 10 2009, 14:28) *
про временные домены не понятно????
Что тут непонятного: каждый чип АЦП будет иметь свой LCLK, а это свой временной домен. Можно конечно попробовать на высокочастотный вход ISERDES подавать LCLK конкретного АЦП, а на деленный - одинаковый на все, благо что фаза у него бежать не будет к LCLK, хотя и будет отличаться. Но не знаю, не уверен, что заработает стабильно.

Цитата(rv3dll(lex) @ Apr 10 2009, 14:28) *
второе мнение - это у кого????
Это у rloc.

Цитата(rv3dll(lex) @ Apr 10 2009, 14:28) *
сделав по Вашему равносильно тому, что в Fx кристалле делать процессор на микроблейзе.
Это не так: я вам предлагаю на логике сделать то, чего встроенный блок не может (DDR регистр длиной 12 бит).

Цитата(rv3dll(lex) @ Apr 10 2009, 14:28) *
Я не прошу навязывания мне своего дизайна, который вы кстати не дадите, а задаю вопрос про имеющийся, сделанный как гибрид из предоставленных на сайте ксилинка примеров. И повторюсь делать я буду так как надо, а не как получилось у Вас.
Тут у вас целых три противоречия. Первое: вы задаете вопрос про имеющийся дизайн, но я его считаю насквозь неправильным, и соответственно даю советы. Оснований же считать его правильным у вас нет: он не работает. Вам кажется, что он не работает чуть-чуть, еще пару часов - и все будет в порядке, но идет уже второй день, и послушав меня вы бы уже скорее всего закрыли этот топик или получили сильное подтверждение того, что проблемы не в прошивке. Второе: у вас действительно сделан гибрид, поэтому он не подходит под определение "как надо". И третье: глупо просить советов, не будучи готовым им последовать.

Цитата(rv3dll(lex) @ Apr 10 2009, 14:28) *
У меня были сомнения что ошибки возникают при переходе с домена на домен и я сделал следующее.

поставил переход 1 и 2 канала ацп по одному фронту а 3 и 4 по другому. ошибок от этого меньше не стало. все каналы или работают или не работают То есть дело тут в ошибке более серьёзной чем переход с домена на домен.
Так делать переход неверно, ибо если фазы частот бегут друг к другу - вы получите ошибку хоть к какому фронту привяжитесь. Но это так, к слову, тут похоже не та проблема.
rv3dll(lex)
The classic ADC interface version of the one-wire reference design can support any number of
resolution bits up to 80 MSPS because the serializer is constructed inside the FPGA logic
(slices and flip-flops) and uses a digital clock manager (DCM) as the internal clock source.
However, the featured ADC interface is limited to 12-bit resolution and approximately
120 MSPS because it is bonded to the ISERDES components.


это из того документа
на сколько я понимаю, Вы считаете что 866 документ от ксайлинкс и зип файл с примерами вещь абсолютно не рабочая, не правильная и не может быть использована???

я знаю что не полностью повторил интерфейс, заменив делитель на слок менеджер. И ещё я знаю что есть проект в котором сделано всё и работает и знаю что стереть из своего, чтобы тоже заработало.

повторюсь проблема появилась после заполнения плисины


Цитата(DmitryR @ Apr 10 2009, 14:50) *
Так делать переход неверно, ибо если фазы частот бегут друг к другу - вы получите ошибку хоть к какому фронту привяжитесь. Но это так, к слову, тут похоже не та проблема.


всё тактируется от одного резонатора.

и эти 2 частоты это 50 мегагерц с резонатора напрямую и 50 мегагерц которые клок менеджер сделал из 300 - как же должно всё колбасить чтоб они побежали на половину периода.
DmitryR
Цитата(rv3dll(lex) @ Apr 10 2009, 15:13) *
повторюсь проблема появилась после заполнения плисины

Повторюсь, rloc вам сказал, с чем это может быть связано. Вы же уперлись, вот вам надо с DCM и все, Xilinx посоветовал - теперь надо убиться, но выполнить. Вы все их советы так выполняете? По емкостной развязке например, все-все дословно? Кажется, топик вообще начался с того, что вы разводку сделали в корне неверно. Так что теперь пытаться тыкать людям, которые пытаются несмотря на вашу грубость вам помочь xapp и говорить, что они балбесы несмыслящие - вроде как-то некрасиво, не находите?

Цитата(rv3dll(lex) @ Apr 10 2009, 15:18) *
и эти 2 частоты это 50 мегагерц с резонатора напрямую и 50 мегагерц которые клок менеджер сделал из 300 - как же должно всё колбасить чтоб они побежали на половину периода.

Я вобщем-то отметил, что не думаю, что проблема тут. Однако, если у вас есть в FPGA 50 напрямик от резонатора (странная идея питать такие высокочастотные АЦП от резонатора, ну да ладно) самое время попробовать использовать ее вместо деленной от 300.
rv3dll(lex)
Цитата(DmitryR @ Apr 10 2009, 15:48) *
Повторюсь, rloc вам сказал, с чем это может быть связано. Вы же уперлись, вот вам надо с DCM и все, Xilinx посоветовал - теперь надо убиться, но выполнить. Вы все их советы так выполняете? По емкостной развязке например, все-все дословно? Кажется, топик вообще начался с того, что вы разводку сделали в корне неверно. Так что теперь пытаться тыкать людям, которые пытаются несмотря на вашу грубость вам помочь xapp и говорить, что они балбесы несмыслящие - вроде как-то некрасиво, не находите?


Я вобщем-то отметил, что не думаю, что проблема тут. Однако, если у вас есть в FPGA 50 напрямик от резонатора (странная идея питать такие высокочастотные АЦП от резонатора, ну да ладно) самое время попробовать использовать ее вместо деленной от 300.



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

параллельно приходит битовый и кадровый клок. битовый клок идёт на другой менеджер который получает 50 и 300
DmitryR
Цитата(rv3dll(lex) @ Apr 10 2009, 16:55) *
чтобы вопросов не возникало - генератор фирмы эпсон стоит на удалённой плате с ацп
с ацп идёт 50 мегагерц на плис и приходит на вход клок менеджера, с которого идут 50 300 100 для шин процессоров и прочего.

Вопросов не возникает, возникают дополнительные предостережения: умножая 50 на шесть, чтобы получить 300, DCM находится в HF mode, а для этого режима 50 на входе - минимально допустимая, что на мой взгляд многократно увеличивает риски, которые описал rloc.

Да и вообще, вторая DCM тут точно лишняя: можно из LCLK получить 300 и 100, а 50 получить потом из 100 на PMCD или вообще на триггере.
rv3dll(lex)
Да дело ещё и в том, что АЦП почти всегда придавлено энерго сбережением - при этом с неё клоки не идут
avesat
Цитата(rloc @ Apr 10 2009, 11:26) *
Я частоту DCM задаю потом, программным путем, а для ISE в констрейнсах ставлю условия помягче rolleyes.gif


Т.е вы разводите проект с констрейнсами скажем 100Mhz, а потом увеличиваете частоту (насилуя DCM заоблачными частотами) проводите эксперименты и после этого пишите что DCM глючит и про какое-то EMC. Естественно он будет глючить, т.к роут и размещение внутри кристалла проводится относительно тех констрейнсов условия которых вы ставите помягче. Вот часть даташита по DCM
Сорри за оффтоп в этой теме.
DmitryR
Цитата(rv3dll(lex) @ Apr 10 2009, 18:47) *
Да дело ещё и в том, что АЦП почти всегда придавлено энерго сбережением - при этом с неё клоки не идут

А тогда все ясно: если у DCM клок на входе останавливался - ее обязательно надо сбрасывать (не забыв подождать, пока PLL в АЦП раскачается), иначе она может глючить. Причем DCM может подло не сбрасывать LOCK, когда на входе пропала частота, а просто тихо глючить.
Grumbler_2002
Ну, даташит обещает, что сигнал LOCKED поднимется после захвата входной частоты, а упадет по сигналу RST. При пропаже входной частоты нужно выставить сигнал RST, тогда захват отработает правильно. Входную частоту можно отследить по сигналу DO[1], который "CLKIN stopped".
DmitryR
Во-первых, были какие-то ерраты по поводу того, что DO[1] при каких-то условиях не срабатывает. Во-вторых, RST надо держать до появления CLKIN и еще 200 ms (ug070 стр. 61). А ресет в свою очередь нельзя держать более 10 секунд (http://www.xilinx.com/support/answers/21127.htm). Еще см. атрибут DCM_AUTOCALIBRATION. Вобщем, даташит обещает, а практика показывает.
Grumbler_2002
Не согласен. Если даташит не обещает снятия сигнала LOCKED после пропажи входной тактовой частоты, то надеяться на это несколько наивно. Более того, если после появления в течение определенного времени входной сигнал останется в фазе, то LOCKED останется в захвате. Единственно верный сигнал DCM в этом случае как раз DO[1]. Если Вам не нравится этот сигнал по какой-либо причине, то пожалуйста - ISE предлагает на все случаи жизни соответствующий макрос, который и решает все проблемы. Не знаю, какая у Вас там практика, но ничего шаманского с DCM не происходит и делать магические пассы руками не надо.
rv3dll(lex)
да блин шаманство - существуют платы , которые не глючат в принципе

существуют платы которые глючат иногда.

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

плохо - делаю заново. 30 плат из 32 всегда с 1го раза 2 тупят и со второго и с третьего. так и живём уже год.
Grumbler_2002
Ну, если Вам кажется, что проблема в DCM, то давайте еще раз пробежимся по пунктам для ясности:
1) Какой speed grade у ПЛИСа?
2) Проверяли ли Вы джиттер и скважность тактовой частоты, пришедшей на ПЛИС?
3) Проверяли ли Вы качество питания? Требования к питанию достаточно жесткие, а потребление у DCM на таких частотах должно быть приличное.
4) Хватает ли Вам задержки в 7 нс для подстройки клока?
rv3dll(lex)
1. 11
2. скважность по осциллографу 50 процентов, джиттер померить нечем
3. питание и 1.2 и 2.5 и 3.3 вроде чистое
4. про задержку не понял?? имеется ввиду сдвиг фазы DCM??? если да, то хватает - типовое значение сдвига 150 шагов сдвига (работает от 50 до 250)
rloc
Цитата(Grumbler_2002 @ Apr 15 2009, 02:17) *
3) Проверяли ли Вы качество питания? Требования к питанию достаточно жесткие, а потребление у DCM на таких частотах должно быть приличное.

Потребление DCM от частоты не зависит.
Grumbler_2002
Тогда дальше. Правильно я понял, что на вход DCM подается 50 МГц, с выхода 1Х снимается 50 МГц, с выхода 2Х снимается 100 МГц, а с выхода FX снимается 300 МГц? В каком режиме работает DCM: Low Frequency или High Frequency?
Grumbler_2002
Цитата(rv3dll(lex) @ Apr 15 2009, 09:28) *
4. про задержку не понял?? имеется ввиду сдвиг фазы DCM??? если да, то хватает - типовое значение сдвига 150 шагов сдвига (работает от 50 до 250)


Если я не ошибаюсь, то для входной частоты 50 МГц максимальное значение сдвига будет 179. БОльшие задать будет можно, но сдвиг будет ограничен этим значением. Поправьте меня, если что не так.
rv3dll(lex)
в системе 2 клок менеджера

построено всё так.

со стабильного генератора, стоящего рядом с ацп идёт клок 50 мегагерц и подаётся для тактирования собственно АЦП и далее на клоковый вход плис и в ней на DCM1.

параметры DCM1 установлены такие, какими их ставит визард для 403 или 405 отладочной платы, при входном клоке 50 мегагерц

DCM1 выход 0 - 50 мегагерц обработчик 2х - 100 шина fx - 300 процессор

также с ацп на плис идёт 6 дифф линий (4 данных) , кадровый и битовый клоки 50 и 300 соответственно.

разводка платы сделана неверно и использовать BUFR не удаётся, поэтому

битовый клок подаётся на DCM2 с которого получаем 300 и делённую 50 имитируя сигналы, получаемые с помощью BUFR, и эти сигналы подаём на систему десереализации

параметры DCM2

BEGIN my_dcm_adv
PARAMETER INSTANCE = dcm_lvds
PARAMETER HW_VER = 1.00.a
PARAMETER C_CLK0_BUF = TRUE
# PARAMETER C_CLK90_BUF = TRUE
PARAMETER C_CLK180_BUF = TRUE
# PARAMETER C_CLK270_BUF = TRUE
PARAMETER C_CLKDV_BUF = TRUE
# PARAMETER C_CLKFX_BUF = TRUE
# PARAMETER C_CLKFX_DIVIDE = 3
# PARAMETER C_CLKFX_MULTIPLY = 2
PARAMETER C_DESKEW_ADJUST = SOURCE_SYNCHRONOUS
PARAMETER C_CLKDV_DIVIDE = 6.0
PARAMETER C_CLKIN_PERIOD = 3.300000
PARAMETER C_CLK_FEEDBACK = 1X
PARAMETER C_DFS_FREQUENCY_MODE = HIGH
PARAMETER C_DLL_FREQUENCY_MODE = HIGH
PARAMETER C_PHASE_SHIFT = 0
PARAMETER C_CLKOUT_PHASE_SHIFT = DIRECT
# PARAMETER C_CLKFX_MULTIPLY = 2
PORT CLKIN = D_clk_to_dcm
PORT CLK0 = pll_out_0
# PORT CLK90 = pll_out_90
PORT CLK180 = pll_out_180
# PORT CLK270 = pll_out_270
PORT CLKFB = pll_out_0
PORT CLKDV = div6_dclk
PORT RST = dcm_rst
PORT LOCKED = dcm_lvds_lock
PORT DADDR = dcm_daddr
PORT DCLK = dcm_dclk
PORT DEN = dcm_den
PORT DI = dcm_di
PORT DWE = dcm_dwe
PORT DRDY = dcm_drdy
# 220109
PORT PSEN = net_gnd
PORT PSCLK = dcm_dclk
PORT PSDONE = dcm_psdone
END
Grumbler_2002
Че то в голову ничего толкового не приходит. Можно ли сделать клок с АЦП непрерывным в тестовых целях? Потом, у Вас же есть цифра на 300 МГц - залейте непрерывный битовый поток в память и рассмотрите его при сбое. Тогда картина немного прояснится.
rv3dll(lex)
Уже давно просмотрел и проанализировал и кое - что прояснил.
при отсутствии сигнала шумит около уровня 2048
при переходе через 2048 разом меняются все биты и выставляется один старщий
фактически-же в этот момент число меняется на 3412 или 682 ну и плюс минус пару разрядов шума.

оба этих отклонения имеют различие с 2048 в примерно 1364 единици

разложим двоично 0101010 - то есть каждый второй не изменяется, а остаётся старым значением.

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

также и при обратном переходе в область ниже 2048.

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

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

если изменить параметр PARAMETER C_DESKEW_ADJUST = SOURCE_SYNCHRONOUS на систем - неправильное включение будет на всех платах 70 раз из 100

файл данных даю
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.