rv3dll(lex)
Apr 9 2009, 06:05
кратко.
есть плис 4 виртекс есть ацп
всё это дело соединено между собой.
битовая частота 300 мгц кадровая 50
изначально соединение произведено не правильно - сигналы заведены на центральную колонну плис, поэтому не получается штатно использовать деление с помощью BUFR, а топологию корректировать пока не возможно.
поэтому
входные буфера сделаны правильно с помощью iserdes и BITSLIP
а вот клок 300 подан на DCM - которым поделён им до 50 мегагерц и использован для десериализации сигналов.
генератор 50 мгц стоит на ацп. ацп формирует 300 и кадровую 50 и 50 однопроводную на тактирование остальной плисины.
решение кривое, но логически рабочее.
так вот есть некоторая непонятная проблема, появившаяся после некоторого заполнения плис.
иногда данные не корректные, вернее они с импульсными помехами - однопериодными врезками, причём явно видно, что модули bitslip правильно сдвинули поток
переконфигурация bitslip не помогает, всевозможные сдвиги сигналов друг относительно друга не помогают
помогает только пересброс ресетом DCM модуля. и если всё включится правильно , то потом работае нормально сколь угодно долго. соответственно если не правильно сколь угодно долго работает не правильно.
что это может быть???
DmitryR
Apr 9 2009, 06:53
Итак, 300 идет на ISERDES напрямик (или через DCM 1:1 ?), 50 идет на ISERDES через DCM. Два вопроса: как обрабатывается кадровый строб от АЦП и уверены ли вы, что фронт 300 МГц, приходящих на ISERDES находится в середине окна данных?
RobFPGA
Apr 9 2009, 07:53
Приветствую!
Очень похожие симптомы на проблемы с питанием FPGA. У меня похожее было при связи двух V2 между собой через LVDS. В "пустых" плисах- все бегало без ошибок, добавили логику обработки - стали периодически выскакивать ошибки передачи данных. В результате обнаружилось что при начале обработки блока данных небольшая посадка питания вызывала кратковременный сбой DCM (при этом LOCK НЕ!!!! сбрасывался). Вылечилось заменой другой тип стабилизатора питания, и дополнительной обвеской емкостями.
Успехов! Rob.
rv3dll(lex)
Apr 9 2009, 08:25
Цитата(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
Apr 9 2009, 08:28
С первым вопросом разобрались, остался второй: как кадровый строб от АЦП обрабатывается.
rv3dll(lex)
Apr 9 2009, 08:47
Цитата(DmitryR @ Apr 9 2009, 12:28)

С первым вопросом разобрались, остался второй: как кадровый строб от АЦП обрабатывается.
кадровый строб так-же как и данные проходят десериалайзер с тем-же модулем bitslip далее даётся несколько заходов на анализ принятых данных и выдаётся стров на битслип (пропуск) если последовательность не соответствует 111111000000 - как только начинает соответствовать стробы пропуска далее не выдаются и даётся инфа что подстроено
само собой стробы пропуска выдаются и на все битслипы данных с ацп. это я взял из 866 документа от ксайлинкс.
ацп выдаёт код в прямом коде - то есть при отсутствии сигнала 2047
видимо, при переходе через этот ноль(2047) вверх и вниз выскакивают палочки
2050
2048
2045
3050
2045
---
2046
1000
2046
они всегда длиной в один отсчёт короче бред какой-то.
но главное - повторюсь если всё сработало правильно - будет работать правильно бесконечно долго не смотря ни на что, а если не правильно - то также неправильно будет работать дальше.
DmitryR
Apr 9 2009, 09:21
То есть, кадровый строб по сути не используется: АЦП ставится в тестовый режим выдавать 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)
Apr 9 2009, 10:05
кадровый строб используется.
так как он сопровождает 12 бит данных на 6 импульсах клока - то после его десериализации получается 111111000000 если он в фазе с делённым клоком клок менеджера, а так как он в фазе с данными то подстройкой пропуска битслипа достигается правильный сдвиг.
DmitryR
Apr 9 2009, 10:15
Ууууу... Ужас. Посмотрите в документацию на АЦП: держу пари вы увидите там, что скважность кадрового строба в 50% не гарантируется. Потом, кадровый строб должен захватываться SDR по переднему фронту тактовой частоты, так как он изменяется по ее заднему фронту.
rv3dll(lex)
Apr 9 2009, 11:02
ads5242 - там всё гарантируется - то что я сделал это из примеров ксайлинкс
порт виртекса 4го симметричный - в параллель работает 2 десериалайзера в сдр режиме. каджый по своему фронту пишет по 6 бит.
кадровый строб учитывается 1 раз при подстройке дальше нет.
150 сначала было вписано жестко - начал искать глюки переделал на изменяемую
DmitryR
Apr 9 2009, 11:22
Цитата(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)
Apr 9 2009, 11:34
если я сделаю как у вас то всю плисину займёт десериалайзер
DmitryR
Apr 9 2009, 11:45
У страха глаза велики, там будет примерно по 25 триггеров и лутов.
rv3dll(lex)
Apr 9 2009, 12:00
http://www.xilinx.com/support/documentatio...tes/xapp866.pdfя уже не первый раз даю тебе эту ссылку - неужели так сложно 1 раз прочитать
DmitryR
Apr 9 2009, 12:25
Я ее прочитал, неоднократно в свое время, но дело не в этом: у меня-то все работает, а о помощи просите вы. Поэтому прочтите его и вы, на странице 8: "The classic ADC interface does not use I/O features of Virtex-4 or Virtex-5 FPGAs". Так что мое предложение - это первая часть xapp866, не более.
rv3dll(lex)
Apr 9 2009, 12:56
можно пробовать до бесконечности - пока не настанет время подключить 64 последовательных шины данных.
поэтому цель не занять плисину никому не нужными сдвиговыми регистрами (при заполнении 91 процент) а понять почему не работает именно система на встроенных возможностях. да в этой версии есть ошибка в плате - да пришлось скомбинировать 2 метода имею ввиду использование DCM
если есть узкие места они должны проявляться на ходу,
если кадровый клок не меандр - не правильно захватит десериалайзер - сигналы сдвинутся и вместо 2000 будет или 4000 или 1000
но сигналы правильные только сбоенные. и в таком состоянии они когда все подстройки уже проведены
переподстройка ничего не даёт
ПОВТОРЯЮ НАЛИЧИЕ СБОЯ ЗАВИСИТ ТОЛЬКО ОТ ПЕРЕСБРОСА DCM И БОЛЬШЕ НЕ ОТ ЧЕГО.
в классическом интерфейсе он останется на своём месте
DmitryR
Apr 9 2009, 13:08
А если вам надо подключить 64 канала - как вы собираетесь вообще на DCM выезжать? Если вы расчитываете, что LCLK у всех будет строго синфазный, вы возьмете один и пощелкаете им 64 канала - вас может постичь такое разочарование, по сравнению с которым текущие проблемы померкнут.
rv3dll(lex)
Apr 9 2009, 14:26
вот под 64 будет новая плата - правильная. а пока надо понять как работать с имеющимся железом
повторюсь - работает или нет зависит от загрузки плисины. если её освободить до 80 процентов всё работает как часы
Цитата(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
Apr 10 2009, 07:25
Цитата(rloc @ Apr 9 2009, 21:55)

По опыту могу сказать в Virtex-4 DCM крайне нестабильны. Вы заметили какой в репорт-файле пишется джиттер на DCM? На мой взгляд величина очень огромная.
Некоторое время назад я проводил ряд экспериментов над решением вопроса о быстродействии Virtex-4 и по случайному стечению обстоятельств на первой плате из партии в 10 шт. удалось разогнать DCM до 600МГц по выходу FX (по даташиту максимальная частота которого составляет где-то 300МГц) и пройти тесты по фильтрации сигнала с АЦП с помощью FIR-фильтра.
Выложите отроученый проект в котором сошлись констрейнсы прописанные на 600MHz для DCM, что то слабо верится этим цифрам.
DmitryR
Apr 10 2009, 08:00
Цитата(rloc @ Apr 9 2009, 22:55)

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

Выложите отроученый проект в котором сошлись констрейнсы прописанные на 600MHz для DCM, что то слабо верится этим цифрам.
Я частоту DCM задаю потом, программным путем, а для ISE в констрейнсах ставлю условия помягче
rv3dll(lex)
Apr 10 2009, 10:28
Цитата(DmitryR @ Apr 10 2009, 12:00)

Ну вот послушайте же наконец, второе мнение совпадает с моим. Также еще хочу заметить следующее: в новом дизайне, где будет 64 канала, вы если будете ячить по-своему, у вас на выходах ISERDES, относящихся к разным кристаллам АЦП получатся разные временные домены, поэтому все равно придется ставить elastic. То есть сделав сейчас по-моему вы получите решение, которое одинаково бодро будет работать и на этом железе, и на новом. Если же вы будете продолжать по-своему - вы потратите время дважды: один раз сейчас, чтобы найти и прибить баг, и один раз потом, делая новый дизайн для нового железа.
про временные домены не понятно????
второе мнение - это у кого????
сделав по Вашему равносильно тому, что в Fx кристалле делать процессор на микроблейзе. Я не прошу навязывания мне своего дизайна, который вы кстати не дадите, а задаю вопрос про имеющийся, сделанный как гибрид из предоставленных на сайте ксилинка примеров. И повторюсь делать я буду так как надо, а не как получилось у Вас.
У меня были сомнения что ошибки возникают при переходе с домена на домен и я сделал следующее.
поставил переход 1 и 2 канала ацп по одному фронту а 3 и 4 по другому. ошибок от этого меньше не стало. все каналы или работают или не работают То есть дело тут в ошибке более серьёзной чем переход с домена на домен.
DmitryR
Apr 10 2009, 10:50
Цитата(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)
Apr 10 2009, 11:18
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
Apr 10 2009, 11:48
Цитата(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)
Apr 10 2009, 12:55
Цитата(DmitryR @ Apr 10 2009, 15:48)

Повторюсь, rloc вам сказал, с чем это может быть связано. Вы же уперлись, вот вам надо с DCM и все, Xilinx посоветовал - теперь надо убиться, но выполнить. Вы все их советы так выполняете? По емкостной развязке например, все-все дословно? Кажется, топик вообще начался с того, что вы разводку сделали в корне неверно. Так что теперь пытаться тыкать людям, которые пытаются несмотря на вашу грубость вам помочь xapp и говорить, что они балбесы несмыслящие - вроде как-то некрасиво, не находите?
Я вобщем-то отметил, что не думаю, что проблема тут. Однако, если у вас есть в FPGA 50 напрямик от резонатора (странная идея питать такие высокочастотные АЦП от резонатора, ну да ладно) самое время попробовать использовать ее вместо деленной от 300.
чтобы вопросов не возникало - генератор фирмы эпсон стоит на удалённой плате с ацп
с ацп идёт 50 мегагерц на плис и приходит на вход клок менеджера, с которого идут 50 300 100 для шин процессоров и прочего.
параллельно приходит битовый и кадровый клок. битовый клок идёт на другой менеджер который получает 50 и 300
DmitryR
Apr 10 2009, 13:11
Цитата(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)
Apr 10 2009, 14:47
Да дело ещё и в том, что АЦП почти всегда придавлено энерго сбережением - при этом с неё клоки не идут
avesat
Apr 10 2009, 15:10
Цитата(rloc @ Apr 10 2009, 11:26)

Я частоту DCM задаю потом, программным путем, а для ISE в констрейнсах ставлю условия помягче

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

Да дело ещё и в том, что АЦП почти всегда придавлено энерго сбережением - при этом с неё клоки не идут
А тогда все ясно: если у DCM клок на входе останавливался - ее обязательно надо сбрасывать (не забыв подождать, пока PLL в АЦП раскачается), иначе она может глючить. Причем DCM может подло не сбрасывать LOCK, когда на входе пропала частота, а просто тихо глючить.
Grumbler_2002
Apr 12 2009, 20:25
Ну, даташит обещает, что сигнал LOCKED поднимется после захвата входной частоты, а упадет по сигналу RST. При пропаже входной частоты нужно выставить сигнал RST, тогда захват отработает правильно. Входную частоту можно отследить по сигналу DO[1], который "CLKIN stopped".
DmitryR
Apr 13 2009, 07:37
Во-первых, были какие-то ерраты по поводу того, что DO[1] при каких-то условиях не срабатывает. Во-вторых, RST надо держать до появления CLKIN и еще 200 ms (ug070 стр. 61). А ресет в свою очередь нельзя держать более 10 секунд (http://www.xilinx.com/support/answers/21127.htm). Еще см. атрибут DCM_AUTOCALIBRATION. Вобщем, даташит обещает, а практика показывает.
Grumbler_2002
Apr 13 2009, 18:59
Не согласен. Если даташит не обещает снятия сигнала LOCKED после пропажи входной тактовой частоты, то надеяться на это несколько наивно. Более того, если после появления в течение определенного времени входной сигнал останется в фазе, то LOCKED останется в захвате. Единственно верный сигнал DCM в этом случае как раз DO[1]. Если Вам не нравится этот сигнал по какой-либо причине, то пожалуйста - ISE предлагает на все случаи жизни соответствующий макрос, который и решает все проблемы. Не знаю, какая у Вас там практика, но ничего шаманского с DCM не происходит и делать магические пассы руками не надо.
rv3dll(lex)
Apr 14 2009, 17:07
да блин шаманство - существуют платы , которые не глючат в принципе
существуют платы которые глючат иногда.
разници никакой - я уже описывал проблему и нацарапал автомат, который её решает и сбрасываю DCM . дожидаюсь захвата гружу сдвиг дожидаюсь выполнения. конфигурирую iserdes и проверяю
плохо - делаю заново. 30 плат из 32 всегда с 1го раза 2 тупят и со второго и с третьего. так и живём уже год.
Grumbler_2002
Apr 14 2009, 22:17
Ну, если Вам кажется, что проблема в DCM, то давайте еще раз пробежимся по пунктам для ясности:
1) Какой speed grade у ПЛИСа?
2) Проверяли ли Вы джиттер и скважность тактовой частоты, пришедшей на ПЛИС?
3) Проверяли ли Вы качество питания? Требования к питанию достаточно жесткие, а потребление у DCM на таких частотах должно быть приличное.
4) Хватает ли Вам задержки в 7 нс для подстройки клока?
rv3dll(lex)
Apr 15 2009, 05:28
1. 11
2. скважность по осциллографу 50 процентов, джиттер померить нечем
3. питание и 1.2 и 2.5 и 3.3 вроде чистое
4. про задержку не понял?? имеется ввиду сдвиг фазы DCM??? если да, то хватает - типовое значение сдвига 150 шагов сдвига (работает от 50 до 250)
Цитата(Grumbler_2002 @ Apr 15 2009, 02:17)

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

4. про задержку не понял?? имеется ввиду сдвиг фазы DCM??? если да, то хватает - типовое значение сдвига 150 шагов сдвига (работает от 50 до 250)
Если я не ошибаюсь, то для входной частоты 50 МГц максимальное значение сдвига будет 179. БОльшие задать будет можно, но сдвиг будет ограничен этим значением. Поправьте меня, если что не так.
rv3dll(lex)
Apr 16 2009, 05:14
в системе 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
Apr 16 2009, 20:19
Че то в голову ничего толкового не приходит. Можно ли сделать клок с АЦП непрерывным в тестовых целях? Потом, у Вас же есть цифра на 300 МГц - залейте непрерывный битовый поток в память и рассмотрите его при сбое. Тогда картина немного прояснится.
rv3dll(lex)
Apr 17 2009, 04:57
Уже давно просмотрел и проанализировал и кое - что прояснил.
при отсутствии сигнала шумит около уровня 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
файл данных даю