|
|
  |
Плавает задержка то ли клоков то ли данных, Прием данных от АЦП |
|
|
|
Mar 20 2013, 15:02
|
Знающий
   
Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965

|
Имеется FPGA (Arria 2), которая принимает данные от АЦП (по lvds) на относительно небольших частотах 150-200МГц DDR (то есть клок 200, данные 400). Клок приходит от того же АЦП с некоторым фазовым сдвигом относительно данных. Изначально пытался принимать данные этим же клоком варьируя задержку по данным во входных пинах. Качественно не вышло - списал все на собственную тупость и недостаточное знакомство с таймквестом. Теперь добавил по входу клока PLL, кручу фазу тактового сигнала, им и сэмплирую входные данные. Все хорошо, нашел допустимое окно по сдвигу фазы клока, при котором сигналы не ломаются, выбрал среднее значение, сижу радуюсь. Запускаю тот же проект на другой плате - не работает, оптимальная фаза сильно уехала, так что окна вообще не перекрываются. У меня есть несколько вариантов кто виноват: 1) изменение задержек между клоком и данными по выходу АЦП - вполне может быть, но макимально возможное изменение прописанное в даташите на АЦП в потора раза меньше, чем получилось у меня. Попробую проверить осциллом. 2) Ошибки при фазовой подстройке PLL - в даташите было что-то про 50 пс. Несущественно. Что еще? Считаем, что внешние условия одинаковые, 300 по Кельвину, ветер умеренный, погода на Марсе стабильна.
И главный вопрос - что делать? У меня идей пока только две и обе мне не нравятся своей бесперспективностью для общего случая: 1) откалибровать каждую плату под свои задержки. 2) реализовать динамическую подстройку
|
|
|
|
|
Mar 20 2013, 15:33
|
Частый гость
 
Группа: Свой
Сообщений: 94
Регистрация: 28-11-12
Из: Москва
Пользователь №: 74 605

|
Цитата(alexadmin @ Mar 20 2013, 18:02)  2) реализовать динамическую подстройку Чем не нравится этот вариант? Мы применяли данный вариант, работает вполне себе хорошо. Даже отслеживает изменения температуры при нагреве платы.
Сообщение отредактировал crono - Mar 20 2013, 15:34
|
|
|
|
|
Mar 20 2013, 15:39
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(crono @ Mar 20 2013, 22:33)  Чем не нравится этот вариант? Мы применяли данный вариант, работает вполне себе хорошо. Даже отслеживает изменения температуры при нагреве платы. На 200 МГц DDR и без этих танцев с бубном всё должно летать. Динамическая подстройка - для предельных частот. Автору : а вы померяйте задержку между приходящим клоком от АЦП и вашим, сдвинутым по фазе на разных платах чтобы понять где рождается проблема - в альтере или в АЦП.
|
|
|
|
|
Mar 20 2013, 15:54
|
Частый гость
 
Группа: Свой
Сообщений: 94
Регистрация: 28-11-12
Из: Москва
Пользователь №: 74 605

|
Цитата(Bad0512 @ Mar 20 2013, 19:39)  На 200 МГц DDR и без этих танцев с бубном всё должно летать. Динамическая подстройка - для предельных частот. Да там и танцев то особых нет. Просто компенсируется задержка клока от входной ножки ПЛИС до попадания на глобальный клок. Задержка эта впринципе может от разводки к разводке поменяться. А на счет предельных частот, то 200 МГц DDR это точность установки клока плюс минус 1.25 нс. Достаточно короткий интервал.
|
|
|
|
|
Mar 21 2013, 05:30
|
Знающий
   
Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965

|
Цитата(crono @ Mar 20 2013, 19:33)  Чем не нравится этот вариант? Мы применяли данный вариант, работает вполне себе хорошо. Даже отслеживает изменения температуры при нагреве платы. Не то, чтобы не нравится, но это во-первых много лишней возни, а во вторых, как справедливо отметил Bad0512 ниже, для таких скоростей, как мне казалось, и так должно быть решение без динамической подстройки. Ну и подспудно меня мучает, что для данного конкретного АЦП я могу калиброваться по встроенным паттернам, а вот что мне делать, если для какого-то другого АЦП (или просто высокоскоростного входного интерфейса) паттернов не окажется? В общем доберусь до осцилла, померяю реально возникающие задержки, буду думать. Похоже действительно придется калиброваться динамически... Цитата(TRILLER @ Mar 20 2013, 19:36)  Ваш PLL запускается в то время, когда от АЦП идёт устойчивый клок? Если нет, то он может подхватить неонятно что и непонятно в какой фазе. Хороший вопрос. С уверенностью в 99% думаю что да. Сам АЦП клока фактически не трогает, просто пропускает через себя. Системный синтезатор порождающий для него клок проверяется на lock. Плюс саму PLL фпга я сбрасывал (и тоже ждал lock) перед подстройкой фазы. Но в эту сторону я тоже подумаю, спасибо.
|
|
|
|
|
Mar 21 2013, 08:44
|
Частый гость
 
Группа: Свой
Сообщений: 94
Регистрация: 28-11-12
Из: Москва
Пользователь №: 74 605

|
Цитата(alexadmin @ Mar 21 2013, 08:30)  Ну и подспудно меня мучает, что для данного конкретного АЦП я могу калиброваться по встроенным паттернам, а вот что мне делать, если для какого-то другого АЦП (или просто высокоскоростного входного интерфейса) паттернов не окажется? В общем доберусь до осцилла, померяю реально возникающие задержки, буду думать. Похоже действительно придется калиброваться динамически... Вообще, я говорил о динамеческой компенсации линии клока от входной ножки до точки, где клок становится глобальным. Так как все остальное при правильной трассировки платы, по идее, компенсации не требует. На входе ПЛИС клок и данные симфазны. Данные АЦП защелкиваются прямо на входе ПЛИС. Значит остается неопределенным только путь клока от входной ножки до буфера глобального клока. А для компенсации этого пути никакие паттерны не нужны. нужен только сам клок. Идея там очень простая. Входной клок защелкивается во входном буфере глобальным клоком после плл. и вращением фазы плл добиваемся примерно равной вероятности появления 0 и 1. Если мы этого добиваемся, то наш глобальный клок по фазе совпадает с входным клоком АЦП. А данные АЦП защелкиваются клоком сдвинутым на 90 градусов от этого клока.
|
|
|
|
|
Mar 21 2013, 11:29
|
Знающий
   
Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965

|
Цитата(crono @ Mar 21 2013, 12:44)  А для компенсации этого пути никакие паттерны не нужны. нужен только сам клок. Идея там очень простая. Входной клок защелкивается во входном буфере глобальным клоком после плл. и вращением фазы плл добиваемся примерно равной вероятности появления 0 и 1. Если мы этого добиваемся, то наш глобальный клок по фазе совпадает с входным клоком АЦП. А данные АЦП защелкиваются клоком сдвинутым на 90 градусов от этого клока. Спасибо за идею, интересный метод, если действительно говорить о компенсации только этой задержки. Но варьирование этой задержки (для разных временных моделей моего кристалла) составляет примерно около 300 пс (550-850 пс), что вносит вклад, но тоже не самый весомый. Можно попробовать, но в этом методе меня смущает довольно большой шаг подстройки по фазе у PLL, удасться ли хорошо выровнять чиисло 1 и 0. А постоянно дергать фазу туда-сюда тоже не айс...
|
|
|
|
|
Mar 21 2013, 13:58
|
Частый гость
 
Группа: Свой
Сообщений: 94
Регистрация: 28-11-12
Из: Москва
Пользователь №: 74 605

|
Цитата(alexadmin @ Mar 21 2013, 14:29)  А постоянно дергать фазу туда-сюда тоже не айс... Так это и есть динамическая подстройка. На неком интервале измерить количество нулей и единиц и если счетчики вышли за некие границы, подстроить фазу. А если не нравится постоянно дергать ее, то можно просто провести инициализацию, скорректировать фазу, и в рабочем цикле ее не трогать. На ксайлинксе же прекрасно работает и динамический режим, к тому же на деле дерганье фазы можно настроить так, чтоб происходило оно относительно редко.
|
|
|
|
|
Mar 21 2013, 15:12
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 23-02-12
Пользователь №: 70 424

|
Цитата(alexadmin @ Mar 20 2013, 19:02)  И главный вопрос - что делать? У меня идей пока только две и обе мне не нравятся своей бесперспективностью для общего случая: 1) откалибровать каждую плату под свои задержки. 2) реализовать динамическую подстройку 1) задать правильные STA констрейны по входах от АЦП 2) привязать входные сигналы (клок от АЦП) к внутреннему осцилятору (хотя 400МГц) 3) розвести данные и клок на плате симметрично
|
|
|
|
|
Mar 21 2013, 19:42
|
Профессионал
    
Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596

|
что-то имхо для 200 МГц DDR - делать динамическую подстройку на PLL это как из пушки по воробьям... Аппнота вроде достаточно толстая, чтобы после неё всё заработало: http://www.altera.com/literature/an/an433.pdfЕдинственный вариант, который я себе могу представить, где этот подход не сработает - это если сигналы имеют сильно заваленные фронты, и достаточно малый разбег клока с данными в разных направлениях приведёт к большой разнице фаз на крутых фронтах внутри ПЛИС. И тогда это объясняет почему у вас получается так, что "приходится крутить 1000-1200пс", ведь тогда source-synchronous compensation для PLL получается совсем даже не source-synchronous, и вы вынуждены крутить его так, как будто это режим Normal.
--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|