Pull to refresh

Comments 19

Полезная статья, пишите еще ;)
Небольшие замечания.
HR — это банки не с большим числом пинов, а с большим диапазоном поддерживаемых напряжений.
Не вполне корректно говорить что в случае ISERDES данные принимаются по последовательной шине — шина вполне может быть параллельной, а ISERDES лишь обеспечивает больший коэффициент десериализации данных, что может быть полезно для большой частоты.
И провокационный вопрос — не нашел в статье ничего про выравнивание данных, принимаемых от нескольких АЦП. А задача может быть не самой тривиальной за счет небольшой неопределенности в фазах входных клоков.
Спасибо за замечания, поправлюсь! :)
Про ISERDES согласен, но на практике практически не встречал таких микросхем АЦП. В обратную сторону, т.е. ЦАП — сплошь и рядом такое, а с АЦП либо параллельная шина LVDS, вписывающаяся в частоту обработки ПЛИС, либо сразу JESD204B.

Все верно. На этот вопрос в рамках статьи я решил не отвечать, но в списке литературы сделал отсылку к документу, с которого можно начинать копать. :)

Самое примитивное решение — запитать все АЦП одним источником тактовой частоты и попытаться использовать один клок АЦП на глобальном буфере, а не N штук на региональных. Для многоканальных АЦП с частотами дискретизации до 500МГц это спасало.
«запитать все АЦП одним источником тактовой частоты» не всегда работает, потому как:
1. PLL на которой происходит умножение частоты для АЦП или самого сериалайзера может умножать частоту со случайной фазой на выходе(20 вариантов фазы при умножении частоты на 20), и соответственно задержка при формировании serial данных.
2. Немного различающаяся длина линий связи, может привести к сдвигу на несколько serial отсчетов(bit clock)
3. Обратная первому варианту картина, восстановление параллельных данных в FPGA со «случайной» фазой низкочастотного клока. Данные с разных каналов могут восстановиться с разницей в задержке в 1 такт.

Тактировать многоканальные системы АЦП нужно только от опорного низкоджиттерного генератора в виде отдельной микросхемы типа Si571, пропустив его выходной клок через клоковый низкоджиттерный размножитель, соответствующий числу каналов АЦП. Только в таком варианте мы получим когерентную систему на приемной стороне ПЛИС. Но опять таки есть нюанс, данная система будет корректно работать: 1 в случае точного выравнивания линий данных и клоков каналов АЦП на PCB. 2 если сами АЦП не имеют интегрированного делителя частоты с неизвестной задержкой, т.е. Если эти условия выполняются, то входные данные можно принять в ПЛИС на глобальной частоте от одного из каналов, в этом случае получим полную синфазность между каналами.
Все верно. Мы на своих аналоговых модулях используем генераторы Si570/571, после которых ставится разветвитель. Для 8/16-канальных схем это успешно работает и система запитывается одним когерентным источником тактовой. А в системах, где используется делитель внутри АЦП — все нетривиально, необходимо извращаться уже непосредственно в ПЛИС. К счастью, с такими микросхемами АЦП практически не работаем.
Очень интересная статья!
Есть вопросы: тактирование АЦП от встроенных DCM (MMCM) при частотах 40 — 200 МГц не смертельно?
И есть ли особенности использования АЦП-ПЛИС при оцифровки периодических(преимущественно) сигналов и редких высокоскоростных импульсов (сигнал детекторов нейтронов, альфа-частицы, гамма и т.д.)?
Да, для частот 40-200МГц можно тактироваться внутренним MMCM. Но нужно понимать, что для MMCM тоже нужен источник частоты, пусть и не привязанный к аналоговому модулю. Я с такими устройствами работал. Но практика показывает, что чем проще способ тактирования данных, тем лучше. То есть это способ без использования MMCM. До узла пересинхронизации FIFO частота идет напрямую с аналогового модуля, проходит BUFG/BUFIO и в таком виде тактирует синхронные элементы схемы.

С высокоскоростными импульсами такого типа не сталкивался, но мне думается, что здесь необходимо иметь высокую разрешающую способность, то есть хорошие аналоговые характеристики узлов АЦП, а со стороны цифровой части — наличие накопителя данных большого объема, в который помещается принимаемый сигнал. А вообще для цифрового устройства совсем нет разницы, какой формы сигнал обрабатывать, если аналоговое устройство способно этот сигнал обнаружить и задетектировать.
Тактировать АЦП от FPGA категорически не рекомендуется, если вы хотите получить качественный сигнал — слишком велики всякие наводки и джиттер. Да, для килогерцовых частот можно закрыть на это глаза, но для частот в десятки, а тем более сотни мегагерц ничего хорошего не выйдет. Лучше подаватьна АЦП внешний клок, порождаемый на специально предназначенных для этого компонентах (малошумящий генератор, клоковые буферы/мультиплексоры и т.п.). Параллельно его же можно завести на FPGA (на всякий случай).
Согласен во всём. Недавно проверял проект, где нужно было тактировать АЦП сигналом, прошедшим именно MMCM. На входе MMCM — 60МГц, на выходе 120МГц. И эта частота идет на АЦП. Хорошего мало, но работает, благо каналов всего АЦП всего два.
Я не совсем понимаю смысл аналоговой задержки на каждой линии. Внутри кристалла разбежки будут по приему не больше 100 пс (если больше, то где-то ошиблись с банками при разводке платы), на плате разбежки тоже будут, но очень маленькие (линии же выравнены). +скорее всего с АЦП приходит фреймовый клок. У альтеры в PLL есть режим LVDS, когда выходной фреймовый клок сдвигается относительно входного на дельту задержки данных, а битовый клок фронтом встает на середину данных (как на картинке АЦП) и SERDES работает «почти» правильно.
С JESD204B гораздо меньше мороки в этом плане, но схемотехника плат сложнее.
Смысл такой, что если АЦП работает в широком диапазоне частот дискретизации (от 10МГц до 500МГц, например), то на некоторых участках значения тактовой частоты начинаются искажения сигнала данных (совпадают фронты, к примеру). Для этого на помощь приходят IODELAY группы и именно они позволяют работать в широком диапазоне тактовых частот.

Да, в JESD204B все иначе, но там и другие особенности, начиная от интерфейса передачи, заканчивая схемой подключения в ПЛИС и способами синхронизации и управления сигналом запуска многоканальных схем. Если тема JESD204B будет интересна, мог бы написать об этом в следующей статье.
Внутри ПЛИС задержка на тактовых линиях от PIN до BUFG может составлять от десятков Пс до единиц Нс, в зависимости от удаления PINа от глобальных буферов. Задержка на BUFR и BUFIO естественно минимальна, но тогда мы ограничены тактовым регионом, и засинхронизировать одним BUFR все каналы АЦП, разведенные в другой клок регион, не получится. По этому для получения синфазных многоканальных систем АЦП на базе ПЛИС, проще использовать один глобальный клок от одного из каналов, компенсировав его задержку PIN-BUFG с помощью IODELAY.
тогда мы ограничены тактовым регионом

Не совсем так, у Xilinx BUFR работает на текущий и на 2 прилегающих тактовых региона. Этого должно на многое хватить. Проще всего использовать, как раз, связку BUFIO-BUFR, когда это возможно. Самое главное потом перейти с домена BUFR в домен BUFG, потому что в общем случае они получаются асинхронными.
В зависимости от семейства, у xilinx Virtex 5 если я не ошибаюсь нет переходов к соседним клок регионам. Эта возможность появилась с Virtex 6. И на сколько я помню, соединить можно только один прилегающий. Но даже если есть возможность соединить один и два прилегающих, то для канальности АЦП 4 и более, этот вариант не всегда подходит. Я в своей практике не наблюдал, чтобы схемотехнически к примеру 4 канала АЦП были разведены на 4 неразрывных клок региона.

При переходе с BUFR на BUFG начинается самое интересное. С использовании данной архитектуры в моей практике, зачастую наблюдается расфазировка каналов друг, относительно друга. Самое интересное, что прием данных непосредственно с индивидуального канала АЦП проходит корректно во всем диапазоне, и мало того довольно продолжительное время каналы могут работать синфазно, но при нагреве кристалла ПЛИС или других факторов, фаза все таки смещается, что в большинстве задач не допустимо.
Спасибо за статью! Давно хочу приобщиться к SDR Radio. Но фирменные платы ПЛИС и модулей АЦП/ЦАП к ним для многих недоступны по цене. Развести и собрать самому плату с АЦП — тоже трудно. Микросхему нужно правильно «обвзязать», запитать. На ebay/ali не так много плат. И как только одна из них упала ниже моего личного психологического уровня (ниже 1500 рублей), то я ее сразу заказал. И уже получил.

High-speed AD9708 AD9280 AD / DA Module FPGA Development Board Black Gold
image

Там всего 8 бит. Но для начала, считаю, что не плохо.
Интересная плата. И её для начала будет достаточно, освоить базовые вещи — самое то. К сожалению, микросхемы АЦП и ЦАП не управляются программно, так что с этим здесь не поиграться. а как показывает опыт — сложнее научиться управлять схемой и правильно менять параметры модуля в динамическом режиме, чем, например, обеспечить одинаковую фазу для многоканальных систем (о чем писалось выше в комментариях).
А схема для неё есть или обсуждение некитайскоязычное? Китаец только кратенькое описание прислал, хорошо хоть с распиновкой.
У меня только распиновка. В режиме ЦАП я ее уже попробовал, все работает.
Скрытый текст
Да я тоже саму на себя уже проверил, правда на 10 Ms/s всего. Хотелось сходу увидеть где какое сопротивление висит и какая защита есть, чтоб не дорожки высматривать.
Sign up to leave a comment.

Articles