Jump to content

    
Sign in to follow this  
Kronac

XILINX Vivado 18.3 IDELAY3 for ADS42LB49/69 in QDR. Как правильно задать ограничения для Frame

Recommended Posts

Добрый день. Нужна помощь. Работаю с АЦП (ADS42LB69) в QDR режиме. XILINX Vivado 18.3, использую сигналы FRAME для декодирования отчётов. Установил и настроил все необходимые IDELEY3 и ISERDES. Приём данных осуществляется верно, вся структура вроде работает. На плате 4 таких АЦП, в итоге имею 8 независимых каналов. Некоторые каналы работают всегда, некоторые работают, но очень не стабильно. От компиляции к компиляции разные результаты. Иногда проскакивают ошибки потери некоторых бит данных. Создал регистры для управления задержками на линиях данных и Фреймов (входные параметры "CNTVALUEIN" для мегафункции "IDELAY3"). Подставляя туда каждый раз разные значения и пересбрасывая систему удаётся подобрать те, с которыми прошивка будет работать корректно на всех каналах, но в следующей прошивке данные значения уже не актуальны и приходится подбирать снова.  Смотрел примеры и по ним входные сигналы Frame были заданы как клоки на определённой частоте (например так: create_clock -period 4.464 -name FRAME0 -waveform {0.000 2.232} [get_pins U_79/O] частота равная половине частоты дискретизации АЦП) Я так понимаю, это не совсем правильный подход. Возможно мне нужно жёстко объявить input/output delay для моих пинов? Работал раньше только в Quartus, он это дело делает и подбирает автоматически, Вивадо этого вроде не умеет и приходится делать ручками. Сталкивался кто нибудь с похожей проблемой?

Share this post


Link to post
Share on other sites
On 12/16/2020 at 11:05 AM, DS said:

По хорошему - фазовый детектор на каждую линию и автоподстройка задержек.

Верно, сделать свой автомат по автоматической подстройке задержек.

 

On 12/16/2020 at 11:00 AM, Kronac said:

Работаю с АЦП (ADS42LB69) в QDR режиме

У вас плата случайно не от Инсиса?

Share this post


Link to post
Share on other sites

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

On 12/16/2020 at 9:00 AM, Kronac said:

 Возможно мне нужно жёстко объявить input/output delay для моих пинов? Работал раньше только в Quartus, он это дело делает и подбирает автоматически, Вивадо этого вроде не умеет и приходится делать ручками. Сталкивался кто нибудь с похожей проблемой?

Констрейны input|output delay не подбирают задержку, а лишь ограничивают процесс P&R в неких временных рамках.  К тому же  в вашем случае они смысла особого не имеют так как путь данных  от пина через IDELAY к ISERDES фиксирован, а самим значением задержки в IDELAY вы управляете в ручном режиме.  

Я бы  для начала  понял из за чего у вас "гуляют" задержки на разных  прошивках. Ведь  физ. положение входных цепей на кристалле не меняется значит меняется скорее всего задержки цепей клока или фаза опорной PLL.  

Хорошо бы для всех входных бит найти границы битового окна на разных прошивках (на тестовом паттерне ADC меняя задержки IDELAY) и сравнит как их абсолютную величину на предмет чистоты и качества сигнала на входе,  так и различия на разных прошивках с  STA временами для цепей клока и данных.  А иначе тяжело понимать  куда  копать  дальше. 

 

Удачи! Rob.

Share this post


Link to post
Share on other sites

Нужно отработать общую структурную схему приема данных от 8 каналов АЦП   с учетом частоты дискретизации (и frame clk),   опираясь

допустим на xapp585, xapp1315. Важная деталь- выравнены ли длины сигналов на печатной плате для каждого канала.

И как указали выше -автоматическая подстройка  задержек для одного канала.  Такой модуль используется для всех остальных каналов.

Это все необходимо разработать, отладить. У xapp'ов есть исходники с констрейнтами.

Share this post


Link to post
Share on other sites
On 12/16/2020 at 11:05 AM, DS said:

По хорошему - фазовый детектор на каждую линию и автоподстройка задержек.

Вопроса в выборке правильных данных нет. В общем поясню подробнее. По этому мануалу "UG571 (v1.12) August 28, 2019" построил цепочку приёма данных. В данный момент имеется 8 каналов АЦП с одного мезонина. На каждом клоке от канала стоит плл-ка просто пропускающая приёмную частоту (лок плл-ки использую чтобы держать систему в сбросе, если нет частоты) после каждой плл стоит буфер BUFG для приёма даннных на частоте АЦП и BUFGCE_DIV для деления частоты на 2, на каждом канале стоит последовательность из IDELAYE и ISERDES взятая из документа, дальше собственно битслип и расшифровка данных. В общем система рабочая. На верхнем уровне написали програму под ОС чтобы смотреть сигналы. Сделали механизм тестирования каналов. В самом АЦП на канале устанавливаем режим работы патерна со счётчиком, принимаем эти данные, выкладываем в память и сравниваем ожидание с действительностью. Суть в том, что иногда данные со счётчика принимаются не верно (некоторые биты в отчётах теряются, но в следующем всё правильно). Тут и вступает необходимость подбирать задержки. Подобрали необходимые значения задержек, прописали их в IDELAYE для каждого канала, подали сброс и всё хорошо. На этой прошивке всё работает от запуска к запуску на всех каналах. Стоит переделать прошивку и всё едет к чертям. из 8 каналов дай бог если 2-3 работают. Но старые значения уже не поставить, нужно подбирать новые... Вот от этой неопределённости хотелось бы и уйти.

On 12/18/2020 at 11:42 AM, 10ff said:

Верно, сделать свой автомат по автоматической подстройке задержек.

 

У вас плата случайно не от Инсиса?

Мезонин от Инсиса.. 

On 12/18/2020 at 12:28 PM, RobFPGA said:

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

Констрейны input|output delay не подбирают задержку, а лишь ограничивают процесс P&R в неких временных рамках.  К тому же  в вашем случае они смысла особого не имеют так как путь данных  от пина через IDELAY к ISERDES фиксирован, а самим значением задержки в IDELAY вы управляете в ручном режиме.  

Я бы  для начала  понял из за чего у вас "гуляют" задержки на разных  прошивках. Ведь  физ. положение входных цепей на кристалле не меняется значит меняется скорее всего задержки цепей клока или фаза опорной PLL.  

Хорошо бы для всех входных бит найти границы битового окна на разных прошивках (на тестовом паттерне ADC меняя задержки IDELAY) и сравнит как их абсолютную величину на предмет чистоты и качества сигнала на входе,  так и различия на разных прошивках с  STA временами для цепей клока и данных.  А иначе тяжело понимать  куда  копать  дальше. 

 

Удачи! Rob.

Спасибо, про  input|output delay не знал. А по поводу границ битового окна, так и делаю. Выше описал. Сделали это в программе на ОС (для простоты и скорости отладки) Забиваем в АЦП тестовый патерн счётчика и гоняем с разными задержками, постоянно меняя их и сбрасывая. На выходе получаем результат к примеру такой: для канала 1 работает при задержках от 1 до 43, на канале 2 работает на задержках от 4 до 67 и тд.. Выбираем что то среднее и задаём, всё работает. Но в итоге после перекомпиляций, эти окна значительно двигаются и стают совсем в другом месте...

Share this post


Link to post
Share on other sites

Прочитал я xapp585, xapp1315. Примерно всё понятно. У себя ставил всё примерно также, за исключением блока "Calibration SM and Gearbox"... Его я не реализовывал, по крайней мере в ПЛИС. Сделал его аналог но через программу... Управляет задержками программа на ОС.  Остался ещё вопрос по блоку IDELAYCTRL. Я его использую, но не совсем понимаю его назначения. Как он взаимодействует физически с блоками IDELAYE3?  В моей системе я жду пока его сигнал RDY не установится в "1" после этого снимаю сброс с блоков IDELAYE3 и ISERDESE3. Подскажите более простыми словами, как он взаимодействует? Ещё в мануале читал сложную структуру, которая выбирает сколько вообще таких блоков (IDELAYCTRL)  вообще нужно в системе, в зависимости от количества использования пинов данных и банков ПЛИС.. Сколько мне их ставить для 8 каналов с 4-я дифференциальными линиями данных на каждом?

  image.thumb.png.21aaf300be8de1c2c53c194706a77bc0.png

Share this post


Link to post
Share on other sites

Блок IDELAYCTRL просто один раз вводится в проект и работаем как сказано.

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

АЦП к одному банку. В целом, тулз сам автоматически вставляет необхоимое число блоков IDELAYCTRL

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

Share this post


Link to post
Share on other sites

Ещё важный момент. В xapp585, xapp1315 указано описание работы для режимов DDR и режима работы "TIME"  Мне бы хотелось работать в более простом режиме  "COUNT" где исключены все эти сложности. Плюс у меня QDR. Я прогоняю FRAME и DATA_p (n) через блоки задержек вместо клока. Суть понятна но принцип немного другой...

18 hours ago, Алга said:

Блок IDELAYCTRL просто один раз вводится в проект и работаем как сказано.

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

АЦП к одному банку. В целом, тулз сам автоматически вставляет необхоимое число блоков IDELAYCTRL

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

Фух) Спасибо, аж камень с души. 

Share this post


Link to post
Share on other sites

Неясно это частный (кастомный) проект или проект из готовых китов.

За основу брать проекты из xapp'ов и в процессе отладки смотреть, что получается и чтото возможно необходимо будет изменить, доработать,

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

Share this post


Link to post
Share on other sites
1 hour ago, Алга said:

Неясно это частный (кастомный) проект или проект из готовых китов.

За основу брать проекты из xapp'ов и в процессе отладки смотреть, что получается и чтото возможно необходимо будет изменить, доработать,

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

Нет это не киты. Просто не хочется переделывать сейчас на этой стадии всю структуру.. Проект рабочий уже. Просто существует некоторое неудобство при подборе задержек на новой прошивке. Хотелось бы не сильно меняя структуру пофиксить эту проблему. С этой надеждой и написал на форум, может будет у кого совет как не городя этот сложный автомат автокалибровки побороть проблему на прикладном уровне.

Share this post


Link to post
Share on other sites

Без автомата автокалибровки скорее всего не обойтись. И еслм это продукция будет,

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

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

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

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

Share this post


Link to post
Share on other sites
4 hours ago, Алга said:

Без автомата автокалибровки скорее всего не обойтись. И еслм это продукция будет,

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

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

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

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

Раньше я о таких проблемах даже и не задумывался, работая с Intel в Quartus =D. Всё просто и  понятно. А тут слишком много низкоуровневых особенностей. В итоге данная проблема выявилась на самом последнем этапе..

Edited by Kronac

Share this post


Link to post
Share on other sites

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

При этом прием данных должен надежно работать. 

Share this post


Link to post
Share on other sites
16 hours ago, Алга said:

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

При этом прием данных должен надежно работать. 

Хорошо, спасибо, буду думать..

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this