Ко мне пришла плата для организации SDR-трассивера и я решил сделать технический разбор FMC-модуля на широкополосном трансивере Analog Devices ADRV9009 — того самого «китайского клона» оценочной платы ADRV9009-W/PCBZ, который продаётся на Taobao и AliExpress под именем FMC ADRV9009. Обзор рассчитан на читателя, который в целом понимает, что такое SDR, FPGA и JESD204B, но хочет разобраться в конкретной плате: что на ней стоит, как она устроена схемотехнически, к чему её можно подключить и чего от неё ждать. Если тебя заинтересовала данная тема - добро пожаловать под кат.

Дисклеймер. Перед началом повествования, хотелось бы заранее оговориться, что основная цель, которую я преследую при написании этой статьи - рассказать о своем опыте. Я не являюсь профессиональным разработчиком электроники, радиоустройств, могу допускать какие-либо ошибки в использовании терминологии, использовать не самые оптимальные пути решения задач, etc. Но отмечу, что любая конструктивная и аргументированная критика только приветствуется. Что ж, поехали…
Если читать некогда aka TL;DR
Восемь выводов, к которым сводится весь обзор:
Это не SDR, а радиокарта. Ни FPGA, ни процессора, ни USB на плате нет. Без платы-носителя и написанного вами софта она не делает ничего.
Схема воспроизведена грамотно. Клон повторяет референсный дизайн ADI покомпонентно, следует рекомендациям даташита и содержит осмысленные инженерные решения. Серьезных ошибок не найдено.
Работает вся инфраструктура ADI. Проекты HDL, драйверы Linux в подсистеме IIO, Windows-утилита Transceiver Evaluation Software - всё применимо без переделок.
Питание с FMC VADJ должно быть 1.8 или 2.5 В. Значение 3.3 В выведет трансивер из строя: это напряжение попадает прямо на вывод VDD_INTERFACE.
IPMI EEPROM может быть не прошита - и тогда на платах AMD семейства UltraScale VADJ вообще не включится. Самая неочевидная проблема при запуске, см. главу 12.
ВЧ-тракт оптимизирован под сотовые диапазоны. Ниже 200 МГц потери в цепях согласования достигают 4–6 дБ; для работы на низких частотах придётся перепаять несколько конденсаторов.
Комплектный проект FPGA не содержит DMA. Отсчеты можно только посмотреть в анализаторе ILA. Контур передачи данных в память придётся делать самому либо переходить на HDL от ADI.
Проще всего начать с ZC706. Для неё есть готовый SD-образ в комплекте и работает графическая утилита ADI. ZCU102 современнее и мощнее, но требует перепрошивки EEPROM и не поддерживает эту утилиту.
Оглавление
Что это за модуль и кому он нужен - позиционирование, родство с оценочной платой ADI, сценарии применения
Характеристики - параметры ADRV9009 и то, что реально доступно на этой плате
Архитектура платы - блок-схема, состав компонентов, карта листов схемы
Приёмный тракт RX и ORX - балуны, согласование, номиналы, посадочные места без установки
Передающий тракт TX и внешний гетеродин - bias-tee, фильтр, балун, вход внешнего LO
Тактирование: AD9528, VCXO, SYSREF - device clock, опора для GT-трансиверов, SYSREF, трансляция уровней
Цифровой интерфейс: JESD204B, SPI, GPIO - линии, синхронизация, управление, SPI-флеш
Питание - ADP5054, четыре рельса, расчёт делителей, бюджет мощности, тепло
FMC-интерфейс - VITA 57.1 HPC, распиновка, VADJ, IPMI EEPROM
Выбор платы-носителя - требования к носителю и разбор конкретных кандидатов
Референсный проект и ПО - Vivado-проект, bare-metal Talise, альтернативы от ADI
Запуск на практике и подводные камни - пошаговый чек-лист и типовые ошибки
Итоги - сильные и слабые стороны, кому подойдёт
На чём основан обзор
Всё, что написано про саму плату, взято из материалов комплекта, который идёт к модулю и выложено в репозитории (если репозиторий пустой, то я скорее всего еще не организовал структуру и не запушил все что ниже описал, простите):
Схема - FMC_ADRV9009.pdf, 7 листов;
Референсный FPGA-проект - FMC_ADRV9009_PL, Vivado 2021.1 под Zynq-7000 XC7Z100;
Bare-metal пример - FMC_ADRV9009_PS, Vitis 2021.1, Talise API 3.6.0.5;
Комплект для оценочного ПО ADI - ADRV9009_Transceiver_Evaluation: SD-образ для ZC706, конфигурация ADRV9009_Test_MAX.xml, инструкция
Параметры микросхем сверены с официальной документацией Analog Devices:
Где вывод сделан из схемы, а не подтвержден документом производителя, это мной отмечено явно. Схема, приложенная к модулю, - это то, что предоставил продавец. Ревизия платы, которая физически придёт вам, может отличаться номиналами и наличием отдельных компонентов. Перед пайкой и перед подачей питания сверяйтесь с реальной платой, а не только с этим обзором.
Что ж, поехали!
Глава 1. Что это за модуль и кому он нужен
Коротко
FMC_ADRV9009 - это радиокарта (radio card) в форм-факторе FMC: печатная плата, на которой стоит широкополосный трансивер Analog Devices ADRV9009, вся необходимая ему обвязка по питанию и тактированию, восемь ВЧ-разъёмов и разъём FMC для стыковки с платой-носителем на FPGA.


Ключевое слово здесь - «радиокарта». Это не готовый SDR. На плате нет ни FPGA, ни процессора, ни USB, ни Ethernet. Она умеет только одно: превращать радиосигнал в поток IQ-отсчётов передаваемых с использованием интерфейса JESD204B и обратно. Всё остальное - обработка, буферизация, передача в компьютер - задача платы с ПЛИС.

Родословная: это клон ADRV9009-W/PCBZ
Модуль - практически покомпонентная копия официальной оценочной платы Analog Devices ADRV9009-W/PCBZ. Это видно даже по схеме: имена листов в штампе (RF_RX_ORX_INPUTS.SchDoc, RF_TX_OUT_EXT_LO_IN.SchDoc, CLOCK_GENERATION.SchDoc, JESD_INTERFACE_GPIO.SchDoc, POWER_DUT_CONNECTIONS.SchDoc, POWER_SUPPLY.SchDoc, FMC_FPGA_CONNECTIONS.SchDoc) и имена цепей (VOUT1_1V3_ANLG, SERDIN0_P, DEV_CLK_IN_P, SPI_DOUT_DUT) повторяют структуру референсного дизайна ADI. Совпадает и обвязка: тот же тактовый генератор AD9528 с VCXO на 122.88 МГц, тот же четырёхканальный импульсный регулятор ADP5054, те же широкополосные балуны Mini-Circuits.

Буква W в названии оригинала означает wideband - широкополосное согласование входов и выходов. Согласно описанию платы у ADI, она «работает во всём диапазоне перестройки 75 МГц – 6 ГГц, однако ВЧ-характеристики ограничены очень широкополосным согласованием фронтенда»; плата предназначена «для исследования системы и отладки сигналов программной командой, пока не готово собственное железо», и цель - «увидеть сигналы, а не бороться за последний децибел или процент EVM». Ровно то же справедливо и для клона: балуны TCM1-83X-1+ на 10–8000 МГц перекрывают весь диапазон, но за это приходится платить неоптимальным согласованием на любой конкретной частоте.
Что даёт понимание родства:
Следствие |
Почему это важно |
Работает штатное ПО ADI |
Windows-утилита ADRV9009 Transceiver Evaluation Software и Linux-драйверы adrv9009 из ядра ADI видят плату как оригинал |
Подходит референсный HDL ADI |
Проекты adrv9009_zc706, adrv9009_zcu102 из репозитория analogdevicesinc/hdl собираются под эту плату |
Работает Talise API |
Тот самый API от ADI, что и для оригинала (в комплектном примере - версия 3.6.0.5) |
Есть на что смотреть при отладке |
Документация UG-1295 и схема оригинала описывают ровно эту топологию |
Разница - в цене и в гарантиях. Оригинал ADRV9009-W/PCBZ у дистрибьюторов стоит порядка 2300 долларов и не включает материнскую плату: ADI требует отдельно покупать EVAL-TPG-ZYNQ3. Клон продаётся в разы дешевле, но никакой гарантии соответствия ВЧ-характеристик оригиналу нет: неизвестно, какие реально стоят балуны, какой материал стеклотекстолита используется, как сделаны опорные слои и насколько аккуратно выполнено согласование. Для «увидеть сигнал» этого обычно достаточно, для измерений с заявленной в даташите точностью - разумеется нет.
При этом стоит упомянуть, что на плате установлен RF SoC AD9379BBCZ - это внутреннее, или можно сказать, дорелизное обозначение микросхемы, которая была выведена на рынок как ADRV9009BBCZ. По архитектуре и программной платформе это один и тот же Talise TDD-трансивер: 2 Rx + 2 Tx + общий ORx. Однако микросхему с маркировкой AD9379BBCZ нельзя автоматически считать полностью эквивалентной серийному ADRV9009BBCZ без проверки ревизии кристалла.

В официальном Talise API функция TALISE_getProductId() расшифровывает внутренние идентификаторы так:
Product ID |
Внутреннее обозначение |
Серийное обозначение |
1 |
AD9379, TDD device |
ADRV9009 |
2 |
AD9378-1, Rx only |
ADRV9008-1 |
3 |
AD9378-2, Tx/ORx |
ADRV9008-2 |
То есть AD9379 является внутренним именем TDD-варианта семейства Talise, а ADRV9009 - его официальным коммерческим наименованием. Это также подтверждается тем, что исходный код Talise API имеет лицензионный заголовок AD9378-AD9379 API, тогда как актуальный драйвер ADI называется adrv9009 и использует тот же Talise API и прошивки.
Представитель Analog Devices отдельно указывал, что AD9379 мог быть дорелизным внутренним номером продукта. В актуальном каталоге ADI отдельного публичного продукта AD9379 нет.
Наиболее вероятное отличие заключается не в функциональной архитектуре, а в ревизии кристалла и дорелизный AD9379BBCZ может иметь:
раннюю ревизию silicon A0, B0 или C0;
дополнительные errata;
ограничения отдельных калибровок;
отличия в последовательности инициализации;
другую версию ARM firmware или stream image;
ограничения по частотам, JESD204B или температурному диапазону;
отсутствие полной производственной квалификации;
другую маркировку корпуса или OEM-суффикс.
Старые ревизии действительно учитываются программно: например, в официальном коде указано, что отдельная функция AGC IIP3 недоступна на C0 и более ранних ревизиях.
Для чего эта плата хороша
Прототипирование широкополосных SDR-систем. Две передающие и две приёмные цепочки с полосой до 200 МГц каждая, диапазон 75 МГц – 6 ГГц, синхронизация по JESD204B subclass 1 - это уровень, недостижимый для USB-свистков и AD9361-модулей вроде PlutoSDR. Здесь можно делать MIMO 2×2, работать с полосами LTE/5G NR, ловить широкополосные сигналы целиком.
Изучение JESD204B на живом железе. Плата - редкая возможность потрогать руками полный bring-up JESD204B: SYSREF, subclass 1, детерминированная задержка, выравнивание лейнов, CGS/ILAS. Того, что нельзя изучить по документации, здесь предостаточно.
Отдельный наблюдающий приёмник для DPD (Digital Pre-Distortion) и калибровок. Два ORX-входа с полосой до 450 МГц позволяют строить контур цифровой предыскажающей коррекции для внешнего усилителя мощности - сам ADRV9009 внутреннего DPD не имеет, но даёт полосу для внешнего.
Радар и измерительные задачи. Синхронный TX и RX с общим гетеродином, вход внешнего LO и вход внешней опорной частоты - база для FMCW-радара или для сборки нескольких плат в синхронную решётку через multichip phase synchronization.
Дёшево получить ADRV9009 в руки. Если задача - оценить микросхему перед разработкой собственной платы, это самый доступный вход. Схема оригинала и проект-пример в комплекте и служит референсом для своей разработки.
Для чего она не подойдёт
Если нужен готовый прибор. Ни один сценарий невозможен без платы-носителя, конфигурации FPGA, драйверов и ПО. Порог входа высокий: нужно уверенно владеть Vivado, понимать JESD204B и уметь читать код Talise API. Реалистичная оценка времени до первого принятого сигнала - от нескольких дней до нескольких недель, если раньше вы этим не занимались.
Если нужны метрологические характеристики. Широкополосное согласование фронтенда, отсутствие фильтров и неизвестное качество изготовления делают абсолютные измерения уровней неточными. Для этого либо оригинальная плата ADI, либо своя с узкополосным согласованием под конкретный диапазон.
Если нужен полный дуплекс с полной полосой. ADRV9009 оптимизирован под TDD. Приёмная часть работает либо как два канала по 200 МГц, либо как один наблюдательный на 450 МГц - переключение происходит по слотам TDD. Для FDD у ADI есть двухчиповое решение ADRV9008-1 + ADRV9008-2.
Если нет носителя с нужными характеристиками. Плата требует FMC HPC, четыре GT-линии со скоростью до 9.8304 Гбит/с в каждую сторону, вход опорной частоты GBTCLK0 и правильно выставленное напряжение VADJ. Это отсекает большинство дешёвых плат на Artix-7 и Spartan. Требования к плате-носителю разбираются в главе 10.
Глава 2. Характеристики
Здесь важно сразу развести две вещи: что умеет микросхема ADRV9009 и что из этого доступно на конкретной плате с конкретным носителем. Разница есть, и в некоторых местах она принципиальная. Сначала параметры микросхемы по даташиту, потом - поправки от реального железа.
Общая картина
Параметр |
Значение |
Диапазон перестройки (центральная частота) |
75 МГц - 6000 МГц |
Передающих каналов |
2 (TX1, TX2) |
Приёмных каналов |
2 (RX1, RX2) |
Наблюдательных приёмников |
2 входа, один активный канал одновременно (ORX1, ORX2) |
Полоса приёмника |
до 200 МГц на канал |
Полоса синтеза передатчика |
до 450 МГц |
Полоса большого сигнала передатчика |
200 МГц |
Полоса наблюдательного приёмника |
до 450 МГц |
Интерфейс данных |
JESD204B Subclass 1, до 12.288 Гбит/с на линию |
Число линий JESD204B |
4 на передачу + 4 на приём/наблюдение |
Синтезаторы |
RF PLL (fractional-N) + Aux PLL + тактовый PLL, все VCO и петлевые фильтры внутри |
Разрядность преобразователей |
14 бит ADC, 16 бит DAC (по FAQ ADI; в даташите прямо не указано) |
Формат отсчётов на JESD204B |
16 бит на компоненту (Np = 16) |
Синхронизация нескольких микросхем |
Multichip phase synchronization для RF LO и тактовых сигналов |
Корпус |
BGA 196 выводов, матрица 14 × 14 |
Одна деталь про приёмный тракт, которую часто упускают: приёмник и наблюдательный приёмник делят одни и те же ADC. ADRV9009 работает либо как двухканальный приёмник с полосой до 200 МГц, либо как одноканальный наблюдательный с полосой до 450 МГц. Переключение происходит по слотам TDD - это заложено в архитектуру микросхемы и обойти его нельзя. Полоса 450 МГц у ORX получается «сшиванием» (ADC stitching): один и тот же сигнал оцифровывается всеми четырьмя ADC, а цифровые тракты ORX1 и ORX2 объединяются.
Приёмный тракт
Все значения - при нулевом ослаблении, на входе микросхемы, без вычета потерь в цепях платы (not de-embedded).
Параметр |
75…600 МГц |
600…3000 МГц |
3000…4800 МГц |
4800…6000 МГц |
Коэффициент шума NF |
11.5 дБ |
12 дБ |
13 дБ |
15.2 дБ |
Максимальный полезный уровень PHIGH |
−11 дБм |
−11 дБм |
−10.2 дБм |
−9.5 дБм |
Развязка приёмник–приёмник |
77 дБ |
65 дБ |
65 дБ |
61 дБ |
HD3 (Third Harmonic Distortion) |
−65 дБн |
−66 дБн |
−66 дБн |
−62 дБн |
Плюс параметры, не зависящие от диапазона:
Диапазон регулировки усиления: 30 дБ, шаг 0.5 дБ (в диапазоне 0…6 дБ) и 1 дБ (6…30 дБ)
Input Second/Third-Order Intercept Point, входная точка пересечения второго порядка IIP3: 12 дБм, IIP2: 62 дБм
Подавление зеркала: 75 дБ при активной QEC в полосе 200 МГц
Подавление зоны наложения: 80 дБ за счёт цифровых фильтров
Неравномерность в полосе: ±0.5 дБ на 200 МГц, ±0.2 дБ на любом участке 20 МГц (после компенсации программируемым FIR)
Внутриполосные паразитные составляющие: −95 дБм, не более одной такой на каждые 10 МГц полосы
Входное сопротивление: 100 Ом дифференциальное
Коэффициент шума 11.5–15 дБ - это немного, если сравнивать с узкополосными приёмниками. Для чувствительного приёма перед платой нужен малошумящий усилитель. PHIGH около −11 дБм означает, что вход насыщается уже на слабом сигнале: с антенной в городе без входного аттенюатора или фильтра вы почти наверняка получите перегрузку от сигналов сотовых базовых станций.
Передающий тракт
Параметр |
75…600 МГц |
600…3000 МГц |
3000…4800 МГц |
4800…6000 МГц |
Максимальная выходная мощность (0 dBFS CW, 50 Ом) |
9 дБм |
7 дБм |
6 дБм |
4.5 дБм |
Внутриполосный noise floor |
−147 дБм/Гц |
−148 дБм/Гц |
−149 дБм/Гц |
−150.5 дБм/Гц |
Внеполосный noise floor |
−147 дБм/Гц |
−153 дБм/Гц |
−154 дБм/Гц |
−155.5 дБм/Гц |
Развязка передатчик-передатчик |
85 дБ |
75 дБ (до 2800 МГц) |
70 дБ |
65…56 дБ |
Подавление зеркала (QEC активна) |
70 дБ |
65 дБ (до 4000 МГц) |
62 дБ |
60 дБ |
OIP3: 29 дБм до 600 МГц, 27 дБм до 4000 МГц, 23 дБм до 6000 МГц.
ACLR на сигнале LTE 20 МГц при уровне −12 дБFS: −67 дБ до 2800 МГц, −64 дБ до 4800 МГц, −60 дБ выше.
EVM на тестовых сигналах 3GPP: 0.5 % на 75 МГц, 0.7 % на 1900 и 3800 МГц, 1.1 % на 5900 МГц.
Регулировка мощности передатчика заслуживает отдельного упоминания: диапазон 0…32 дБ с разрешением 0.05 дБ, причём отношение сигнал/шум сохраняется в пределах первых 20 дБ ослабления. Управлять можно как по обычному SPI, так и по отдельному быстрому интерфейсу SPI 2: изменение вступает в силу через 19.5–24 нс после подъёма CS, полное время установления - 800 нс. Для TDD-систем с быстрым переключением мощности это существенно.
Максимум 9 дБм на выходе - то есть примерно 8 мВт. Ни одна практическая задача передачи этим не решается напрямую: нужен внешний усилитель мощности.
Наблюдательный приёмник
Параметр |
Значение |
Диапазон центральных частот |
75…6000 МГц |
Полоса |
до 450 МГц |
Диапазон регулировки усиления |
30 дБ, шаг 0.5 дБ (0…6 дБ) |
Максимальный полезный уровень PHIGH |
−11 дБм (75…3000 МГц), −9.5 дБм (3000…4800), −8 дБм (4800…6000) |
Интегральный шум |
−58.5 dBFS в полосе 450 МГц |
Подавление зеркала |
65 дБ в полосе большого сигнала |
Подавление зоны наложения |
60 дБ |
Развязка TX→ORX (свой канал) |
100 дБ до 600 МГц, 65 дБ до 5300 МГц, 55 дБ выше |
Про DPD стоит сказать прямо: внутреннего DPD в ADRV9009 нет. ORX даёт полосу для наблюдения, но алгоритм предыскажения вам придётся реализовать самим в FPGA или на хосте. Микросхемы с встроенным DPD - это уже ADRV9029 и старше.
Цифровой интерфейс: сколько линий на какую полосу
Это самая практически важная таблица во всём даташите, потому что от неё зависит выбор платы-носителя. Формула, по которой считается скорость линии:
lane rate = (M × Np × 10/8 × fs) / L
где M - число конвертеров (2 на канал, I и Q), Np - разрядность отсчёта в JESD-кадре (16), 10/8 - накладные расходы кодирования 8b/10b, fs - частота отсчётов IQ, L - число линий.
Приёмник (Таблица 8 даташита):
Полоса, МГц |
Частота IQ, MSPS |
Один канал |
Два канала |
80 |
122.88 |
4915.2 Мбит/с × 1 |
9830.4 Мбит/с × 1 |
100 |
153.6 |
6144 Мбит/с × 1 |
12288 Мбит/с × 1 |
100 |
245.76 |
9830.4 Мбит/с × 1 |
9830.4 Мбит/с × 2 |
200 |
245.76 |
9830.4 Мбит/с × 1 |
9830.4 Мбит/с × 2 |
200 |
245.76 |
4915.2 Мбит/с × 2 |
4915.2 Мбит/с × 4 |
Передатчик (Таблица 7):
Полоса, МГц |
Частота IQ, MSPS |
Один канал |
Два канала |
200 |
245.76 |
9830.4 Мбит/с × 1 |
9830.4 Мбит/с × 2 |
200 |
307.2 |
12288 Мбит/с × 1 |
12288 Мбит/с × 2 |
250 |
307.2 |
12288 Мбит/с × 1 |
12288 Мбит/с × 2 |
450 |
491.52 |
9830.4 Мбит/с × 2 |
9830.4 Мбит/с × 4 |
Наблюдательный приёмник (Таблица 6):
Полоса, МГц |
Частота IQ, MSPS |
Скорость линии |
Линий |
200 |
245.76 |
9830.4 Мбит/с |
1 |
200 |
307.2 |
12288 Мбит/с |
1 |
250 |
307.2 |
12288 Мбит/с |
1 |
450 |
491.52 |
9830.4 Мбит/с |
2 |
450 |
491.52 |
4915.2 Мбит/с |
4 |
Видно главное: одну и ту же полосу можно получить либо на меньшем числе быстрых линий, либо на большем числе медленных. Профиль 200 МГц двухканального приёма это либо 9830.4 Мбит/с на двух линиях, либо 4915.2 Мбит/с на четырёх. Это ключ к совместимости с носителями: если GT-трансиверы вашей FPGA не тянут 9.8 Гбит/с, можно раскидать тот же поток на четыре линии по 4.9 Гбит/с.
Что из этого доступно на плате FMC_ADRV9009
Теперь поправки от реального железа.
Все четыре линии JESD204B разведены в обе стороны. По схеме (лист JESD_INTERFACE_GPIO, FMC_FPGA_CONNECTIONS) SERDOUT0…SERDOUT3 от ADRV9009 идут на пары DP0_M2C…DP3_M2C разъёма FMC, а SERDIN0…SERDIN3 - на DP0_C2M…DP3_C2M. Ограничений со стороны платы нет: любой профиль из таблиц выше поддерживается по разводке.
Ограничение накладывает носитель. Для Zynq-7000 предел скорости GT-трансиверов зависит не от градации скорости, а от типа корпуса: в корпусах FFG (flip-chip с теплораспределителем) до 12.5 Гбит/с, в корпусах FBG (без крышки) - только 6.6 Гбит/с. И ZC706 с XC7Z045-2FFG900, и RIGUKE 7100 с XC7Z100-2FFG900 попадают в первую категорию.
Но есть дополнительное условие: для скоростей выше 10.3125 Гбит/с требуется поднять аналоговое питание трансиверов VMGTAVCC с 1.0 В до 1.05 В. Обеспечивает его плата-носитель, и на конкретной плате это может быть не предусмотрено. Отсюда практическая картина:
Профиль |
Достижимость |
Комментарий |
Скорость линии 4915.2 Мбит/с |
Да |
С большим запасом на любом подходящем носителе |
Скорость линии 9830.4 Мбит/с |
Да |
Штатный режим, на нём работают все референсные проекты |
Скорость линии 12288 Мбит/с |
Зависит от носителя |
Нужно VMGTAVCC = 1.05 В; проверяйте документацию платы |
Ровно об этом ADI пишет в своём FAQ: с ZC706 работать можно, но «не на всех скоростях и профилях», поэтому для полной совместимости рекомендуется их материнская плата EVAL-TPG-ZYNQ3. На практике это означает, что профили с частотой IQ 307.2 MSPS (полоса передатчика 250 МГц) на распространённых носителях под вопросом, а всё остальное, включая 450 МГц синтеза передатчика и 450 МГц ORX, доступно - эти профили укладываются в 9830.4 Мбит/с на четырёх линиях.
Ограничение накладывает ВЧ-фронтенд платы. Балуны TCM1-83X-1+ заявлены на 10–8000 МГц, то есть перекрывают весь диапазон микросхемы. Но широкополосное согласование неоптимально на любой конкретной частоте: реальные потери и КСВ будут хуже, чем при узкополосном согласовании под ваш диапазон. У наблюдательных входов ORX1/ORX2 балуны в схеме вообще помечены /NC - на плате их может не быть, вместо них стоят перемычки 0R. Подробно это разбирается в главе 4.
Ограничение накладывает референсный проект. Комплектный проект настроен на один жёстко заданный профиль: 245.76 MSPS на всех трактах, полосы 200 МГц у RX, 225 МГц у TX и 200 МГц у ORX, приём на двух линиях по 9830.4 Мбит/с, передача на четырёх по 4915.2 Мбит/с. Хотите другой профиль - придётся генерировать новую конфигурацию в Transceiver Evaluation Software и пересобирать проект FPGA под новые тактовые частоты. См. главу 11.
Потребление и тепло
Потребление сильно зависит от режима. Данные из даташита при LO 2600 МГц:
Режим |
1.3 В аналог |
1.3 В цифра |
1.8 В TX |
1.8 В BB |
Итого |
Два передатчика, 450 МГц, ORX выключен |
1520 мА |
619 мА |
455 мА |
30 мА |
3.68 Вт |
То же, ослабление TX 15 дБ |
1520 мА |
619 мА |
135 мА |
30 мА |
3.11 Вт |
Два передатчика + один ORX, 450 МГц |
2073 мА |
1541 мА |
455 мА |
63 мА |
5.66 Вт |
То же, ослабление TX 15 дБ |
2073 мА |
1541 мА |
135 мА |
63 мА |
5.08 Вт |
Два приёмника, 200 МГц, ORX выключен |
1645 мА |
984 мА |
0.4 мА |
68 мА |
3.57 Вт |
Практический вывод: до 5.7 Вт рассеивает только сама микросхема, и это без учёта потерь в импульсных преобразователях, AD9528 и остальной обвязке. Реальное потребление платы от 12 В будет порядка 7–8 Вт. Микросхема в корпусе BGA без радиатора при 5.7 Вт греется ощутимо - обдув желателен, особенно если плата стоит в закрытом корпусе. Токи по рейлам 1.3 В достигают 2.1 А, и именно поэтому в схеме питания каналы 1 и 2 регулятора ADP5054 усилены внешним MOSFET (см. главу 8).
Отдельно про напряжение интерфейса: VDD_INTERFACE по даташиту допускает 1.71…2.625 В, номинально 1.8 или 2.5 В. На плате это напряжение берётся прямо с линии VADJ разъёма FMC, поэтому носитель обязан выставить на VADJ 1.8 или 2.5 В. Значение 3.3 В, которое умеют некоторые платы, выведет микросхему из строя - абсолютный максимум по даташиту 3.0 В.
Глава 3. Архитектура платы
Как устроена плата в целом
Функционально плата делится на четыре независимых блока: ВЧ-фронтенд, трансивер, тактирование и питание. Плюс интерфейсная логика, которая согласует уровни между напряжением FMC и 3.3 В домена тактового генератора.

Логика такая. ВЧ-сигнал приходит на SMA, проходит через балун (несимметричный вход → симметричный выход, потому что все ВЧ-порты ADRV9009 дифференциальные) и попадает в трансивер. Трансивер превращает его в поток IQ-отсчётов и отдаёт по четырём последовательным линиям JESD204B на разъём FMC. Тактовый генератор AD9528 обеспечивает и трансивер, и плату-носитель согласованными тактовыми сигналами - это обязательное условие для JESD204B subclass 1. Питание формируется из 12 В четырёхканальным импульсным регулятором.
Ключевые компоненты
Позиция |
Компонент |
Назначение |
U2 |
ADRV9009 (BGA 196, 14 × 14) |
Собственно трансивер |
U1 |
Разъём FMC HPC, 400 контактов |
Интерфейс к плате-носителю |
IC1 |
ADP5054ACPZ-R7 |
Четырёхканальный понижающий импульсный регулятор |
Q1 |
IRF7313PBF |
Сдвоенный N-канальный MOSFET, усиливает каналы 1 и 2 регулятора |
L1, L4 |
XFL4020-102ME, 1 мкГн |
Дроссели каналов 1.3 В |
L2, L3 |
XFL4020-332ME, 3.3 мкГн |
Дроссели каналов 3.3 В и 1.8 В |
F1 |
Предохранитель 2 А |
Защита входа 12 В со стороны FMC |
D1 |
SS34, диод Шоттки |
Развязка двух входов питания |
AD9528 |
AD9528 (LFCSP 72) |
Генератор тактовых сигналов JESD204B с двумя PLL |
Y1 |
ABLJO-V-122.880MHZ-T2 |
VCXO 122.88 МГц, опора для PLL2 генератора |
T1 |
MABA-007159-000000 |
Балун входа внешней опорной частоты |
T2, T3 |
TCM1-83X-1+ |
Балуны входов RX1, RX2 |
T4, T5 |
TCM1-83X-1+ |
Балуны входов ORX1, ORX2 - по схеме опциональны |
T6, T8 |
TCM1-83X-1+ |
Балуны выходов TX1, TX2 |
T7 |
HHM1595A1 |
Балун входа/выхода внешнего гетеродина |
IC2 |
NC7WZ16P6X |
Буфер, разгружает выводы STATUS генератора на светодиоды |
IC3 |
NC7WV125K8X |
Два буфера с третьим состоянием: сводят SPI MISO от двух микросхем на одну линию |
IC4 |
ADG3301BKSZ |
Односигнальный транслятор уровней для сброса AD9528 |
IC5 |
ADG3304SRU-EP-RL7 |
Четырёхканальный транслятор уровней для SPI и SYSREF-запроса |
IC6 |
M24C02-RMN6P |
EEPROM 2 Кбит, обязательный по VITA 57.1 для идентификации модуля |
IC7 |
S25FL208K |
SPI-флеш 8 Мбит, подключена к 3.3-вольтовым GPIO трансивера |
JP1…JP7 |
SMA |
Разъёмы: REF CLK, RX1, RX2, ORX1, ORX2, TX1, TX2 |
RF1 |
SMA |
Разъем внешнего гетеродина |
JP8 |
Колодка 2 контакта |
12 В и земля: контрольная точка либо альтернативный ввод питания |
POWER1 |
Светодиод |
Индикация наличия 12 В |
STATUS1, STATUS2 |
Светодиоды |
Индикация состояния AD9528 (обычно захват PLL1 и PLL2) |
Всего восемь ВЧ-разъёмов: шесть сигнальных (RX1, RX2, ORX1, ORX2, TX1, TX2), один под внешнюю опорную частоту и один под внешний гетеродин. Питание плата получает по разъёму FMC - отдельного силового разъёма на ней нет, только двухконтактная колодка JP8, куда выведены 12 В и земля.
Что стоит отметить в этом списке. Во-первых, на плате нет линейных стабилизаторов вообще - все четыре напряжения формируются импульсными преобразователями. ADI в описании оригинальной платы называет это «high efficiency switcher only power supply solution». Для ВЧ-платы решение смелое: обычно чувствительные аналоговые цепи питают через LDO для подавления пульсаций. Здесь роль фильтра выполняют ферритовые бусины и большое количество развязывающих конденсаторов.
Во-вторых, VCXO на 122.88 МГц, а не 245.76 МГц. Даташит ADRV9009 приводит характеристики при тактовой частоте 245.76 МГц, но комплектный референсный проект работает на 122.88 МГц. Микросхема умеет и то и другое (внутренний тактовый PLL умножает частоту до 9830.4 МГц), просто это надо учитывать при генерации своих профилей.
В-третьих, два разных семейства трансляторов уровней. ADG3301 и ADG3304 - двунаправленные автоопределяющиеся трансляторы, они нужны потому, что AD9528 питается от 3.3 В, а линии SPI и сброса приходят с FMC на напряжении VADJ (1.8 или 2.5 В). При этом сам ADRV9009 работает на уровнях VADJ напрямую, без трансляции.
Карта листов схемы
Схема разбита на семь листов. Дальше в обзоре мы пройдём по ним по порядку, поэтому вот карта, чтобы было понятно, где что искать.
Лист |
Имя |
Что на нём |
Разбирается в |
1 |
RF_RX_ORX_INPUTS |
Входные цепи RX1, RX2, ORX1, ORX2: SMA, балуны, согласование |
Глава 4 |
2 |
RF_TX_OUT_EXT_LO_IN |
Выходные цепи TX1, TX2 и вход внешнего гетеродина |
Глава 5 |
3 |
CLOCK_GENERATION |
AD9528, VCXO, вход опорной частоты, трансляторы уровней, светодиоды |
Глава 6 |
4 |
JESD_INTERFACE_GPIO |
Цифровые выводы ADRV9009: JESD204B, SPI, GPIO, ENABLE |
Глава 7 |
5 |
POWER_DUT_CONNECTIONS |
Разводка питающих выводов ADRV9009 и развязка |
Глава 8 |
6 |
POWER_SUPPLY |
Регулятор ADP5054, формирование четырёх рельсов, ввод 12 В |
Глава 8 |
7 |
FMC_FPGA_CONNECTIONS |
Разъём FMC, EEPROM, SPI-флеш, развязка JESD-линий |
Глава 9 |
Такое разбиение - стандартный для оценочных плат ADI приём: питание микросхемы (лист 5) отделено от источника питания (лист 6), чтобы разработчик, копирующий дизайн, мог взять разводку выводов трансивера отдельно от конкретной реализации преобразователей.
Обратите внимание на нумерацию форматов: листы 1, 3, 5, 6, 7 сделаны в A3, листы 2 и 4 - в A4. Это косвенный признак того, что схема действительно перерисована с оригинала, а не сгенерирована заново.
Трасса сигнала от антенны до FPGA
Полезно один раз увидеть весь путь целиком - дальше будет проще ориентироваться в главах.
Приём. Сигнал приходит на SMA JP2 → конденсатор 18 пФ отсекает постоянную составляющую → балун T2 превращает несимметричный сигнал в симметричный → цепь согласования из конденсаторов → дифференциальная пара RX1_P/RX1_N → выводы A9/A10 микросхемы U2. Внутри ADRV9009: смеситель с гетеродином от RF PLL, фильтр, ADC, цифровые фильтры (три полуполосных плюс программируемый FIR), коррекция квадратуры и постоянной составляющей, упаковка в кадры JESD204B → SERDOUT0…3 → пары DP0_M2C…DP3_M2C разъёма FMC → GT-приёмники FPGA.
Передача. Обратный путь: GT-передатчики FPGA → DP0_C2M…DP3_C2M → SERDIN0…3 → распаковка кадров, интерполяция, коррекция квадратуры, DAC, смеситель, аттенюатор 0…32 дБ → дифференциальная пара TX1_P/TX1_N (выводы H14/J14) → дроссели 43 нГн задают постоянную составляющую от 1.8 В → балун T6 → фильтр → SMA JP6.
Тактирование. VCXO Y1 на 122.88 МГц → вход VCXO_IN генератора AD9528 → внутренний PLL2 умножает до частоты VCO → выходные делители формируют четыре сигнала: DEV_CLK 122.88 МГц и SYSREF для трансивера, опорную частоту 122.88 МГц для GT-трансиверов FPGA (через пару GBTCLK0_M2C) и SYSREF для FPGA (через пару LA00_CC). При необходимости PLL1 захватывается за внешнюю опорную частоту с SMA JP1.
Управление. FPGA ведёт один SPI-интерфейс с двумя линиями выбора: SPI_CS0 адресует ADRV9009 напрямую, SPI_CS1 - AD9528 через транслятор уровней. Линия MISO сводится с двух микросхем буфером IC3 с третьим состоянием. Плюс отдельные линии: сброс трансивера, сброс генератора, запрос SYSREF, прерывание и четыре сигнала разрешения RX1/RX2/TX1/TX2_ENABLE для быстрого управления по слотам TDD.
Глава 4. Приёмный тракт RX и ORX
Лист схемы: RF_RX_ORX_INPUTS (полный лист).
Зачем здесь балун
Все ВЧ-порты ADRV9009 дифференциальные. Вход приёмника - RX1_IN+/RX1_IN− на выводах A9/A10, входное сопротивление 100 Ом дифференциально. А коаксиальный кабель с SMA - несимметричная 50-омная линия. Нужен переход, и его делает балун (balanced-to-unbalanced трансформатор).
Балун здесь решает сразу три задачи: превращает несимметричный сигнал в симметричный, гальванически развязывает по постоянному току (у ADRV9009 на входах есть собственное смещение, которое нельзя закорачивать на землю через кабель) и подавляет синфазную помеху, наведённую на оплётке кабеля.
Есть и альтернатива - подавать сигнал дифференциально напрямую, без балуна. Так делают, когда перед трансивером стоит дифференциальный МШУ или дифференциальный фильтр. На этой плате такой возможности нет: все входы идут только через SMA и балун.
Цепь приёмника: что стоит на плате

Разбираем по элементам, слева направо, на примере RX1 (для RX2 всё то же самое с другими позиционными обозначениями):
Элемент |
RX1 |
RX2 |
Что делает |
Разъём SMA |
JP2 |
JP3 |
Вход сигнала |
Разделительный конденсатор |
C102 18 пФ |
C109 18 пФ |
Отсекает постоянную составляющую, задаёт нижнюю границу полосы |
Балун |
T2 TCM1-83X-1+ |
T3 TCM1-83X-1+ |
Несимметричный вход → симметричный выход, 1:1 |
Ёмкость на «холодном» конце первичной обмотки |
C106 27 пФ C107 10 пФ |
C113 27 пФ C114 10 пФ |
Заземление второго вывода первичной обмотки по переменному току |
Дифференциальный конденсатор №1 |
C104, не установлен |
C111, не установлен |
Посадочное место под подстройку согласования |
Перемычки |
R62, R97 - 0 Ом |
R98, R99 - 0 Ом |
Точки разрыва цепи для отладки |
Дифференциальный конденсатор №2 |
C103, не установлен |
C110, не установлен |
Второе посадочное место под подстройку |
Топология включения балуна такая: сигнал с SMA через C102 приходит на вывод 3 (PRIMARY_DOT), а вывод 2 (PRIMARY) сажается на землю через параллельно включённые C106 и C107 - суммарно 37 пФ. Выводы 1 и 6 (NOT_USED_1, NOT_USED_2) заземлены. Со вторичной обмотки (выводы 4 и 5) сигнал через нулевые резисторы уходит на дифференциальную пару RX1_P/RX1_N.
Обратите внимание на две пары неустановленных конденсаторов: C104 включён поперёк вторичной обмотки балуна, C103 - поперёк линии уже после перемычек. Это заготовки, оставленные разработчиком специально: если вам нужно подстроить согласование под конкретный диапазон, для этого есть готовые места, куда можно впаять ёмкость. Плюс два нулевых резистора позволяют физически разорвать тракт - удобно, когда надо подключиться к дифференциальной паре щупом или врезать внешний фильтр.
Балун TCM1-83X-1+
Mini-Circuits TCM1-83X-1+ - трансформатор на линиях передачи в SMD-корпусе:
Параметр |
Значение |
Диапазон частот |
10 … 8000 МГц |
Коэффициент трансформации |
1 : 1 (50 Ом → 50 Ом) |
Вносимые потери |
0.95 … 1.65 дБ (обычно 1.3 дБ) |
Обратные потери по входу |
10.5 … 18.6 дБ |
Амплитудный разбаланс |
0.14 … 1.32 дБ |
Фазовый разбаланс |
0.26 … 13.0 градусов |
Именно этот балун и делает плату «wideband»: одним компонентом перекрывается весь диапазон перестройки трансивера. Цена - характеристики, усреднённые по всему диапазону, вместо оптимальных на конкретной частоте.
Отдельно стоит посмотреть на разбаланс. На 3 ГГц фазовый разбаланс балуна достигает 13 градусов, амплитудный - до 1.3 дБ на 8 ГГц. Разбаланс на входе приёмника преобразуется в квадратурную ошибку и ухудшает подавление зеркального канала. Внутренний алгоритм QEC (quadrature error correction) в ADRV9009 это в значительной мере компенсирует - в даташите заявлено подавление зеркала 75 дБ при активной QEC - но исходный разбаланс всё равно ограничивает достижимый результат. Для передающего тракта и внешнего гетеродина ADI прямо указывает предельные требования к балуну; для приёмника таких жёстких формулировок в документации нет, но принцип тот же.
Оценка АЧХ входной цепи: важное практическое наблюдение
Здесь возникает вопрос, который стоит разобрать подробно, потому что он влияет на выбор задач для платы. Разделительный конденсатор всего 18 пФ, и ёмкость на «холодном» конце первичной обмотки всего 37 пФ. На нижнем краю диапазона трансивера это уже не «закоротки», а вполне заметные реактивности.
Прикинем потери на этих элементах, считая балун идеальным трансформатором 1:1 с нагрузкой 100 Ом (входное сопротивление приёмника) и источником 50 Ом:
Частота |
XC у 18 пФ |
XC у 37 пФ |
Потери в цепи |
75 МГц |
118 Ом |
57 Ом |
4.25 дБ |
100 МГц |
88 Ом |
43 Ом |
2.99 дБ |
150 МГц |
59 Ом |
29 Ом |
1.79 дБ |
200 МГц |
44 Ом |
22 Ом |
1.27 дБ |
300 МГц |
30 Ом |
14 Ом |
0.87 дБ |
500 МГц |
18 Ом |
9 Ом |
0.64 дБ |
1 ГГц и выше |
≤ 9 Ом |
≤ 4 Ом |
0.52 дБ |
Полка 0.51 дБ на высоких частотах - это не потери на конденсаторах, а неустранимые потери на рассогласовании 50-омного выхода балуна с 100-омным входом приёмника: коэффициент отражения 0.33, КСВ 2. Полдецибела - терпимо, и это осознанный компромисс широкополосного согласования.
А вот низкочастотный спад существенен. На 75 МГц входная цепь платы теряет около 4 дБ, и это ещё без вносимых потерь балуна (1.6 дБ на низких частотах). Суммарно почти 6 дБ. При коэффициенте шума приёмника 11.5 дБ на этих частотах получаем эффективный коэффициент шума системы порядка 17 дБ - очень скромно.
Оговорка: расчёт упрощённый. Балун считается идеальным, входное сопротивление приёмника - чисто резистивным 100 Ом (в реальности оно комплексное и частотно-зависимое, ADI приводит его графиком), паразитные параметры монтажа не учтены. Реальная АЧХ будет отличаться, но порядок величин и характер зависимости расчёт передаёт верно.
Практический вывод: плата оптимизирована под диапазон примерно от 300–400 МГц и выше. Это логично - оригинал ADI сделан для сотовых диапазонов. Если вам нужны частоты ниже 200 МГц (например, УКВ-диапазоны, авиационная 118–137 МГц, любительские 144 МГц), стоит заменить C102/C109 на что-то вроде 1000 пФ и C106/C107 на 100–470 пФ. Это делается легко, компоненты доступны, и никаких других переделок не потребуется.
Наблюдательные входы ORX: балуны могут быть не установлены

Цепи ORX1 и ORX2 повторяют схему основных приёмников - те же 18 пФ на входе, те же 27 + 10 пФ на «холодном» конце, те же нулевые резисторы. Но с одним важным отличием: балуны T4 и T5 в схеме помечены как TCM1-83X-1+/NC.
Запись через слэш в этой схеме означает «альтернативный вариант: не устанавливать». То есть по документации балуны наблюдательных входов могут физически отсутствовать. Аналогично помечены и дифференциальные конденсаторы C116, C117, C121, C122 - все NC.
Что это значит на практике. Если балун не установлен, тракт от SMA до входа ORX1_IN± разорван, и наблюдательный вход просто не работает. Проверить нужно визуально по своей плате: балун - заметный SMD-компонент, его либо видно на позиции T4/T5, либо нет. Если позиция пустая, а ORX вам нужен, придётся паять балун самому. Это единственная позиция, где придётся работать с ВЧ-компонентом, но корпус несложный.
Логика такого решения понятна: наблюдательный приёмник в реальной системе не подключают к антенне. Его подключают к направленному ответвителю на выходе усилителя мощности, чтобы контролировать, что именно излучается. На оценочной плате это соединение делает пользователь под свою конфигурацию, поэтому ADI и оставила позицию опциональной.
Мелочь, которая говорит о качестве документации
На листе четыре блока с заголовками: RX1 INPUT, RX2 INPUT, ORX1 INPUT и снова ORX1 INPUT. Последний, где стоят JP5, T5 и цепи ORX2_P/ORX2_N, - это, разумеется, ORX2. Просто опечатка, которую видно на приведённой выше картинке.
Опечатка безвредная - по цепям и позиционным обозначениям всё однозначно. Но она хорошо иллюстрирует уровень внимания к комплектной документации: схему перерисовали, а вычитать забыли. Это стоит держать в голове при работе с остальными листами: перепроверять сомнительные места по цепям, а не доверять подписям.
Что можно сделать с этим трактом
Несколько практических модификаций, если стандартная конфигурация вам не подходит.
Сдвинуть полосу вниз. Заменить C102/C109 (18 пФ) на 1 нФ и C106+C107 / C113+C114 (37 пФ) на 100–470 пФ. Получите ровную АЧХ от единиц мегагерц. Верхняя граница при этом не пострадает - она определяется балуном.
Врезать фильтр или МШУ. Выпаять R62/R97 и подключиться к дифференциальной паре. Или, проще, поставить внешний фильтр и усилитель перед SMA - тогда паять вообще ничего не нужно.
Улучшить согласование под свой диапазон. Впаять ёмкость в позиции C103/C104. Без анализатора цепей это гадание, но если он есть, полдецибела-децибел выиграть можно.
Защитить вход. Максимальный полезный уровень на входе приёмника около −11 дБм, а абсолютный максимум по даташиту существенно ниже уровней, которые встречаются в эфире рядом с передатчиками. Если планируете работать с антенной, ставьте перед платой аттенюатор или ограничитель - восстановить сгоревший вход трансивера в корпусе BGA 196 вы не сможете.
Глава 5. Передающий тракт TX и внешний гетеродин
Лист схемы: RF_TX_OUT_EXT_LO_IN (полный лист).

Этот лист заметно интереснее предыдущего: кроме балуна здесь есть цепь задания постоянного смещения на дросселях и широкополосное заземление на четырёх конденсаторах разных номиналов. Плюс отдельный вход внешнего гетеродина, у которого своя история.
Выходная цепь передатчика
Состав цепи на примере TX1 (для TX2 всё аналогично):
Элемент |
TX1 |
TX2 |
Что делает |
Дроссели задания смещения |
L7, L8 - 43 нГн |
L9, L10 - 43 нГн |
Подают 1.8 В на выход, не пропуская ВЧ в цепь питания |
Развязка по питанию |
C125, C132 - 100 нФ |
C133, C142 - 100 нФ |
Заземляют питающий конец дросселя по ВЧ |
Дифференциальный конденсатор |
C127, не установлен |
C137, не установлен |
Посадочное место под подстройку |
Балун |
T6 TCM1-83X-1+ |
T8 TCM1-83X-1+ |
Симметричный вход → несимметричный выход |
Широкополосное заземление первичной обмотки |
C128 75 пФ, C129 27 пФ, C130 10 пФ, C131 51 пФ |
C138 75, C139 27, C140 10, C141 51 пФ |
Заземление «холодного» конца в широкой полосе |
Разделительный конденсатор |
C126 18 пФ |
C136 18 пФ |
Отсекает постоянную составляющую |
Разъём SMA |
JP6 |
JP7 |
Выход сигнала |
Зачем дроссели на 1.8 В
Выходной каскад передатчика ADRV9009 - токовый: он задаёт ток, а напряжение на выводе должен обеспечить внешний источник. Отсюда пара дросселей, которые подтягивают оба вывода дифференциального выхода к рельсу VOUT4_1V8. Индуктивность 43 нГн выбрана как компромисс: для постоянного тока это почти закоротка (сопротивление обмотки единицы ом), а для ВЧ-сигнала - высокий импеданс, который не шунтирует полезный сигнал.
Насколько высокий, считается легко: XL = 2πfL. Для дифференциального сигнала оба дросселя работают последовательно, то есть эффективная индуктивность 86 нГн:
Частота |
XL дифференциально |
75 МГц |
40 Ом |
200 МГц |
108 Ом |
500 МГц |
270 Ом |
1 ГГц |
540 Ом |
6 ГГц |
3.2 кОм |
На высоких частотах дроссели практически не влияют. А на 75 МГц 40 Ом параллельно 50-омной нагрузке - это уже серьёзный шунт, который забирает половину мощности.
Конденсаторы C125/C132 по 100 нФ на питающем конце каждого дросселя нужны, чтобы ВЧ-сигнал, который всё-таки просачивается через дроссель, уходил на землю, а не в общую цепь 1.8 В. Иначе передатчик через питание влиял бы и на второй канал, и на приёмник.
Зачем четыре конденсатора вместо одного
C128+C129+C130+C131 = 75 + 27 + 10 + 51 = 163 пФ, все включены параллельно между «холодным» концом первичной обмотки балуна и землёй. Возникает вопрос: почему не поставить один конденсатор на 160 пФ?
Потому что у реального конденсатора есть паразитная последовательная индуктивность выводов и корпуса, из-за которой на определённой частоте (собственный резонанс, SRF) он перестаёт быть конденсатором и становится индуктивностью. Чем больше ёмкость при том же типоразмере, тем ниже SRF. Конденсатор на 75 пФ хорошо работает на низких частотах, но выше своего резонанса перестаёт заземлять. Конденсатор на 10 пФ имеет резонанс существенно выше и подхватывает верхнюю часть диапазона.
Ставя четыре номинала веером, разработчик получает низкий импеданс на землю от сотен мегагерц до нескольких гигагерц. Приём стандартный для широкополосной ВЧ-схемотехники, и та же логика объясняет пару 27 + 10 пФ в приёмном тракте - просто там суммарная ёмкость меньше.
Оценка АЧХ выходной цепи
Считаем как в предыдущей главе: выходное сопротивление передатчика по даташиту 50 Ом дифференциально, нагрузка после балуна 1:1 - тоже 50 Ом. Учитываем последовательные C126 (18 пФ) и заземляющие 163 пФ, а также шунтирующее действие дросселей.
Частота |
Потери в цепи |
75 МГц |
6.11 дБ |
100 МГц |
3.21 дБ |
200 МГц |
0.49 дБ |
300 МГц |
0.17 дБ |
500 МГц |
0.05 дБ |
1 ГГц и выше |
менее 0.01 дБ |
Картина принципиально отличается от приёмного тракта. Выше 200 МГц потерь практически нет - согласование 50 на 50 идеальное, реактивности пренебрежимо малы. А ниже 200 МГц спад резкий и глубокий: 6 дБ на 75 МГц. Причины складываются: последовательный конденсатор 18 пФ даёт 118 Ом реактивности, а дроссели шунтируют выход сопротивлением 40 Ом.
Тот же расчёт объясняет, почему заявленная максимальная мощность 9 дБм на частотах 75–600 МГц на разъёме SMA этой платы не получится. Вычитаем 6 дБ цепи и 1.6 дБ балуна - остаётся около 1.5 дБм. На частотах выше 600 МГц ситуация лучше: там из 7 дБм теряется только 1.2–1.3 дБ балуна.
Оговорки те же: балун идеальный, выходное сопротивление резистивное, паразитные параметры не учтены. Порядок величин расчёт передаёт верно, точные значения нужно измерять.
Модификация под низкие частоты, если нужна: C126/C136 заменить на 1 нФ, дроссели L7…L10 - на 470 нГн или 1 мкГн. Заземляющий веер 163 пФ можно оставить, он уже достаточно велик. После такой переделки верхняя граница просядет (дроссель большей индуктивности имеет более низкий собственный резонанс), поэтому это именно перестройка под диапазон, а не улучшение.
Вход внешнего гетеродина: тут есть ловушка

Отдельный блок на листе подписан RX EXT LO IN/OUT. Состав простой: трёхконтактный разъём SMA RF1 (сигнал и две земли), балун T7 типа HHM1595A1 производства TDK, и два конденсатора C134/C135 по 100 пФ на симметричной стороне. Дальше пара RF_EXTLO_P/RF_EXTLO_N идёт на выводы B7/B8 трансивера.
Зачем он нужен. По умолчанию ADRV9009 генерирует гетеродин внутренним синтезатором. Но иногда нужен внешний: чтобы синхронизировать несколько плат от одного источника, чтобы получить фазовый шум лучше внутреннего, или чтобы работать с частотным планом, который внутренний синтезатор не покрывает.
Важное правило из документации ADI: внешний гетеродин должен быть вдвое выше желаемой частоты настройки. Внутренние синтезаторы всегда работают в диапазоне 6…12 ГГц независимо от частоты настройки, и при внешнем гетеродине надо подавать частоту 2 × fRF. То есть для приёма на 2 ГГц нужно подать 4 ГГц. Кроме того, внешний источник обязан быть фазово привязан к тактовой частоте устройства, а модуль (modulus) внешнего источника надо выставить равным 8 386 560 - то же значение, что у внутреннего.
А теперь ловушка. Смотрим параметры балуна T7:
Параметр HHM1595A1 |
Значение |
Диапазон частот |
3000 … 8000 МГц |
Импеданс |
50 Ом несимметричный / 100 Ом симметричный |
Вносимые потери |
не более 1.5 дБ |
Фазовый баланс |
180° ± 20° |
Амплитудный баланс |
0 дБ ± 2.5 дБ |
Обратные потери |
не менее 8 дБ |
Корпус |
0805 |
Балун работает от 3 ГГц. С учётом правила «гетеродин вдвое выше частоты настройки» получаем, что вход внешнего гетеродина на этой плате практически применим только для частот настройки примерно от 1.5 до 4 ГГц. Ниже 1.5 ГГц (гетеродин ниже 3 ГГц) балун вне своего диапазона; выше 4 ГГц (гетеродин выше 8 ГГц) - тоже. Полный диапазон трансивера 75 МГц – 6 ГГц через этот вход недоступен.
Вторая часть ловушки - требования к балуну со стороны ADI. В документации прямо сказано: комбинация амплитудного и фазового баланса балуна влияет на квадратурную ошибку, и рекомендуемый минимум - не более 5 градусов дифференциальной фазовой ошибки, 1 дБ амплитудной, 2 % ошибки коэффициента заполнения и чётные гармоники ниже −50 дБн.
Гарантированные пределы HHM1595A1 - 20 градусов и 2.5 дБ - этим требованиям не соответствуют. Типовые значения на конкретной частоте в середине диапазона обычно существенно лучше пределов, так что на практике всё может работать нормально. Но если вы используете внешний гетеродин и видите, что подавление зеркального канала хуже ожидаемого, начинать разбираться стоит именно с балуна.
Тот же разъём как выход
Название IN/OUT не случайно: выводы RF_EXT_LO_I/O± могут работать и как выход, отдавая внутренний гетеродин наружу. Частота на выходе - от fVCO/2 до fVCO/64. Например, при настройке на 4 ГГц внутренний VCO работает на 8 ГГц, и в режиме деления на 2 на выводах будет 4 ГГц.
Но ADI сопровождает это существенной оговоркой: выход внешнего гетеродина предусмотрен только для тестовых целей и не одобрен для последовательного включения нескольких устройств (daisy-chain). То есть построить синхронную многоканальную систему, раздавая гетеродин с одной платы на другие через этот разъём, официально нельзя. Для синхронизации нескольких ADRV9009 предусмотрен другой механизм - multichip phase synchronization через общую тактовую частоту и SYSREF, и именно им и надо пользоваться.
Требования к внешним компонентам в режиме выхода: дифференциальные линии 50 Ом, разделительный конденсатор с реактивностью менее 25 Ом на рабочей частоте и дифференциальная нагрузка 50 Ом. Установленные на плате 100 пФ дают 1.6 Ом на 1 ГГц и 16 Ом на 100 МГц - условие выполняется с запасом во всём практически интересном диапазоне.
Сводка по ВЧ-фронтенду
Собрав главы 4 и 5, получаем следующую картину по всем восьми ВЧ-портам:
Порт |
Разъём |
Балун |
Рабочий диапазон цепи |
Комментарий |
RX1 |
JP2 |
T2 установлен |
примерно от 300 МГц |
Ниже 200 МГц заметные потери |
RX2 |
JP3 |
T3 установлен |
примерно от 300 МГц |
То же |
ORX1 |
JP4 |
T4 помечен NC |
примерно от 300 МГц |
Балун может отсутствовать |
ORX2 |
JP5 |
T5 помечен NC |
примерно от 300 МГц |
Балун может отсутствовать |
TX1 |
JP6 |
T6 установлен |
от 200 МГц |
Выше 200 МГц потери минимальны |
TX2 |
JP7 |
T8 установлен |
от 200 МГц |
То же |
EXT LO |
RF1 |
T7 HHM1595A1 |
3 … 8 ГГц |
Значит частота настройки 1.5 … 4 ГГц |
REF CLK |
JP1 |
T1 MABA-007159 |
см. главу 6 |
Вход внешней опорной частоты |
Главный практический вывод: вся ВЧ-часть платы рассчитана на сотовые диапазоны, примерно от 400 МГц до 6 ГГц. Это ровно то применение, под которое ADI делала оригинал: LTE, 5G NR, тестирование базовых станций. Если ваша задача лежит в этом диапазоне, плату можно брать как есть. Если нужны частоты ниже, потребуется замена пассивных элементов во входных и выходных цепях - работа несложная, но её надо запланировать.
Глава 6. Тактирование: AD9528, VCXO и SYSREF
Лист схемы: CLOCK_GENERATION (полный лист).
Самый насыщенный лист во всей схеме и одновременно то место, откуда растёт большинство проблем при запуске. Если ВЧ-часть можно понять, глядя на пять компонентов, то здесь их несколько десятков, и каждый выполняет конкретную функцию в цепочке, от которой зависит, поднимется ли интерфейс JESD204B вообще.
Зачем на плате отдельная микросхема тактирования
Казалось бы, трансиверу нужен один тактовый сигнал. Зачем целый генератор с двумя PLL, внешним VCXO и четырьмя выходами?
Причина - в требованиях JESD204B subclass 1. Этот подкласс обеспечивает детерминированную задержку: гарантию, что от момента оцифровки отсчёта до появления его на выходе FPGA пройдёт строго определённое, повторяемое от запуска к запуску число тактов. Без этого невозможны ни синхронный многоканальный приём, ни фазированные решётки, ни точные измерения задержки.
Достигается детерминированная задержка сигналом SYSREF - общим импульсом, который приходит одновременно на трансивер и на FPGA и сбрасывает их внутренние счётчики кадров в одну и ту же точку. Чтобы это работало, SYSREF должен быть согласован по фазе с тактовым сигналом обоих устройств, а сами тактовые сигналы должны быть получены из одного источника.
Отсюда и вытекает состав: нужен генератор, который отдаёт минимум четыре согласованных сигнала - тактовый и SYSREF для трансивера, опорный и SYSREF для FPGA. Именно это делает AD9528.
Второе требование - низкий фазовый шум. Тактовый сигнал ADRV9009 умножается внутренним PLL до почти 10 ГГц, и любой джиттер умножается вместе с ним. Отсюда двухкаскадная архитектура AD9528: первый PLL чистит входную опору, второй умножает низкошумящий VCXO.
Схема тактирования целиком

AD9528: что это за микросхема

Параметр |
Значение |
Архитектура |
Двухкаскадный PLL: PLL1 (чистка джиттера) + PLL2 (умножение) |
Встроенный VCO (PLL2) |
3.450 … 4.025 ГГц, крутизна 48 МГц/В |
Максимальная частота фазового детектора |
275 МГц |
Выходов всего |
14, конфигурируемые LVDS или HSTL |
Быстрые выходы |
6 выходов до 1.25 ГГц (OUT0…OUT3, OUT12, OUT13) |
Остальные выходы |
8 выходов до 1 ГГц |
Генератор SYSREF |
Встроенный: одиночный импульс, N импульсов или непрерывный |
Абсолютный джиттер выхода |
менее 160 фс на 122.88 МГц (полоса 12 кГц … 20 МГц) |
Управление задержкой |
Грубая цифровая по каждому каналу + точная аналоговая с шагом 31 пс |
Корпус |
LFCSP 72 вывода |
Ключевая идея двухкаскадной схемы. PLL2 умножает частоту внешнего VCXO до 3.45–4.025 ГГц, и качество результата определяется фазовым шумом именно VCXO, а не входной опоры. PLL1 при этом занимается другим: он медленно подстраивает частоту VCXO под внешнюю опору, компенсируя уход кварца. Полоса PLL1 узкая - вне неё шум входной опоры отфильтровывается. В итоге на выходе получаем частоту, привязанную к внешнему стандарту с точностью до долей ppm, но с фазовым шумом хорошего кварцевого генератора.
Расчёт частот
Установленный на плате VCXO даёт 122.88 МГц. Дальше цепочка выглядит так:
Этап |
Значение |
Откуда известно |
Частота VCXO |
122.88 МГц |
Маркировка ABLJO-V-122.880MHZ-T2 |
Умножение в PLL2 |
× 30 |
Даёт 3686.4 МГц, попадает в диапазон VCO 3.45…4.025 ГГц |
Частота VCO |
3686.4 МГц |
Типовая конфигурация из даташита AD9528 |
Делитель VCO |
÷ 3 → 1228.8 МГц |
Регистр 0x0204 = 0x03 в комплектном коде |
Канальные делители |
÷ 10 → 122.88 МГц |
Регистры 0x0302, 0x0305, 0x0308, 0x030B, 0x0326, 0x0329 = 0x09 |
Выходная частота |
122.88 МГц |
На всех задействованных выходах |
Совпадение с типовой конфигурацией из даташита AD9528 полное: там описан режим «REFA дифференциальный на 122.88 МГц, fVCXO = 122.88 МГц однополярный, fVCO = 3686.4 МГц, делитель VCO = 3». Ровно та схема, что реализована на плате.
Все канальные делители в комплектном коде выставлены в одно и то же значение 0x09, то есть деление на 10. Это означает, что и тактовый сигнал трансивера, и опора для GT-трансиверов FPGA имеют одинаковую частоту 122.88 МГц. Что удобно: одна частота на всю систему.
Какие выходы куда идут
Из четырнадцати выходов AD9528 используются четыре. Остальные на схеме помечены крестиками - не подключены.
Выход |
Выводы |
Куда идёт |
Назначение |
OUT13 |
25, 26 |
DEV_CLK_IN_P/N → выводы E7/E8 трансивера |
Тактовый сигнал ADRV9009, 122.88 МГц |
OUT12 |
28, 29 |
SYSREF_IN_P/N → выводы K3/K4 трансивера |
SYSREF для трансивера |
OUT1 |
64, 65 |
FPGA_REF_CLK_P/N → пара GBTCLK0_M2C разъёма FMC |
Опорная частота для GT-трансиверов FPGA, 122.88 МГц |
OUT3 |
58, 59 |
FPGA_SYSREF_P/N → пара LA00_CC разъёма FMC |
SYSREF для FPGA |
Обратите внимание на выбор выходов: OUT1, OUT3, OUT12, OUT13 - все из шести «быстрых» каналов с максимальной частотой 1.25 ГГц. Разработчик выбрал их не случайно, оставив медленные каналы неиспользованными.
Про пару GBTCLK0_M2C стоит сказать отдельно, потому что это важно для выбора носителя. Стандарт VITA 57.1 предусматривает на разъёме HPC две выделенные пары для тактирования гигабитных трансиверов: GBTCLK0_M2C (выводы B20/B21) и GBTCLK1_M2C. Плата использует нулевую. На носителе эта пара должна быть разведена на вывод MGTREFCLK соответствующего квада GT - иначе опорная частота до трансиверов просто не дойдёт. Не все платы с разъёмом FMC HPC это делают.
Про SYSREF для FPGA: он идёт на пару LA00_P_CC/LA00_N_CC (выводы G6/G7). Суффикс _CC означает clock capable - эта пара на носителе должна попадать на вывод, способный работать как тактовый (MRCC/SRCC). Опять же, обязательное требование, которое не всякий носитель выполняет.
Вход внешней опорной частоты
Блок REF CLK на схеме: разъём SMA JP1 → конденсатор C39 100 нФ → балун T1 типа MABA-007159-000000 → дифференциальная пара → входы REFA (выводы 2, 3) генератора.

Параметры балуна T1:
Параметр MABA-007159-000000 |
Значение |
Диапазон частот |
4.5 … 3000 МГц |
Коэффициент трансформации |
1 : 1, 50 Ом |
Вносимые потери |
0.32 дБ типично (до 1 дБ на частотах до 1 ГГц) |
Амплитудный разбаланс |
до 1 дБ |
Фазовый разбаланс |
до 20 градусов |
Корпус |
керамика 3.81 × 3.81 × 2.60 мм |
Здесь, в отличие от входа внешнего гетеродина, выбор компонентов удачный. Балун работает от 4.5 МГц, разделительный конденсатор 100 нФ на низких частотах тоже не мешает. Значит вход опорной частоты пригоден для всех типовых внешних стандартов: 10 МГц от рубидиевого или GPS-стандарта, 30.72 МГц из телекоммуникационного оборудования, 100 МГц от лабораторного генератора.
Дальше по цепи стоит набор посадочных мест для настройки согласования: R30 и R33 по 24.9 Ом (помечены NC) для синфазного термирования, R31 100 Ом (NC) для дифференциального, R35 49.9 Ом (NC) на несимметричной стороне. Установлен только R32 - 100 Ом дифференциально после развязывающих конденсаторов C38/C40, прямо на входе REFA. Это правильное место для термирования, у приёмника.
Вход REFB (выводы 5, 6) и вывод выбора опоры REF_SEL (вывод 4) не задействованы - второй канал опоры на плате не разведён. Возможности автоматического переключения между двумя опорами, которую AD9528 поддерживает, здесь нет.
В комплектном bare-metal коде таблица регистров подписана комментарием //30.72MHz ref clock - то есть PLL1 настроен на входную опору 30.72 МГц. Если вы подадите на JP1 другую частоту, делители PLL1 придётся пересчитать. А если внешнюю опору не подавать вовсе, PLL1 не захватится, и генератор останется в режиме удержания (holdover) - в таблице есть регистр 0x0106 = 0x8C с пометкой //holdover, и отдельная функция AD9528_holdover_en(). В этом режиме частота определяется только собственной точностью VCXO.
VCXO: почему именно он определяет качество системы
Y1 - управляемый напряжением кварцевый генератор ABLJO-V-122.880MHZ-T2 производства Abracon:

Параметр |
Значение |
Частота |
122.88 МГц |
Тип выхода |
LVCMOS, однополярный |
Питание |
3.3 В (от рейла 3V3_VCO) |
Ток потребления |
до 30 мА |
Интегральный фазовый джиттер |
75 фс типично, 100 фс максимум (12 кГц … 20 МГц) |
Диапазон подстройки частоты |
не менее ±45 ppm |
Стабильность по температуре |
±25 ppm (−40…+85 °C) |
Стабильность со всеми эффектами и старением |
±40 ppm |
Диапазон управляющего напряжения |
0 … 3.3 В, центр 1.45…1.85 В |
Импеданс порта управления |
10 кОм |
Корпус |
14.3 × 8.7 мм - заметно крупный |
Джиттер 75 фс - вот главная цифра. Именно она, а не что-либо ещё в тактовой цепи, определяет достижимое отношение сигнал/шум трансивера на высоких частотах настройки. Технология генератора - кварц на третьей механической гармонике с высокой добротностью, отсюда и крупный корпус: миниатюризация ухудшила бы шумовые характеристики.
Выход у генератора однополярный LVCMOS, а вход VCXO_IN у AD9528 дифференциальный (выводы 11, 12). Схема решает это стандартно: сигнал через развязывающий конденсатор подаётся на один вход, второй сажается на землю по переменному току. В цепи предусмотрен целый набор посадочных мест - R38, R39, R41, R43, R46, C49 помечены NC, установлены R40, R42, R44, R45 (все 0 Ом) и C47 100 нФ.
Отдельно любопытны конденсаторы C42 и C50 (100 нФ, NC), которые подключены от цепей REF_CLK_P/REF_CLK_N к входам VCXO_IN. Это заготовка для другого режима работы: если установить их и снять R44/R45, внешняя опорная частота с SMA пойдёт прямо на вход PLL2, минуя VCXO. Режим одноконтурный (single loop), PLL1 при этом не нужен. Так можно тактировать плату от внешнего низкошумящего источника, полностью исключив собственный кварц. Практический смысл: если у вас есть генератор лучше 75 фс, можно получить характеристики выше штатных.
Управляющее напряжение с вывода VCXO_VT (вывод 8) генератора идёт через R40 (0 Ом) на вывод Vc генератора; C48 0.33 мкФ фильтрует его от шума. Петлевой фильтр PLL1 собран на выводе LF1 (вывод 7): C41 180 пФ параллельно последовательной цепочке R37 10.2 кОм и C44 1 мкФ - классическая схема второго порядка для зарядового насоса. Плюс C43 1 нФ на выводе LF2_CAP и C45 0.47 мкФ на выводе LDO_VCO - цепи внутреннего PLL2 и его стабилизатора.
Хитрость, которая делает запуск возможным
Есть в этой схеме одно неочевидное, но принципиальное решение. Смотрим на строчку из даташита AD9528: при включении питания AD9528 подаёт сигнал VCXO напрямую на Output 12 и Output 13, чтобы они работали тактовыми сигналами готовности при включении.
А теперь смотрим, что подключено на плате к OUT12 и OUT13: SYSREF и тактовый сигнал ADRV9009. То есть сразу после подачи питания, ещё до какой-либо настройки по SPI, трансивер получает на вход тактирования 122.88 МГц прямо с VCXO.
Это не случайность, а необходимость. ADRV9009 нужен тактовый сигнал уже на этапе первичной инициализации: без него не работает внутренний тактовый PLL, не запускается встроенное ARM-ядро, не выполняются калибровки. Если бы тактирование появлялось только после настройки AD9528, возникла бы курица с яйцом. Разработчики AD9528 решили эту проблему на уровне микросхемы, а разработчики платы правильно этим воспользовались, выбрав именно OUT12 и OUT13.
Практический вывод для отладки: если после подачи питания на выводах DEV_CLK_IN трансивера нет 122.88 МГц, проблема не в настройке по SPI. Ищите питание AD9528 (рейл 3V3_CLK), питание VCXO (рейл 3V3_VCO) или сигнал сброса RESET.
SYSREF: генерация и запрос
SYSREF формирует встроенный в AD9528 генератор, который умеет три режима: одиночный импульс, заданное число импульсов (N-shot) и непрерывный сигнал. Внешние входы SYSREF_IN (выводы 70, 71) на плате не задействованы - на схеме помечены крестиками. То есть SYSREF рождается здесь и раздаётся отсюда, внешний источник не предусмотрен.
Запуск импульса можно инициировать двумя путями. Первый - по SPI, для этого в комплектном коде есть функции AD9528_send_sysref_pulse() (запись 0x013E03) и AD9528_update_sysref_pulse(). Второй - аппаратно, сигналом на вывод SYSREF_REQ (вывод 57). На плате этот вывод заведён на цепь CLK_SYSREF_REQUEST, которая через транслятор уровней приходит с разъёма FMC (пара LA26_N). Резистор R36 10 кОм подтягивает её к земле, чтобы при неинициализированном выводе FPGA запрос не срабатывал случайно.
Аппаратный запрос предпочтительнее: FPGA может выдать SYSREF в точно нужный момент своей логики, а не когда до него дойдёт очередь в потоке SPI-транзакций. В комплектном референсном проекте используется именно он - в конфигурации Talise стоит externalSysref = 1, а сигнал ad9528_sysref_req выведен в проекте FPGA на вывод LA26_N.
Замечание про термирование SYSREF
Здесь есть деталь, на которую стоит посмотреть внимательно. На плате между FPGA_SYSREF_P и FPGA_SYSREF_N установлен резистор R34 100 Ом - дифференциальное согласование. При этом в файле констрейнтов комплектного FPGA-проекта для этой же пары указано DIFF_TERM TRUE, то есть включено внутреннее согласование 100 Ом в самой FPGA.
Два согласования по 100 Ом параллельно дают 50 Ом. Для LVDS-драйвера, рассчитанного на 100-омную нагрузку, это вдвое меньшая амплитуда на приёмнике. Работать, скорее всего, будет - LVDS-приёмники имеют запас по чувствительности, а AD9528 позволяет программно увеличить выходной ток. Но если при отладке JESD204B вы увидите нестабильный захват или срывающуюся детерминированную задержку, стоит проверить осциллографом амплитуду SYSREF и при необходимости либо выпаять R34, либо снять DIFF_TERM в констрейнтах.
Такая же ситуация может возникнуть с сигналами tx_sync и rx_sync - в констрейнтах для них тоже стоит DIFF_TERM. Но там на плате модуля дополнительных резисторов нет, так что конфликта не возникает.
Согласование логических уровней
Тонкий момент, который легко упустить. AD9528 питается от 3.3 В, и его цифровые выводы работают на уровнях 3.3 В. А сигналы управления приходят с FPGA через разъём FMC на напряжении VADJ - 1.8 или 2.5 В. Напрямую соединять нельзя: FPGA не выдаст 3.3 В, а вход AD9528 может не распознать 1.8 В как логическую единицу.


Решение - три микросхемы:
Микросхема |
Тип |
Что переводит |
IC5 |
ADG3304SRU-EP-RL7, 4 канала |
SPI_CLK, SPI_DIN, SPI_CS1, FMC_SYSREF_REQUEST из домена VADJ в домен 3.3 В |
IC4 |
ADG3301BKSZ, 1 канал |
FMC_CLK_RESETB → CLK_RESETB (сброс генератора) |
IC3 |
NC7WV125K8X, два буфера с третьим состоянием |
Сводит линии MISO от AD9528 и ADRV9009 на общую линию SPI_DOUT |
У обоих трансляторов вывод VCCA подключён к VDD_IF (то есть к VADJ), а VCCY - к 3V3_CLK. Выводы разрешения EN подтянуты к VDD_IF, то есть трансляторы работают всегда, когда есть напряжение на FMC.
А вот схема на IC3 заслуживает внимания, потому что решает конкретную задачу: два устройства на одной шине SPI, но у ADRV9009 и AD9528 разные напряжения логики. ADRV9009 работает на уровнях VADJ, AD9528 - на 3.3 В. Линии SCLK и MOSI можно просто раздать (ADRV9009 напрямую, AD9528 через транслятор), а вот MISO надо свести обратно в одну линию.
Делается это так: сигнал SPI_DOUT_9528 (от AD9528, уже приведённый к нужному уровню) идёт на один буфер, SPI_DOUT_DUT (от ADRV9009) - на другой, оба буфера выходами объединены на линию SPI_DOUT. Разрешением каждого буфера управляет соответствующий сигнал выбора микросхемы: SPI_CS1 открывает канал от AD9528, SPI_CS0 - от ADRV9009. Когда выбор не активен, буфер в третьем состоянии и не мешает. Резисторы R51, R52 (0 Ом) - точки разрыва для отладки. Резисторы R53, R54 по 10 кОм подтягивают оба сигнала выбора к VDD_IF, чтобы при неинициализированных выводах FPGA обе микросхемы были не выбраны.
Обратите внимание на распределение сигналов выбора, оно пригодится при написании драйвера: SPI_CS0 адресует ADRV9009, SPI_CS1 - AD9528. В комплектном FPGA-проекте они выведены на LA09_P и LA09_N соответственно.
Индикация и развязка питания
Два светодиода STATUS1 и STATUS2 подключены к выводам STATUS0/STATUS1 (55, 56) генератора через буфер IC2 типа NC7WZ16P6X и токоограничивающие резисторы R47/R48 по 330 Ом. Буфер нужен, чтобы не нагружать выводы микросхемы током светодиодов. Резисторы R49/R50 по 10 кОм подтягивают сигналы к земле.

Что именно показывают светодиоды, определяется программно: выводы STATUS0/STATUS1 в AD9528 мультиплексированы и могут отображать состояние захвата PLL1, PLL2, режим удержания и ещё несколько десятков внутренних состояний. В типовой конфигурации на них выводят захват PLL1 и PLL2, и тогда два горящих светодиода - первый признак того, что тактирование в порядке. Полезнейшая вещь при отладке: видно с одного взгляда, без осциллографа.
Отдельный блок на листе подписан FILER (ещё одна опечатка, должно быть FILTER) и содержит развязку питания генератора: конденсатор C57 1 мкФ и девятнадцать конденсаторов по 100 нФ (C58…C76) на рельсе 3V3_CLK. По одному на каждый вывод питания AD9528 плюс запас. Для микросхемы с таким количеством выводов питания это нормальная практика: каждый вывод развязывается индивидуально и максимально близко к корпусу.

Питание тактовой части приходит с рейла 3.3 В через ферритовые бусины: L5 (42 Ом) формирует 3V3_CLK для генератора, L6 (30 Ом) - 3V3_VCO для VCXO. Разделение осознанное: генератор с его импульсными цифровыми токами не должен наводить помехи на цепь питания VCXO, от которого зависит фазовый шум всей системы. Подробнее про это в главе 8.

Сброс генератора
Вывод RESET (вывод 19) заведён на цепь CLK_RESETB и подтянут резистором R28 10 кОм к 3V3_CLK. То есть по умолчанию сброс не активен, и генератор запускается сам. Активный сброс подаётся с FPGA через транслятор IC4 (сигнал FMC_CLK_RESETB с пары LA26_P).
Порядок инициализации в комплектном коде такой: сначала выставляются выводы сброса через GPIO, потом инициализируется SPI, потом записывается таблица регистров AD9528, потом опрашивается регистр 0x508 до появления признаков захвата обоих PLL, и только после этого выдаётся импульс SYSREF и начинается инициализация трансивера. Порядок важен, и нарушать его нельзя - подробнее в главе 12.
Глава 7. Цифровой интерфейс: JESD204B, SPI, GPIO
Лист схемы: JESD_INTERFACE_GPIO (полный лист).

Этот лист описывает всё, чем трансивер общается с внешним миром по цифре: восемь высокоскоростных последовательных линий, четыре сигнала синхронизации, шину SPI, тактовый вход, сигналы разрешения каналов и обвязку служебных выводов. Схемотехники здесь мало - в основном это карта соединений. Зато смысла много, и именно её надо понимать, чтобы написать драйвер или адаптировать проект FPGA.
Высокоскоростные линии JESD204B
Восемь дифференциальных пар: четыре на приём в трансивер, четыре на выход.
Линия |
Выводы |
Направление |
Куда идёт на разъёме FMC |
SERDOUT0 |
P6 (−), P7 (+) |
Из трансивера в FPGA |
DP0_M2C |
SERDOUT1 |
P4 (−), P5 (+) |
Из трансивера в FPGA |
DP1_M2C |
SERDOUT2 |
N5 (−), N6 (+) |
Из трансивера в FPGA |
DP2_M2C |
SERDOUT3 |
N3 (−), N4 (+) |
Из трансивера в FPGA |
DP3_M2C |
SERDIN0 |
N12 (−), N13 (+) |
Из FPGA в трансивер |
DP0_C2M |
SERDIN1 |
N10 (−), N11 (+) |
Из FPGA в трансивер |
DP1_C2M |
SERDIN2 |
P13 (−), P14 (+) |
Из FPGA в трансивер |
DP2_C2M |
SERDIN3 |
P11 (−), P12 (+) |
Из FPGA в трансивер |
DP3_C2M |
Электрически это CML (current mode logic) - стандартная для гигабитных интерфейсов дифференциальная логика с токовым управлением. Питается серилайзер от отдельного рейла VDDA1P3_SER (выводы N8, P8), десерилайзер - от VDDA1P3_DES (N9, P9). Оба 1.3 В, оба на схеме заведены на общий рейл VOUT2_1V3_DIG через отдельные нулевые резисторы, что позволяет при отладке разорвать питание и измерить ток именно по этим цепям.
Развязывающие конденсаторы по 100 нФ на каждой линии стоят не здесь, а на листе 7, рядом с разъёмом FMC (C79…C98). Это правильно с точки зрения ВЧ: развязка ставится как можно ближе к разъёму, чтобы не создавать неоднородность импеданса в середине линии. Подробнее в главе 9.
Обратите внимание на важную деталь: на плате разведены все восемь линий. То есть никаких ограничений по конфигурации JESD204B схема не накладывает, любой профиль из таблиц главы 2 поддерживается. Ограничения приходят только от платы-носителя.
Сигналы синхронизации: кто кому выдаёт SYNC
Здесь легко запутаться, поэтому разберём внимательно. В JESD204B сигнал SYNC~ всегда идёт от приёмника к передатчику: приёмник им сообщает, что готов принимать или что потерял синхронизацию и требует пересинхронизации.
У ADRV9009 два линка в каждую сторону, и потому четыре сигнала:
Сигнал |
Выводы |
Направление |
Для какого линка |
Пара FMC |
SYNCOUTB0 |
M13 (−), M14 (+) |
Выход трансивера |
Deframer A: данные передатчика идут из FPGA в трансивер, трансивер - приёмник |
LA02 |
SYNCOUTB1 |
L13 (−), L14 (+) |
Выход трансивера |
Deframer B - в комплектной конфигурации не используется |
LA24 |
SYNCINB0 |
M3 (−), M4 (+) |
Вход трансивера |
Framer A: данные приёмника идут в FPGA, FPGA - приёмник |
LA03 |
SYNCINB1 |
L3 (−), L4 (+) |
Вход трансивера |
Framer B (наблюдательный приёмник) |
LA25 |
Мнемоника простая: OUT в названии - трансивер выдаёт (значит он принимает данные, то есть это передающий тракт), IN - трансивер принимает (значит он отдаёт данные, то есть это приёмный тракт). В комплектном FPGA-проекте эти сигналы названы соответственно tx_sync, rx_sync и orx_sync, что подтверждает распределение.
SYNCOUTB1 разведён до разъёма FMC, но в комплектной конфигурации Talise второй деформатор отключён (M = 0), так что сигнал не используется. Если вам понадобится второй передающий линк - линия есть.
Все четыре сигнала - дифференциальные LVDS. Хотя JESD204B допускает и однопроводное CMOS-исполнение SYNC~, на этой плате оно дифференциальное, что для скоростей порядка сотен мегагерц правильнее.
Ещё один сигнал в этом блоке: SYSREF_IN на выводах K3 (+), K4 (−). Приходит с выхода OUT12 генератора AD9528, разобранного в главе 6. Тоже LVDS - в конфигурации Talise за это отвечает параметр sysrefLvdsMode = 1.
Тактовый вход трансивера

Тактовый сигнал приходит с выхода OUT13 генератора на выводы REF_CLK_IN+/REF_CLK_IN− (E7, E8). В цепи три элемента:
C99, C100 по 0.1 мкФ - развязка по постоянному току, ставятся непосредственно перед выводами микросхемы
R73 100 Ом - дифференциальное согласование
Небольшая тонкость размещения: по схеме R73 включён между DEV_CLK_IN_P и DEV_CLK_IN_N, то есть до развязывающих конденсаторов, со стороны генератора. Классическая практика - ставить согласующий резистор непосредственно у приёмника, после развязки. Здесь получилось наоборот: резистор нагружает линию до конденсаторов, а сам вход трансивера остаётся без внешнего согласования (в расчёте на внутреннее). На практике при длине линии в несколько сантиметров это несущественно, но знать стоит.
Название выводов, кстати, сбивает с толку: REF_CLK_IN - это не «опорная частота» в смысле внешнего эталона, а именно тактовый сигнал устройства (device clock), от которого работает внутренний тактовый PLL. Внешний эталон подаётся на AD9528, а не сюда.
Шина SPI
Четыре линии, всё стандартно:
Сигнал |
Вывод |
Имя вывода |
SPI_CLK |
K9 |
SCLK |
SPI_DIN |
J9 |
SDIO |
SPI_DOUT_DUT |
J10 |
SDO |
SPI_CS0 |
K10 |
CSB |
Обратите внимание на имя SDIO у линии данных от контроллера: ADRV9009 поддерживает как четырёхпроводной режим (отдельные SDIO и SDO), так и трёхпроводной, где SDIO работает в обе стороны. На плате разведён четырёхпроводной, что проще в реализации и надёжнее.
Линия SPI_DOUT_DUT идёт не напрямую на FMC, а через буфер IC3, где объединяется с линией от AD9528 - это разбиралось в главе 6. Три остальные линии идут на разъём напрямую через нулевые резисторы.
Уровни логики SPI определяются напряжением VDD_INTERFACE, то есть напряжением VADJ на разъёме FMC. Это ещё одно напоминание, почему VADJ критичен.
Сигналы разрешения каналов
Четыре отдельных вывода, по одному на каждый тракт:
Сигнал |
Вывод |
Подтяжка |
Пара FMC |
RX1_ENABLE |
M5 |
R77 10 кОм к земле |
LA13_N |
RX2_ENABLE |
M7 |
R78 10 кОм к земле |
LA14_N |
TX1_ENABLE |
M6 |
R76 10 кОм к земле |
LA13_P |
TX2_ENABLE |
M8 |
R75 10 кОм к земле |
LA14_P |
Зачем отдельные выводы, если каналы можно включать по SPI? Потому что ADRV9009 создан для TDD, где приём и передача чередуются с интервалами в доли миллисекунды. Транзакция по SPI на это время не укладывается, а сигнал на выводе переключается за наносекунды. FPGA дёргает эти линии по своему таймингу и получает точное переключение слотов.
Подтяжка всех четырёх выводов к земле резисторами 10 кОм - это защита от неопределённого состояния. Пока FPGA не сконфигурирована, её выводы находятся в высокоимпедансном состоянии, и без подтяжки на входах трансивера был бы плавающий потенциал. С подтяжкой все каналы гарантированно выключены - в том числе передатчики, что важно: неконтролируемое включение передачи может повредить подключённый к SMA прибор.
Управлять этими выводами можно и программно, через API Talise - функция TALISE_setRxTxEnable(). В комплектном примере используется именно программный путь, а сами линии FPGA держит в известном состоянии через GPIO процессорной системы.
Служебные выводы
Три вывода, обвязка которых прямо предписана даташитом ADRV9009. Плата следует рекомендациям точно.
Вывод |
Что предписывает даташит |
Что на плате |
RBIAS (C14) |
«Соединить с землёй через резистор 14.3 кОм. Резистор должен иметь допуск 1 %. Этот вывод формирует внутренний ток на основе внешнего резистора» |
R80 14.3 кОм на землю |
TEST (J6) |
«Притянуть к земле для нормальной работы» |
R79 1 кОм на землю |
RESET (J4) |
«Подтянуть высоким уровнем через резистор 10 кОм к VDD_INTERFACE» |
R74 10 кОм к VDD_IF |
Про RBIAS стоит понимать, что это не просто «резистор куда-то». Он задаёт эталонный ток для всей аналоговой части микросхемы, и его точность напрямую влияет на характеристики. Отсюда требование 1 % допуска. Если при ремонте или доработке платы вы этот резистор задели - ставьте обратно именно 14.3 кОм с точностью 1 %, а не «примерно 15 кОм».
TEST через 1 кОм, а не напрямую на землю, - потому что этот вывод двойного назначения. Если поднять его в высокий уровень и предварительно выставить на выводах GPIO_0…GPIO_3 код 1001, включается режим JTAG boundary scan. Резистор 1 кОм позволяет при необходимости перебить уровень внешним источником, не выпаивая ничего.
GP_INTERRUPT (J5) - выход прерывания общего назначения. Трансивер им сообщает о внутренних событиях: срыве захвата PLL, перегреве, ошибках JESD204B, завершении калибровок. Разведён на пару LA04_N разъёма FMC. Использовать его не обязательно (статус можно опрашивать по SPI), но в системе, где важна реакция на сбой, это правильный путь.
Что не разведено
Полезно знать, чего на плате нет - это ограничивает возможные применения.
Группа выводов |
Состояние |
Что теряем |
AUXADC_0…AUXADC_3 (F3, F4, F11, E11) |
Заземлены |
Четыре канала вспомогательного 12-битного АЦП. Обычно используются для контроля температуры внешнего усилителя или уровня питания |
GPIO_0…GPIO_18 |
Не подключены |
Девятнадцать низковольтных GPIO. Через них делается управление внешним переключателем антенны, синхронизация с PA, вывод отладочных сигналов |
GPIO_3P3_0…GPIO_3P3_7 |
Не подключены |
Восемь 3.3-вольтовых GPIO. В частности, режим управления внешним аттенюатором по таблице усиления (Rx1 использует GPIO_3P3_0…3, Rx2 - 4…7) |
AUX_SYNTH_OUT (E10) |
Не подключен |
Выход вспомогательного синтезатора |
RF_SYNTH_VTUNE (G9), AUX_SYNTH_VTUNE (P1) |
Не подключены |
Контрольные точки управляющего напряжения синтезаторов |
Из этого следует конкретное ограничение: на плате нет вспомогательного АЦП и почти нет GPIO. Если вы строите систему с внешним усилителем мощности, которому нужно управление по GPIO и контроль температуры через AUXADC, эта плата вам этого не даст. Придётся брать управление на FPGA.
SPI-флеш: зачем она здесь

Единственный по-настоящему неочевидный элемент на плате. Микросхема IC7 типа S25FL208K - это SPI-флеш на 8 Мбит. Она подключена не к FPGA и не к процессору, а к четырём 3.3-вольтовым GPIO трансивера:
Вывод флеш |
Функция флеш |
Подключён к |
1 |
CS# |
GPIO_3P3_8 (вывод D13 трансивера) |
2 |
SO |
GPIO_3P3_11 (вывод E14) |
5 |
SI/IO0 |
GPIO_3P3_10 (вывод D14) |
6 |
SCK |
GPIO_3P3_9 (вывод C13) |
Питание - с рейла 3.3 В, развязка C143 100 нФ. Обратите внимание, что и выводы GPIO_3P3 питаются от того же 3.3-вольтового рельса (вывод VDDA_3P3), так что согласование уровней не требуется.
Как это работает. У ADRV9009 нет аппаратного SPI-мастера на GPIO. Но 3.3-вольтовые GPIO поддерживают режим ручного управления (bitbang): через функцию TALISE_setGpio3v3PinLevel() можно программно выставить любой уровень на любом выводе. То есть протокол SPI эмулируется программно, командами, которые хост посылает трансиверу по его собственному SPI. Обмен получается медленный, но для чтения-записи небольшого объёма данных этого достаточно.
Выбор именно выводов 8…11 не случаен. Настройка режима работы 3.3-вольтовых GPIO в ADRV9009 делается группами по четыре вывода (нибблами), и всего таких групп три: 0–3, 4–7, 8–11. Первые две группы зарезервированы под режим управления внешним аттенюатором по таблице усиления (Rx1 использует 0–3, Rx2 - 4–7). Разработчик занял третью группу, оставив первые две свободными для штатной функции. Аккуратное решение.
Зачем эта флеш нужна на плате, комплектная документация не объясняет, а в bare-metal примере она вообще не используется - единственное обращение к соответствующему API (TALISE_setGpio3v3Oe) закомментировано. Разумные предположения: хранение калибровочных коэффициентов, привязанных к конкретному экземпляру платы; хранение профиля или серийного номера; либо просто демонстрация возможностей 3.3-вольтовых GPIO.
Практический вывод: это готовые 8 Мбит энергонезависимой памяти, доступные вашему ПО, если она вам нужна. Например, чтобы записать в неё результаты заводской калибровки вашего изделия. Только помните, что доступ идёт через двойную эмуляцию (SPI хоста → трансивер → bitbang GPIO → SPI флеш) и работает медленно.
Сводная карта цифровых сигналов
Всё, что уходит с этого листа на разъём FMC, в одной таблице - она пригодится при адаптации проекта FPGA под другой носитель.
Сигнал |
Тип |
Пара или вывод FMC |
SERDOUT0…SERDOUT3 |
Дифференциальные, гигабитные |
DP0_M2C…DP3_M2C |
SERDIN0…SERDIN3 |
Дифференциальные, гигабитные |
DP0_C2M…DP3_C2M |
SYNCOUTB0 |
LVDS, выход модуля |
LA02 |
SYNCOUTB1 |
LVDS, выход модуля |
LA24 |
SYNCINB0 |
LVDS, вход модуля |
LA03 |
SYNCINB1 |
LVDS, вход модуля |
LA25 |
FPGA_SYSREF |
LVDS, выход модуля |
LA00_CC |
FPGA_REF_CLK |
Дифференциальный, тактовый |
GBTCLK0_M2C |
SPI_CLK |
Однопроводной, вход |
LA07_P |
SPI_DIN |
Однопроводной, вход |
LA07_N |
SPI_DOUT |
Однопроводной, выход |
LA08_P |
SPI_CS0 (ADRV9009) |
Однопроводной, вход |
LA09_P |
SPI_CS1 (AD9528) |
Однопроводной, вход |
LA09_N |
RESETB (ADRV9009) |
Однопроводной, вход |
LA04_P |
GP_INTERRUPT |
Однопроводной, выход |
LA04_N |
TEST |
Однопроводной, вход |
LA11_P |
TX1_ENABLE / TX2_ENABLE |
Однопроводные, входы |
LA13_P / LA14_P |
RX1_ENABLE / RX2_ENABLE |
Однопроводные, входы |
LA13_N / LA14_N |
FMC_CLK_RESETB (AD9528) |
Однопроводной, вход |
LA26_P |
FMC_SYSREF_REQUEST |
Однопроводной, вход |
LA26_N |
Итого: восемь гигабитных пар, шесть дифференциальных пар среднего быстродействия и одиннадцать однопроводных линий. Всё умещается в один разъём FMC HPC с большим запасом - задействовано меньше половины доступных линий.
Глава 8. Питание
Листы схемы: POWER_SUPPLY (лист 6) - источник питания, и POWER_DUT_CONNECTIONS (лист 5) - разводка питающих выводов трансивера.
Питание на этой плате - не второстепенная часть, а полноценная инженерная задача. ADRV9009 требует шесть разных напряжений, потребляет до 5.7 Вт, а токи по низковольтным рейлам доходят до 2.1 А. При этом всё это должно уместиться в габарит FMC-модуля и не испортить шумовые характеристики ВЧ-тракта. Разберём, как задача решена.
Ввод 12 вольт
Единственный источник питания платы - линия VCC_12P0V разъёма FMC. Отдельного силового разъёма нет.

Цепь ввода состоит из трёх элементов:
F1 - предохранитель на 2 А
D1 - диод Шоттки SS34 (40 В, 3 А)
Батарея конденсаторов: C31 47 мкФ, C32 22 мкФ, C33…C36 по 10 мкФ
Плюс светодиод POWER1 с резистором R27 2 кОм - индикация наличия питания. Полезная мелочь: сразу видно, дошли ли 12 В до платы.
Диод здесь выполняет две функции. Во-первых, защищает от подачи обратной полярности. Во-вторых - и это важнее - обеспечивает развязку, если 12 В подаются не с FMC, а через колодку JP8, куда выведены 12 В и земля. JP8 подключена к цепи 12 В после диода, так что при внешнем питании ток не потечёт обратно в разъём FMC и не создаст проблем носителю. Это даёт второй способ питания платы: если ваш носитель не выдаёт 12 В по FMC (а такие есть), можно подать их снаружи на JP8.
Расплата за диод - падение напряжения. У SS34 при токе порядка 0.7 А это примерно 0.4 В, то есть на входе регулятора будет около 11.6 В вместо 12. Для ADP5054 с рабочим диапазоном 4.5…15.5 В это несущественно.
Регулятор ADP5054
Все четыре напряжения формирует одна микросхема - IC1 типа ADP5054ACPZ-R7. Это модуль управления питанием, объединяющий четыре независимых понижающих импульсных преобразователя.

Параметр ADP5054 |
Значение |
Входное напряжение |
4.5 … 15.5 В (абсолютный максимум 18 В) |
Каналы 1 и 2 |
Встроенный верхний MOSFET на 6 А + драйвер внешнего нижнего NFET. Ток программируемый: 2, 4 или 6 А |
Каналы 3 и 4 |
Полностью интегрированные, 2.5 А |
Напряжение обратной связи |
0.8 В для всех каналов |
Частота коммутации |
Программируемая, 250 кГц … 2 МГц |
Фазовый сдвиг |
180° между каналами 1–2 и между каналами 3–4 |
Внутренние стабилизаторы |
VREG 5.0 В для драйверов затворов, VDD 3.3 В для управляющей логики |
Тепловое сопротивление |
θJA = 28.4 °C/Вт, θJC = 10.1 °C/Вт |
Корпус |
LFCSP 48 выводов |
Фазовый сдвиг 180° между парами каналов - не мелочь. Он означает, что каналы переключаются не одновременно, а вразнобой, поэтому импульсы тока, потребляемые из входной цепи, распределяются во времени. Результат - вдвое меньшие пульсации на входе и меньше шума по земле. Для платы с ВЧ-трактом это заметное преимущество.
Частота коммутации
Задаётся резистором R3 = 22.1 кОм на выводе RT. Формула из даташита:
R_RT (кОм) = [14822 / f_SW (кГц)] ^ 1.081
Решая обратную задачу для 22.1 кОм, получаем приблизительно 846 кГц.
Выбор осмысленный. Слишком низкая частота потребовала бы больших дросселей, которые не влезут в габарит FMC. Слишком высокая ухудшила бы КПД и, что важнее, приблизила бы спектр помех преобразователя к рабочим частотам. Около 850 кГц - разумная середина: дроссели маленькие, а первая гармоника помехи далеко от всего, что интересует в ВЧ-тракте.
Режим работы: forced PWM
Вывод SYNC/MODE (44) подтянут к внутреннему стабилизатору VREG_5V через нулевой резистор R8, то есть находится в состоянии логической единицы. По даташиту это включает режим принудительной ШИМ (forced PWM) либо автоматическое переключение ШИМ/PSM; при нулевом уровне все каналы работали бы в автоматическом ШИМ/PSM.
Разница принципиальна именно для ВЧ-платы. В режиме энергосбережения (PSM) при малой нагрузке преобразователь снижает частоту коммутации и начинает работать пачками импульсов. КПД при этом растёт, но частота помехи становится непредсказуемой и низкой, и она гуляет по спектру. В режиме принудительной ШИМ частота фиксирована независимо от нагрузки, помеха остаётся на известной частоте и её гармониках, где с ней можно бороться фильтрацией. Для платы, которая измеряет сигналы на уровне −95 дБм, это правильный выбор - даже в ущерб КПД на холостом ходу.
Четыре напряжения и расчёт делителей
Каждый канал имеет резистивный делитель обратной связи. Поскольку напряжение обратной связи у ADP5054 равно 0.8 В, выходное напряжение считается как VOUT = 0.8 × (1 + Rверх / Rниз).
Канал |
Делитель |
Расчёт |
Рельс |
Что питает |
1 |
R2 6.2 кОм / R1 10 кОм |
0.8 × (1 + 6.2/10) = 1.296 В |
VOUT1_1V3_ANLG |
Все аналоговые домены 1.3 В трансивера |
2 |
R7 6.2 кОм / R6 10 кОм |
0.8 × (1 + 6.2/10) = 1.296 В |
VOUT2_1V3_DIG |
Цифровое ядро трансивера |
3 |
R10 75 кОм / R9 24 кОм |
0.8 × (1 + 75/24) = 3.300 В |
VOUT3_3V3 |
3.3 В трансивера, AD9528, VCXO, флеш |
4 |
R12 12.5 кОм / R11 10 кОм |
0.8 × (1 + 12.5/10) = 1.800 В |
VOUT4_1V8 |
ADC/DAC и передатчик трансивера, смещение выходов TX |
Расчётные значения сходятся с требованиями даташита ADRV9009 идеально: 1.3 В при допуске 1.267…1.33 В, 1.8 В при допуске 1.71…1.89 В, 3.3 В при допуске 3.135…3.465 В.
Каждый канал имеет собственную цепь компенсации на выводе COMP: R4+C6+C7 для канала 1, R5+C8 для канала 3, R16+C27 и R18+C28 для остальных. Это стандартная RC-коррекция контура регулирования, номиналы подобраны под конкретные выходные конденсаторы и дроссели.
Дроссели и пульсации тока
Канал |
Дроссель |
Индуктивность |
Скважность |
Расчётные пульсации тока |
1 (1.3 В аналог) |
L1 XFL4020-102ME |
1 мкГн |
0.108 |
1.37 А |
2 (1.3 В цифра) |
L4 XFL4020-102ME |
1 мкГн |
0.108 |
1.37 А |
3 (3.3 В) |
L2 XFL4020-332ME |
3.3 мкГн |
0.275 |
0.86 А |
4 (1.8 В) |
L3 XFL4020-332ME |
3.3 мкГн |
0.150 |
0.55 А |
Расчёт по формуле ΔIL = VOUT × (1 − VOUT/VIN) / (L × fSW) при 846 кГц и 12 В на входе.
Здесь есть на что обратить внимание. Обычная рекомендация - держать пульсации тока в дросселе на уровне 30–35 % от максимального выходного тока. Для каналов 1.3 В при токе нагрузки около 2 А расчётные 1.37 А дают порядка 65–70 %, то есть заметно выше рекомендованного. Это осознанный компромисс: дроссель XFL4020 имеет габарит всего 4 × 4 × 2.1 мм, и увеличить индуктивность без увеличения размера не получится, а места на FMC-модуле нет.
Следствие - повышенные пульсации напряжения на выходе и больший ток через выходные конденсаторы. Компенсируется это ёмкостью: на каждом канале стоят по два-три конденсатора 47–100 мкФ (C2…C5 на первом канале, C11…C13 на втором, C15…C17 на третьем, C21…C23 на четвёртом), а дальше по цепи - ещё десятки конденсаторов на самих доменах трансивера.
Внешний MOSFET и предел тока
Каналы 1 и 2, на которые приходится основная нагрузка, усилены внешним транзистором Q1 типа IRF7313PBF:

Параметр IRF7313PBF |
Значение |
Конфигурация |
Два N-канальных MOSFET в одном корпусе SO-8 |
Напряжение сток-исток |
30 В |
Постоянный ток стока |
6.5 А |
Сопротивление открытого канала |
29 мОм при VGS = 10 В, 46 мОм при 4.5 В |
Рассеиваемая мощность |
2 Вт |
Работает это так: верхний ключ каждого канала находится внутри ADP5054, а нижний - это соответствующий канал Q1, которым микросхема управляет через выводы DL1 и DL2. Смысл в снижении потерь: внешний транзистор с сопротивлением 29 мОм эффективнее встроенного, а два транзистора в одном корпусе SO-8 экономят место на плате.
Отдельная тонкость: выводы DL1/DL2 в ADP5054 выполняют двойную функцию. Помимо управления затвором, при старте микросхема измеряет сопротивление резистора от этого вывода на землю и по нему настраивает порог токовой защиты. На плате стоят R13 и R14 по 22 кОм, что по даташиту соответствует порогу токовой защиты 10.4 А типично (диапазон 7.8…12.4 А).
Это максимальная из трёх доступных настроек (без резистора - 6.9 А, при 47 кОм - 3.8 А, при 22 кОм - 10.4 А). При реальном потреблении по этим рейлам порядка 2 А выбор выглядит избыточным: защита сработает только при токе в пять раз выше рабочего. При коротком замыкании на плате это означает, что ограничение по току не спасёт - сработает предохранитель F1 на входе, но уже после того, как через цепь длительно пройдёт значительный ток. При доработках платы это стоит учитывать.
Включение каналов
У каждого канала свой вывод разрешения, и на каждом стоит делитель от линии 12 В:

Канал |
Делитель |
Напряжение на EN при 12 В |
1 |
R20 51 кОм / R19 12 кОм |
2.29 В |
2 |
R22 51 кОм / R21 12 кОм |
2.29 В |
3 |
R24 51 кОм / R23 12 кОм |
2.29 В |
4 |
R26 51 кОм / R25 12 кОм |
2.29 В |
Все четыре делителя одинаковые. Значение 2.29 В при 12 В на входе укладывается в требование даташита («напряжение на выводе EN должно быть ниже 5.5 В; не подключайте EN к PVIN в приложениях с высоким входным напряжением») - здесь всё сделано правильно.
Но из одинаковости делителей следует важный вывод: последовательность включения рейлов на плате не реализована. Все четыре канала стартуют одновременно, как только входное напряжение поднимется выше порога.
Насколько это критично? Даташит ADRV9009 описывает оптимальную последовательность: сначала одновременно VDDD1P3_DIG и все домены VDDA1P3, затем VDDA_3P3, VDDA1P8_BB, VDDA1P8_TX, VDDA1P3_DES и VDDA1P3_SER; напряжение интерфейса можно подавать в любой момент. И тут же оговаривается: обратите внимание, что при несоблюдении этой последовательности повреждения устройства не происходит. Однако несоблюдение последовательности может привести к более высоким, чем ожидается, пусковым токам.
То есть повреждения не будет, но пусковой ток окажется выше расчетного. С учетом предохранителя на 2 А и ограничения по току линии 12 В на разъеме FMC это стоит держать в голове: при включении плата может дать всплеск тока заметно больше рабочего. Если носитель имеет чувствительную защиту по линии 12 В, возможны ложные срабатывания при старте.
Также даташит рекомендует дёрнуть сигнал RESET после стабилизации питания и перед конфигурированием - что в комплектном коде и делается.
Вывод PWRGD (17) подтянут резистором R17 10 кОм к VREG_5V. Это сигнал готовности питания с открытым стоком; на плате он никуда не заведен, то есть возможность каскадного запуска через него не используется. Выводы конфигурации CFG12 и CFG34 подключены напрямую к VREG_5V, что задает одну из предопределенных комбинаций времени плавного пуска, деления частоты и параллельной работы.
Формирование питания тактовой части
Отдельно от основных рейлов формируются два напряжения для тактовой части, оба - из 3.3 В через ферритовые бусины:
Рейл |
Ферритовая бусина |
Импеданс |
Что питает |
3V3_CLK |
L5 |
42 Ом |
AD9528, буферы, «игреки» трансляторов уровней |
3V3_VCO |
L6 |
30 Ом |
VCXO Y1 |
Плюс развязка: C29 10 мкФ и C30 10 нФ на входе, C37 0.1 мкФ на выходе 3V3_VCO, а на рейле 3V3_CLK - тот самый набор из двадцати конденсаторов из блока FILER, разобранный в главе 6.
Смысл разделения через отдельные бусины уже обсуждался: AD9528 с четырнадцатью выходными драйверами создаёт заметные импульсные токи по своему питанию, и попадание этих токов в цепь питания VCXO напрямую ухудшило бы фазовый шум. Ферритовая бусина 30 Ом на частотах помехи создаёт достаточное сопротивление, чтобы этого не произошло.
Разводка питания трансивера
Лист POWER_DUT_CONNECTIONS целиком посвящён тому, как четыре рейла расходятся по выводам ADRV9009. Микросхема имеет 77 выводов аналоговой земли (VSSA_1…VSSA_77), два вывода цифровой земли (VSSD_1, VSSD_2) и около двадцати выводов питания, разбитых на отдельные домены.
Каждый домен подключается к своему рейлу через отдельный резистор 0 Ом:
Резистор |
Домен |
Выводы |
Назначение домена |
R85 |
VDDA1P3_BB |
E5 |
Аналоговая часть ADC, DAC, вспомогательного ADC |
R86 |
VDDA1P3_DES |
N9, P9 |
Десериализатор JESD204B |
R87 |
VDDA1P3_AUX_VCO_LDO |
C10 |
Стабилизатор VCO вспомогательного синтезатора |
R88 |
VDDA1P3_SER |
N8, P8 |
Сериализатор JESD204B |
R89 |
VDDA1P3_RX_RF |
B1 |
ВЧ-часть приёмника |
R90 |
VDDA1P3_RX_TX |
C3 |
Общая часть приёмника и передатчика |
R91 |
VDDA1P3_CLOCK_VCO_LDO |
N1 |
Стабилизатор VCO тактового синтезатора |
R92 |
VDDA1P3_RF_VCO_LDO |
C5, C6 |
Стабилизатор VCO основного синтезатора |
R93 |
VDDA1P3_RF_LO |
C8 |
Тракт основного гетеродина |
R94 |
VDDA1P3_CLOCK_SYNTH |
G5 |
Тактовый синтезатор |
R95 |
VDDA1P3_RF_SYNTH |
G7 |
Основной ВЧ-синтезатор |
R96 |
VDDA1P3_AUX_SYNTH |
G8 |
Вспомогательный синтезатор |
Все двенадцать резисторов идут от одного рейла VOUT1_1V3_ANLG. Отдельные резисторы на каждый домен нужны для двух целей: разорвать цепь при отладке (например, чтобы измерить ток конкретного домена) и слегка развязать домены друг от друга по паразитным связям.
Обратите внимание на любопытный факт: питание сериализатора и десериализатора JESD204B взято с аналогового рейла 1.3 В, а не с цифрового. Это не ошибка, а осознанное решение: гигабитные последовательные интерфейсы очень чувствительны к шуму питания, и аналоговый рейл, у которого нет импульсной цифровой нагрузки, для них чище. Цифровой рельс VOUT2_1V3_DIG питает только VDD1P3_DIG (выводы L8, L9) - ядро микросхемы, где происходит вся цифровая обработка.
Остальные напряжения проще:
Рейл |
Домены |
Выводы |
VOUT3_3V3 |
VDDA_3P3 |
C12 |
VOUT4_1V8 |
VDDA1P8_BB, VDDA1P8_TX |
E4, E12 |
VDD_IF (= VADJ с FMC) |
VDD_INTERFACE |
M12 |
И отдельная группа, которая может ввести в заблуждение: выводы VDDA1P1_RF_VCO (C7), VDDA1P1_AUX_VCO (D10) и VDDA1P1_CLOCK_VCO (M1) на 1.1 В. Никакого рейла 1.1 В на плате нет - к этим выводам подключены только конденсаторы по 1 мкФ (C179, C180, C183). Это выходы внутренних стабилизаторов ADRV9009: соответствующие домены VDDA1P3_*_VCO_LDO являются их входами, а выводы 1.1 В нужны только для подключения внешней ёмкости. Даташит так и предписывает: «Развяжите этот вывод конденсатором 1 мкФ».
Общее количество развязывающих конденсаторов на этом листе - порядка девяноста. Разброс номиналов от 0.1 мкФ до 220 мкФ, причём самые крупные (C176, C181, C187, C188, C190 по 220 мкФ) стоят на доменах с наибольшим потреблением: цифровое ядро и тракт гетеродина. Часть конденсаторов подключена к цепи AGND, часть - к GND; разделение земель на плате есть, и при доработках его надо уважать.
Бюджет мощности
Соберём картину целиком для самого тяжёлого режима - два передатчика и наблюдательный приёмник, полоса 450 МГц.
Потребитель |
Ток |
Напряжение |
Мощность |
ADRV9009, аналог 1.3 В |
2073 мА |
1.3 В |
2.70 Вт |
ADRV9009, цифра 1.3 В |
1541 мА |
1.3 В |
2.00 Вт |
ADRV9009, 1.8 В передатчик |
455 мА |
1.8 В |
0.82 Вт |
ADRV9009, 1.8 В базовая полоса |
63 мА |
1.8 В |
0.11 Вт |
ADRV9009, 3.3 В |
3 мА |
3.3 В |
0.01 Вт |
ADRV9009, интерфейс |
8 мА |
1.8 В |
0.01 Вт |
Итого ADRV9009 |
5.66 Вт |
||
AD9528 (два контура, часть выходов) |
около 150 мА |
3.3 В |
около 0.5 Вт |
VCXO |
30 мА |
3.3 В |
0.10 Вт |
Трансляторы, буферы, флеш, светодиоды |
- |
- |
около 0.05 Вт |
Суммарно на выходах |
около 6.3 Вт |
При КПД импульсных преобразователей 85–90 % входная мощность составит примерно 7 – 7.5 Вт, то есть ток от 12 В около 0.6 – 0.65 А. Предохранитель на 2 А выбран с трехкратным запасом - этого достаточно, чтобы не срабатывать от пускового тока, но и защитить при коротком замыкании.
Тепловой режим
Тепло в системе рассеивается в трёх местах.
ADRV9009 - до 5.7 Вт в корпусе BGA 196 без радиатора. Это самый горячий элемент на плате. Корпус BGA отводит тепло преимущественно вниз, через шарики в печатную плату, поэтому качество медных полигонов и переходных отверстий под микросхемой напрямую влияет на температуру кристалла. Проверить это по схеме нельзя - нужна топология, которой в комплекте нет.
ADP5054 - потери на преобразовании. При выходной мощности 6.3 Вт и КПД около 87 % рассеивается порядка 0.9 Вт, причём часть в микросхеме, часть во внешнем транзисторе Q1 и дросселях. При θJA = 28.4 °C/Вт и 0.6 Вт в корпусе перегрев кристалла составит около 17 °C над платой - терпимо.
Q1 - при рассеиваемой мощности до 2 Вт по даташиту и реальных потерях в десятые доли ватта проблем нет.
Практические рекомендации простые. Плата рассчитана на работу в открытом виде, как оценочная, и при комнатной температуре без обдува она работает. Но если вы ставите её в закрытый корпус, обдув необходим: 7 Вт в замкнутом объёме быстро поднимут температуру. Признаки перегрева проявятся как уход калибровок и деградация характеристик, а не как отказ - ADRV9009 имеет встроенный датчик температуры, доступный через вспомогательный ADC, и его стоит опрашивать в своём ПО.
Отдельно: при первом включении обязательно проверьте все четыре напряжения, прежде чем что-то настраивать. Точки для замера есть - выводы нулевых резисторов R85…R96 и колодка JP8. Это займёт две минуты и избавит от долгих поисков причины, почему трансивер не отвечает по SPI.
Глава 9. FMC-интерфейс
Лист схемы: FMC_FPGA_CONNECTIONS (полный лист).
Разъём FMC - единственная связь платы с внешним миром, не считая ВЧ-разъёмов. Через него идёт всё: питание, данные, управление, тактирование. Понимание того, что именно и как через него передаётся, - необходимое условие для подключения платы к чему-либо, кроме комплектного носителя.
Что такое FMC
FMC (FPGA Mezzanine Card) описан стандартом ANSI/VITA 57.1. Идея простая: определить универсальный интерфейс между платой с FPGA (носителем, carrier card) и платой расширения (мезонином, mezzanine module), чтобы одну и ту же плату ввода-вывода можно было использовать с разными FPGA и наоборот.
Стандарт предусматривает два варианта разъёма:
Вариант |
Контактов |
Массив |
Гигабитных пар |
HPC (High Pin Count) |
400 |
10 × 40, ряды A…K |
до 10 |
LPC (Low Pin Count) |
160 |
два массива 2 × 40 |
1 (только DP0) |
Разъёмы механически совместимы: LPC-модуль встанет в HPC-разъём носителя. Обратное неверно.
Состав контактов HPC по стандарту:
Функция |
Контактов |
Гигабитные данные (DP0…DP9) |
40 |
Гигабитные тактовые сигналы (GBTCLK0, GBTCLK1) |
4 |
Пользовательские данные (LA, HA, HB) |
160 |
Пользовательские тактовые |
8 |
I2C |
2 |
JTAG |
5 |
Флаги состояния |
5 |
Питание |
15 |
Земля |
159 |
Резерв |
2 |
Плата FMC_ADRV9009 использует именно HPC: три из четырёх её гигабитных линий (DP1, DP2, DP3) на LPC-разъёме физически отсутствуют. Обойтись LPC можно было бы только при работе на одной линии JESD204B, что для этого трансивера означало бы полосу не более 80 МГц.
Гигабитные линии
По схеме плата подключает восемь дифференциальных пар к четырём каналам DP:
Цепь платы |
Направление |
Пара FMC |
Контакты |
OUT0 (SERDOUT0) |
Модуль → носитель |
DP1_M2C |
A2, A3 |
OUT1 (SERDOUT1) |
Модуль → носитель |
DP2_M2C |
A6, A7 |
OUT2 (SERDOUT2) |
Модуль → носитель |
DP0_M2C |
C6, C7 |
OUT3 (SERDOUT3) |
Модуль → носитель |
DP3_M2C |
A10, A11 |
IN0 (SERDIN0) |
Носитель → модуль |
DP1_C2M |
A22, A23 |
IN1 (SERDIN1) |
Носитель → модуль |
DP3_C2M |
A30, A31 |
IN2 (SERDIN2) |
Носитель → модуль |
DP0_C2M |
C2, C3 |
IN3 (SERDIN3) |
Носитель → модуль |
DP2_C2M |
A26, A27 |
Обозначения M2C и C2M означают mezzanine-to-carrier и carrier-to-mezzanine, то есть направление передачи.
Обратите внимание на нетривиальное соответствие номеров: SERDOUT2 идёт на DP0, SERDOUT0 - на DP1, а у входных линий SERDIN1 попадает на DP3, а SERDIN3 - на DP2. Порядок перепутан относительно интуитивного. Причина - в топологии печатной платы: линии разведены так, чтобы получились короткие и симметричные трассы, а логическое соответствие лейнов настраивается программно. Практический вывод: при адаптации проекта FPGA не полагайтесь на «естественный» порядок лейнов, сверяйтесь с этой таблицей. Именно здесь легко получить работающий физический уровень при полностью нерабочем логическом.
Каждая линия развязана по постоянному току конденсатором 100 нФ, установленным рядом с разъёмом (C79…C98). Размещение у разъёма, а не в середине трассы, правильно с точки зрения целостности сигнала: развязка вносит неоднородность импеданса, и её лучше держать у края линии.
Тактовые сигналы
Цепь |
Пара FMC |
Контакты |
Комментарий |
FPGA_REF_CLK |
GBTCLK0_M2C |
B20, B21 |
Опорная частота 122.88 МГц для GT-трансиверов; развязка C91, C93 по 10 нФ |
FPGA_SYSREF |
LA00_P_CC / LA00_N_CC |
G6, G7 |
SYSREF, дифференциальное согласование R34 100 Ом |
Стандарт прямо предписывает, что опорную частоту для гигабитных линий обеспечивает мезонин (Rule 5.44: «Модуль ввода-вывода должен предоставлять опорные тактовые сигналы GBTCLK для гигабитного интерфейса»), причём если используется только один такой сигнал, это должен быть GBTCLK0_M2C (Rule 5.47). Плата стандарту следует.
Требования к трассам от стандарта: дифференциальное сопротивление 100 Ом ±10 %, рассогласование длин в паре не более 11 пс, размах джиттера рекомендуется не более ±40 пс. На стороне носителя эти же требования должны быть выполнены - иначе опора придёт до GT-трансиверов негодной.
Суффикс _CC у пары LA00 означает clock capable. Это указание для разработчика носителя: сигнал должен попадать на вывод FPGA, способный работать как тактовый входной (в терминологии AMD/Xilinx - MRCC или SRCC). Для SYSREF это принципиально: он должен попасть в глобальную тактовую сеть, чтобы одновременно достичь всех логических элементов, которые от него зависят.
Пользовательские линии: только банк A
Плата использует исключительно LA-пары, то есть банк A. Задействовано тринадцать пар:
Пара LA |
Контакты |
Сигнал |
Направление |
LA00_CC |
G6, G7 |
FPGA_SYSREF (дифференциальный) |
Модуль → носитель |
LA02 |
H7, H8 |
SYNCOUTB0 (дифференциальный) |
Модуль → носитель |
LA03 |
G9, G10 |
SYNCINB0 (дифференциальный) |
Носитель → модуль |
LA04_P / LA04_N |
H10, H11 |
RESETB / GP_INTERRUPT |
Вход / выход |
LA07_P / LA07_N |
H13, H14 |
SPI_CLK / SPI_DIN |
Входы |
LA08_P |
G12 |
SPI_DOUT |
Выход |
LA09_P / LA09_N |
D14, D15 |
SPI_CS0 (ADRV9009) / SPI_CS1 (AD9528) |
Входы |
LA11_P |
H16 |
TEST |
Вход |
LA13_P / LA13_N |
D17, D18 |
TX1_ENABLE / RX1_ENABLE |
Входы |
LA14_P / LA14_N |
C18, C19 |
TX2_ENABLE / RX2_ENABLE |
Входы |
LA24 |
H28, H29 |
SYNCOUTB1 (дифференциальный) |
Модуль → носитель |
LA25 |
G27, G28 |
SYNCINB1 (дифференциальный) |
Носитель → модуль |
LA26_P / LA26_N |
D26, D27 |
FMC_CLK_RESETB / FMC_SYSREF_REQUEST |
Входы |
Всё это подтверждается файлом констрейнтов комплектного FPGA-проекта, где номера LA-пар указаны в комментариях к каждому выводу - редкий случай, когда документация продавца оказывается настолько полезной.
Банк HB (высокоскоростные пары в рядах E, F, J, K) не используется вообще. Из этих рядов задействованы только контакты питания и один служебный сигнал. Это хорошая новость для совместимости: требования к носителю ниже, чем могли бы быть, и напряжение VIO_B_M2C (питание банка B со стороны мезонина) плата не формирует и не требует.
Каждая однопроводная линия подключена к разъёму через нулевой резистор (R57…R61, R65…R72). Смысл тот же, что и в других местах: возможность разорвать цепь для отладки.
Питание: сколько можно взять с разъёма
Стандарт VITA 57.1 определяет четыре линии питания с жёсткими лимитами:
Линия |
Напряжение |
Максимальный ток |
Максимальная ёмкость нагрузки |
Контакты на этой плате |
VCC_12P0V |
12 В |
1 А |
1000 мкФ |
C35, C37 |
VCC_3P3V |
3.3 В |
3 А |
1000 мкФ |
C39, D36, D38, D40 |
VADJ |
0 … 3.3 В |
4 А |
1000 мкФ |
E39, F40, G39, H40 |
3P3VAUX |
3.3 В |
20 мА |
150 мкФ |
D32 |
Отдельно стандарт ограничивает суммарную мощность модуля 10 Вт.
Сверим с тем, что берёт плата.
12 В. Единственный силовой ввод; из него формируются все четыре внутренних рейла напряжений. Расчёт из главы 8 даёт 0.6–0.65 А в самом тяжёлом режиме. Лимит стандарта - 1 А. Запас есть, но не двукратный.
Тут стоит заметить одну вещь: предохранитель на плате рассчитан на 2 А, то есть вдвое выше лимита стандарта по этой линии. Если на плате возникнет неисправность с потреблением, скажем, 1.5 А, предохранитель не сработает, а линия 12 В носителя будет перегружена. Защищать её должен носитель - и хорошие платы это делают, но полагаться на это не стоит.
Установленная ёмкость по входу 12 В - около 109 мкФ (C31 47 + C32 22 + C33…C36 по 10), лимит 1000 мкФ соблюдён с большим запасом. Это важно: слишком большая ёмкость создаёт при включении зарядный ток, который может вызвать срабатывание защиты носителя.
3.3 В с разъёма. Линия подключена, но никуда не идёт: собственный рельс 3.3 В плата формирует сама из 12 В. Контакты просто заведены на цепь FMCA_VCC_3P3V, которая на схеме дальше не используется. Так что 3 А, доступные по стандарту, остаются невостребованными.
3P3VAUX. Питает только EEPROM IC6. Это дежурное напряжение, которое присутствует даже при выключенном основном питании, - именно поэтому EEPROM на нём и висит: носитель должен иметь возможность прочитать данные модуля до того, как подаст на него питание. Потребление M24C02 - единицы микроампер, лимит 20 мА не приближается. Развязка: C77 10 мкФ и C78 100 нФ; суммарные 10 мкФ укладываются в лимит 150 мкФ.
VADJ. Самое интересное. Об этом дальше отдельно.
Итого суммарная мощность модуля 7–7.5 Вт против лимита 10 Вт. Вписывается, но если вы собираетесь наращивать плату (например, добавить активные компоненты или МШУ с питанием от неё), запас невелик.
VADJ: главный вопрос совместимости
VADJ - регулируемое напряжение, которое носитель подаёт на мезонин. Его смысл в том, чтобы согласовать логические уровни: носитель питает свой банк ввода-вывода тем же напряжением, что и мезонин, и они понимают друг друга без трансляторов.
На этой плате VADJ через нулевой резистор R15 превращается в рейл VDD_IF, который питает:
вывод VDD_INTERFACE (M12) трансивера ADRV9009
сторону VCCA трансляторов уровней IC4 и IC5
буфер IC3, сводящий линии MISO
подтяжки сигналов выбора микросхемы R53, R54
То есть VADJ напрямую определяет напряжение логики трансивера. Что из этого следует:
Значение VADJ |
Результат |
1.8 В |
Работает. Номинальное значение по даташиту ADRV9009 |
2.5 В |
Работает. Второе номинальное значение (VDD_INTERFACE допускает 1.71…2.625 В) |
3.3 В |
Выход из строя. Абсолютный максимум VDD_INTERFACE - 3.0 В |
Не подано |
Плата не отвечает по SPI; питание внутренних рейлов при этом присутствует |
Перед первым включением на незнакомом носителе обязательно проверьте, какое напряжение он подаёт на VADJ. Некоторые платы позволяют выставить 3.3 В, и это гарантированное повреждение трансивера, который стоит дороже всей остальной платы.
IPMI EEPROM: ловушка, о которой надо знать заранее
Микросхема IC6 типа M24C02-RMN6P - это EEPROM на 2 Кбит, обязательный по VITA 57.1 элемент любого FMC-модуля.
Подключение стандартное:
Вывод |
Функция |
Подключён к |
1 |
E0 (адрес) |
GA0 - контакт C34 разъёма |
2 |
E1 (адрес) |
GA1 - контакт D35 разъёма |
3 |
E2 (адрес) |
Земля |
5 |
SDA |
FMCA_SDA - контакт C31 |
6 |
SCL |
FMCA_SCL - контакт C30 |
7 |
WC (защита записи) |
Земля - запись разрешена |
8 |
VCC |
3P3VAUX |
Подтяжки шины I2C: R63, R64 по 4.7 кОм к 3P3VAUX.
Сигналы GA0 и GA1 - это address: носитель задаёт ими адрес модуля на шине I2C, чтобы в системе с несколькими FMC-разъёмами не возникло конфликта адресов. Комбинация двух сигналов даёт четыре возможных адреса.
Теперь суть ловушки. Именно из этой EEPROM носитель узнаёт, какое напряжение подавать на VADJ. Формат данных описан в стандарте IPMI (Intelligent Platform Management Interface), и в нём среди прочего хранится требуемое мезонином напряжение. Контроллер носителя читает EEPROM по шине I2C ещё до включения основного питания (для этого EEPROM и питается от дежурного 3P3VAUX), извлекает требования и настраивает свой регулятор VADJ.
А теперь то, что написано в документации AMD по платам семейства UltraScale: если подключённый модуль ввода-вывода (FMC-плата) имеет пустую или повреждённую EEPROM, рейл VADJ не будет включён.
Вот это и есть главная практическая проблема с клоном. У китайской платы EEPROM может быть не прошита. Никто не гарантирует, что продавец записал в неё корректные IPMI-данные - это невидимая для покупателя деталь, которая не влияет на «плата определяется, светодиоды горят». Результат при подключении к ZCU102, ZCU104, VCU118 или другой плате с системным контроллером: VADJ останется выключенным, VDD_INTERFACE трансивера окажется без питания, SPI не ответит, и вы будете искать проблему в софте.
Что с этим делать, есть три пути.
Проверить EEPROM. С носителя, у которого есть доступ к шине I2C FMC, прочитать содержимое EEPROM. Если там нули или мусор - вот и причина.
Прошить EEPROM. Вывод защиты записи WC заземлён, то есть запись физически разрешена. Значит можно записать корректные IPMI-данные самостоятельно. Формат описан в VITA 57.1 и в документации AMD; у ADI в репозитории есть готовые образы для своих плат, которые подойдут как основа, поскольку плата - клон.
Выставить VADJ вручную. На оценочных платах AMD системный контроллер имеет меню, доступное по UART: подключиться к порту системного контроллера (Enhanced COM port, 115200), выбрать «FMC Menu» и вручную задать напряжение. Способ работает, но требует повторения после каждого включения питания, если контроллер не запоминает настройку.
На платах старшего поколения вроде ZC706, где VADJ задаётся аппаратно (перемычками или через PMBus без проверки EEPROM), эта проблема не возникает. Что, кстати, объясняет, почему комплектный SD-образ рассчитан именно на ZC706: с ним плата заведётся без вопросов к EEPROM.
Служебные сигналы
Сигнал |
Контакт |
Что на плате |
PRSNT_M2C_L |
H2 |
Резистор R55 0 Ом на землю |
PG_C2M |
F1 |
Резистор R56 1 кОм к рельсу 3.3 В платы |
PRSNT_M2C_L - сигнал присутствия модуля, активный низкий. Стандарт требует соединить его с землёй на мезонине, что и сделано. По нему носитель понимает, что в разъём что-то вставлено, и разрешает подачу питания. Резистор R55 вместо прямого соединения оставляет возможность при отладке «спрятать» плату от носителя, не вынимая её из разъёма.
PG_C2M - сигнал готовности питания, который носитель выдаёт мезонину, сообщая, что VADJ, 12 В и 3.3 В находятся в допуске. На плате он подтянут к 3.3 В через 1 кОм и дальше нигде не используется: логика запуска платы этот сигнал не учитывает. Подтяжка нужна тем носителям, у которых этот выход выполнен с открытым стоком.
Линии JTAG (пять контактов по стандарту) плата не использует. Возможность включить JTAG boundary scan у ADRV9009 есть - через вывод TEST и код на выводах GPIO_0…GPIO_3 - но поскольку низковольтные GPIO не разведены (см. главу 7), воспользоваться ею нельзя.
SPI-флеш на этом же листе
На листе 7 расположена и микросхема IC7 (S25FL208K), уже разобранная в главе 7. Здесь стоит отметить только одну деталь, видную на приведённой картинке: выводы WP# (защита записи, вывод 3) и HOLD# (вывод 7) помечены как неподключённые.
Оба сигнала активны низким уровнем и по-хорошему должны быть подтянуты к питанию. Большинство флеш-микросхем имеют внутренние подтяжки, поэтому на практике это, скорее всего, работает. Но формально висящие входы у КМОП-микросхемы - недочёт схемы. Если вы собираетесь всерьёз использовать эту флеш, стоит проверить осциллографом, что она отвечает стабильно.
Сводка требований к носителю
Собирая всё вместе, получаем список того, что плата требует от носителя. Он же будет отправной точкой для главы 10.
Требование |
Почему |
Разъём FMC HPC |
Линии DP1…DP3 отсутствуют на LPC |
Четыре GT-трансивера на приём и четыре на передачу |
Восемь линий JESD204B |
Скорость GT не менее 9.83 Гбит/с |
Профили с максимальной полосой |
Пара GBTCLK0_M2C разведена на MGTREFCLK квада GT |
Опорная частота приходит с модуля |
Пара LA00_CC разведена на тактовый вывод (MRCC/SRCC) |
SYSREF должен попасть в глобальную сеть |
Тринадцать LA-пар банка A |
Управление и синхронизация |
VADJ = 1.8 В или 2.5 В, ни в коем случае не 3.3 В |
Питание логики трансивера |
12 В на разъёме, ток не менее 0.7 А |
Единственный силовой ввод платы |
Либо прошитая EEPROM, либо ручная установка VADJ |
Иначе VADJ не включится |
Поддержка LVDS на LA-парах |
Сигналы синхронизации дифференциальные |
Глава 10. Выбор платы-носителя
Плата FMC_ADRV9009 бесполезна сама по себе - ей нужен носитель. И это решение куда важнее, чем кажется: от него зависит не только заработает ли железо, но и сколько времени вы потратите на запуск. Разница между «поддержанным» и «технически подходящим» носителем - это разница между вечером и месяцем работы по старту платы в самом простом режиме работы.
Обязательные требования
Начнём с жёсткого списка. Если носитель не выполняет любой из этих пунктов, дальше можно даже не смотреть.
Разъём FMC HPC. Не LPC. Три из четырёх гигабитных линий модуля (DP1, DP2, DP3) на LPC-разъёме физически отсутствуют.
Четыре GT-трансивера на приём и четыре на передачу, разведённые на этот разъём. Причём не просто «есть в микросхеме», а физически подключённые к контактам DP0…DP3 того самого разъёма, куда вы вставляете модуль. Многие платы разводят на FMC только одну или две пары DP.
Скорость GT не менее 9.83 Гбит/с. Это отсекает всё на Artix-7 и Spartan (GTP до 6.25 Гбит/с), а также Zynq-7000 в корпусах без крышки (FBG, до 6.6 Гбит/с).
Пара GBTCLK0_M2C разведена на вывод MGTREFCLK того квада GT, где сидят линии JESD204B. Опорную частоту 122.88 МГц даёт модуль, и она должна дойти до трансиверов. Если на носителе эта пара заведена на обычный вывод ввода-вывода или вообще не разведена - работать не будет, и обойти это в HDL нельзя.
Пара LA00_CC разведена на тактовый вывод (MRCC или SRCC). По ней приходит SYSREF, и он должен попасть в глобальную тактовую сеть.
Тринадцать LA-пар банка A - под управление и синхронизацию.
Напряжение VADJ 1.8 или 2.5 В. Категорически не 3.3 В: это выведет трансивер из строя.
12 В на разъёме FMC, ток не менее 0.7 А. Единственный силовой ввод платы. Если носитель 12 В по FMC не даёт (бывает), можно подать их снаружи на колодку JP8, но это уже костыль.
Поддержка LVDS на выводах банка A. Сигналы синхронизации и SYSREF дифференциальные.
Что официально поддержано Analog Devices
Поскольку модуль - клон ADRV9009-W/PCBZ, для него работает вся официальная инфраструктура ADI. Список поддержанных носителей из документации ADI:
Носитель |
HDL-проект |
Драйверы Linux |
ПО без ОС |
Оценочное ПО (TES) |
ZC706 (Zynq-7000 XC7Z045) |
Да |
Да |
Нет |
Да |
ZCU102 (Zynq UltraScale+ ZU9EG) |
Да |
Да |
В работе |
Нет |
Arria 10 SoC |
Да |
Да |
- |
Нет |
EVAL-TPG-ZYNQ3 (материнская плата ADI) |
- |
- |
- |
Да |
KC705 |
Нет |
Нет |
Нет |
Нет |
VC707 |
Нет |
Нет |
Нет |
Нет |
KCU105 |
Есть в репозитории |
Не отмечен |
- |
Нет |
Проекты HDL лежат в репозитории analogdevicesinc/hdl по пути projects/adrv9009/<носитель>. Конфигурация по умолчанию одинакова для всех носителей и совпадает с тем, что мы видели в комплектном примере:
То есть четыре конвертера и четыре линии на передачу, четыре конвертера и две линии на приём, два конвертера и две линии на наблюдательный приёмник.
Разбор кандидатов
ZC706 - самый предсказуемый вариант
Xilinx ZC706 на XC7Z045-2FFG900. Именно под неё сделан комплектный SD-образ с оценочным ПО, и именно её ADI поддерживает полнее всего.
Что важно |
Значение |
GT-трансиверы |
GTX, корпус FFG - до 12.5 Гбит/с при VMGTAVCC = 1.05 В |
VADJ при котором проверено ADI |
2.5 В |
Разъёмы FMC |
HPC1 (J4) и LPC |
Оценочное ПО ADI (TES) |
Работает |
Проект в HDL от ADI |
projects/adrv9009/zc706 |
Дерево устройств Linux |
zynq-zc706-adv7511-adrv9009-jesd204-fsm.dts |
Плюсы очевидны: всё готово. Есть SD-образ в комплекте с модулем, есть Linux-образ от ADI с драйверами и IIO Oscilloscope, есть проект HDL, есть Windows-утилита Transceiver Evaluation Software - которая, кстати, работает только с ZC706 и EVAL-TPG-ZYNQ3. Модуль ставится в HPC1.
Минус - цена и доступность. ZC706 стоит порядка нескольких тысяч долларов и постепенно уходит с рынка как устаревшая платформа. Плюс архитектура Zynq-7000 накладывает ограничения: PS с двумя ядрами Cortex-A9, гигабитный Ethernet, шина PS-PL не самая быстрая. Для потоковой передачи 245.76 MSPS × 2 канала × 4 байта = почти 2 ГБ/с в DDR это узкое место.
ZCU102 - современный вариант с одной оговоркой
Xilinx ZCU102 на Zynq UltraScale+ ZU9EG. Мощнее, современнее, живее.
Что важно |
Значение |
GT-трансиверы |
GTH, до 16.3 Гбит/с - с запасом на любой профиль |
VADJ при котором проверено ADI |
1.8 В |
Разъёмы FMC |
HPC0 и HPC1 |
Оценочное ПО ADI (TES) |
Не работает |
Проект в HDL от ADI |
projects/adrv9009/zcu102 |
Дерево устройств Linux |
zynqmp-zcu102-rev10-adrv9009-jesd204-fsm.dts |
Преимущества серьёзные: четыре ядра Cortex-A53 плюс два R5, GTH-трансиверы с большим запасом по скорости, быстрая шина к DDR, актуальная поддержка в Vivado и в ядре Linux.
А теперь оговорка, из-за которой люди теряют дни. ZCU102 не умеет выдавать 2.5 В на VADJ. А оригинальная плата ADRV9009-W/PCBZ в своей IPMI EEPROM объявляет минимально требуемое напряжение 2500 мВ. Системный контроллер ZCU102 читает EEPROM, видит требование, которое не может выполнить, и просто не включает VADJ. Симптомы: плата вроде бы определяется, но по SPI не отвечает; в логе загрузки Linux видно ad9528: probe of spi32766.0 failed with error -5.
Решение, которое ADI рекомендует напрямую: перепрошить FRU EEPROM модуля образом с минимальным напряжением 1800 мВ. Готовый файл есть в репозитории ADI:
wget https://github.com/analogdevicesinc/fru_tools/raw/master/masterfiles/ADRV9009-W.bin
Дальше записать его в EEPROM модуля через шину I2C и обязательно выключить и включить питание - системный контроллер читает EEPROM только при старте.
С клоном ситуация чуть другая, и в некотором смысле хуже: у него EEPROM может быть вообще не прошита. Тогда VADJ не включится по другой причине - при пустой или повреждённой EEPROM платы AMD семейства UltraScale вообще не подают это напряжение. Лечится тем же способом: записать корректный образ. Запись физически разрешена, вывод защиты WC микросхемы M24C02 заземлён (см. главу 9).
Второй минус ZCU102 - недоступность оценочного ПО. Transceiver Evaluation Software с ней не работает, и планов это менять у ADI нет. Значит комплектный SD-образ и графическая утилита из архива вам не пригодятся, придётся идти путём Linux + IIO Oscilloscope.
EVAL-TPG-ZYNQ3 - эталон, если бюджет позволяет
Собственная материнская плата ADI, которую они и рекомендуют для полной совместимости со всеми профилями ADRV9009. С ней работает оценочное ПО, гарантированы все скорости линий, никаких вопросов с VADJ и EEPROM.
Проблема одна: это узкоспециализированное оборудование ADI, оно дорогое и продаётся отдельно от радиокарты. Если вы покупаете клон за долю цены оригинала, покупка эталонной материнской платы противоречит самой идее.
RIGUKE 7100 - то, под что сделан комплектный проект
Плата, на которую ориентирован комплектный референсный проект: кастомный носитель на XC7Z100-2FFG900. По сути «ZC706 на стероидах»: тот же корпус FFG900, та же архитектура Zynq-7000, но микросхема крупнее (XC7Z100 против XC7Z045) - больше логики и 16 GTX-трансиверов.
Что важно |
Значение |
GT-трансиверы |
GTX в корпусе FFG, квад 109/110 |
Проект |
Комплектный FMC_ADRV9009_PL (Vivado 2021.1) |
Уровни на LA-парах в проекте |
LVCMOS25, то есть VADJ = 2.5 В |
Поддержка ADI |
Нет |
Оценочное ПО |
Нет |
В комплектном проекте FPGA конфигурация PS унаследована от ZC706 (в файле платформы указан xilinx:zc706::0.0(custom)), а часть микросхемы просто заменена на XC7Z100. Проект собирается, констрейнты содержат распиновку FMC HPC - то есть работать должно.
Практическая сложность в том, что это плата китайского производителя, документации по ней в комплекте нет, и её ещё нужно найти в продаже. Если вы покупаете модуль вместе с этим носителем - отлично, у вас есть готовая связка и проект под неё.
Что точно не подойдёт
Платы на Artix-7 и Spartan. GTP-трансиверы до 6.25 Гбит/с, что ниже минимально нужных 9.83. Даже если разъём HPC есть.
Zynq-7000 в корпусах FBG. Ограничение 6.6 Гбит/с из-за отсутствия крышки на корпусе. Проверяйте маркировку: FBG - не подойдёт, FFG - подойдёт.
Платы с разъёмом LPC. Нет линий DP1…DP3.
Платы, где на FMC разведены одна-две пары DP. Встречается часто, особенно на недорогих платах - разъём HPC поставили, а трансиверы к нему не подвели. Смотреть надо не на разъём, а на схему носителя.
ZedBoard, Cora, MicroZed и подобное. Малые Zynq (7010/7020) вообще не имеют GT-трансиверов.
Платы, где VADJ фиксировано 3.3 В. Опасно для трансивера.
Технически подходящие, но без поддержки
ZCU106, ZCU104, VCU118, KCU105, платы на Kintex UltraScale и UltraScale+ - по железу подходят: GTH или GTY с большим запасом по скорости, разъёмы HPC, регулируемый VADJ. Официальных проектов под ADRV9009 для большинства из них нет, но адаптировать проект от ZCU102 реально: меняются номера выводов в констрейнтах, часть микросхемы и конфигурация процессорной системы. Работа на несколько дней для человека, который умеет работать с Vivado.
Проверять при выборе надо ровно те пункты, что перечислены в начале главы, причём по схеме носителя, а не по маркетинговому описанию. Ключевые вопросы: разведены ли DP0…DP3 на нужный разъём, куда попадает GBTCLK0_M2C, куда попадает LA00_CC, какие значения VADJ поддерживаются и есть ли 12 В на FMC.
Сводная таблица
Носитель |
Железо подходит |
Проект HDL от ADI |
Linux от ADI |
Оценочное ПО |
Особенности |
ZC706 |
Да |
Да |
Да |
Да |
VADJ 2.5 В; проще всего начать |
ZCU102 |
Да, с запасом |
Да |
Да |
Нет |
VADJ 1.8 В; нужно перепрошить EEPROM |
EVAL-TPG-ZYNQ3 |
Да |
- |
- |
Да |
Эталон ADI, дорого |
Arria 10 / Stratix 10 SoC |
Да |
Да |
Да |
Нет |
Экосистема Intel вместо AMD |
RIGUKE 7100 |
Да |
Комплектный проект |
Нет |
Нет |
VADJ 2.5 В; поддержки ADI нет |
ZCU106, ZCU104, VCU118, KCU105 |
Да |
Адаптировать от ZCU102 |
Адаптировать |
Нет |
Несколько дней работы |
KC705, VC707 |
Проверять по схеме |
Нет |
Нет |
Нет |
В списке ADI без поддержки |
Artix-7, Spartan, малые Zynq |
Нет |
- |
- |
- |
GT недостаточно быстрые или отсутствуют |
Практическая рекомендация
Ответ зависит от того, что вы хотите получить.
Есть предложение купить модуль вместе с RIGUKE 7100. Самый разумный и недорогой вариант: получаете готовую связку с работающим проектом, пусть и без поддержки ADI. Но убедитесь, что комплект действительно включает и проект, и инструкцию по сборке.
Быстро увидеть сигнал и разобраться, что плата живая. Берите ZC706 и комплектный SD-образ с оценочным ПО ADI. Это единственный путь, который заработает за вечер: записали образ, скопировали обновление, назначили IP, запустили Windows-утилиту, загрузили профиль, увидели спектр. Дальше можно разбираться.
Строить систему на несколько лет. Берите ZCU102. Заплатите за это перепрошивкой EEPROM и отказом от графической утилиты ADI, но получите современную платформу с живой поддержкой в Vivado и в ядре Linux, четырёхъядерный процессор и трансиверы с двукратным запасом по скорости.
Уже есть плата на UltraScale. Проверьте её по списку требований, и если проходит - адаптируйте проект adrv9009/zcu102. Это дешевле, чем покупать ещё одну плату.
Чего делать не стоит - покупать модуль, не имея на руках подходящего носителя и не проверив его по списку требований. Плата на 400-контактном разъёме, требующая четырёх гигабитных линий на 9.8 Гбит/с, точную опорную частоту и правильное VADJ, - не то устройство, которое можно «как-нибудь подключить».
Глава 11. Референсный проект и программное обеспечение
Железо разобрали. Теперь о том, чем его оживлять. У вас есть три принципиально разных пути, и выбор между ними определит, сколько времени уйдёт до первого принятого сигнала.

Дальше разберём каждый.
Путь 1: комплектный референсный проект
Лежит в папке Firmware/RIGUKE_7100 («пример без ОС для RIGUKE 7100»). Состоит из двух частей.
Проект FPGA
Параметр |
Значение |
Версия Vivado |
2021.1 |
Целевая микросхема |
xc7z100ffg900-2 |
Board part |
Не задан (пусто) |
Модуль верхнего уровня |
jesd204b_adc_dac_top |
Происхождение |
Импортирован из проекта ZC706_ADRV9009_USER_V4 |
Важная особенность: проект построен на IP-ядрах Xilinx, а не на HDL от Analog Devices. Используются jesd204 v7.2 (три экземпляра: TX, RX, ORX) и jesd204_phy v4.0. Ядер ADI вроде util_adxcvr или axi_ad9009 в проекте нет. Это принципиальное отличие от официального пути ADI, и оно означает, что драйверы Linux от ADI с этим битстримом работать не будут - они рассчитаны на регистровую модель ядер ADI.
Конфигурация JESD204B:
Линк |
Число линий |
F |
K |
Скремблирование |
Скорость линии |
Ширина AXI-Stream |
TX (deframer) |
4 |
2 |
32 |
Включено |
4.9152 Гбит/с |
128 бит |
RX (framer A) |
2 |
4 |
32 |
Включено |
9.8304 Гбит/с |
64 бита |
ORX (framer B) |
2 |
4 |
32 |
Включено |
9.8304 Гбит/с |
64 бита |
Тактирование в PL: опора 122.88 МГц приходит с модуля на квад GTX 109/110, из неё Clocking Wizard формирует 122.88 МГц (тактовая для TX-ядра) и две частоты 245.76 МГц (для RX/ORX и для транспортного уровня). Управление - через AXI-Lite, карта регистров:
Адрес |
Блок |
0x43C00000 |
jesd204_tx |
0x43C10000 |
jesd204_rx |
0x43C20000 |
jesd204_phy |
0x43C30000 |
up_axi_0 (GPIO и сбросы) |
0x43C40000 |
jesd204_orx |
Что есть в тракте данных: собственный модуль jesd204_transport_layer распаковывает 64-битный поток от JESD-ядер в отсчёты I и Q по 16 бит, генератор dds_gen_wave (DDS Compiler) формирует тестовый сигнал на передачу, а анализатор ila_adc (Integrated Logic Analyzer) позволяет смотреть принятые отсчёты в Vivado.
Чего в тракте данных нет - и это главное ограничение проекта:
Нет DMA. Ни axi_dmac от ADI, ни AXI DMA от Xilinx. Более того, порты S_AXI_HP0…HP3 процессорной системы, через которые PL обычно пишет в DDR, полностью отключены (PCW_USE_S_AXI_HP0..3 = 0). Принятые отсчёты никуда не сохраняются: их можно только посмотреть в ILA.
То есть это не приёмник, а стенд для проверки, что линк JESD204B поднимается. Для любого практического применения придётся добавлять контур передачи данных: включать порт HP, вставлять DMA, писать драйвер. Это несколько дней работы для человека, который уже делал такое, и существенно больше для того, кто не делал.
Bare-metal приложение
Параметр |
Значение |
Среда |
Vitis 2021.1 |
Процессор |
ps7_cortexa9_0, standalone BSP 7.5 |
Версия Talise API |
3.6.0.5 |
Периферия |
ps7_uart_0 для консоли, ps7_spi_0, ps7_gpio_0 |
Структура исходников осмысленная и повторяет организацию примеров ADI:
src/ ├── app/ headless.c, rf_config.c, talise_config.c/.h ├── devices/ │ ├── adi_hal/ spi_ctrl, jesd_core, jesd_phy, platform_drivers, parameters.h │ └── talise/ полный Talise API (talise_*.c) └── firmware/ talise_arm_binary.h, talise_stream_binary.h
Обратите внимание на папку firmware: там лежат прошивка встроенного ARM-ядра трансивера и «поток» (stream) - микрокод, управляющий переключениями TDD. Оба зашиты в исходник как массивы байт. Версии этих файлов должны соответствовать версии API, иначе проверка контрольной суммы не пройдёт.
Профиль: что именно настраивается
Из talise_config.c:
Тракт |
Частота IQ |
Полоса RF |
Линк |
Задействованные линии |
Приёмник (RX1, RX2) |
245.76 MSPS |
200 МГц |
Framer A |
0x03 - линии 0 и 1 |
Передатчик (TX1, TX2) |
245.76 MSPS |
225 МГц (полоса основного сигнала 100 МГц) |
Deframer A |
0x0F - все четыре |
Наблюдательный (ORX1, ORX2) |
245.76 MSPS |
200 МГц |
Framer B |
0x0C - линии 2 и 3 |
Тактирование трансивера: deviceClock_kHz = 122880, clkPllVcoFreq_kHz = 9830400, делитель TAL_HSDIV_2P5. Разрядность отсчёта в кадре Np = 16, SYSREF внешний (externalSysref = 1) во всех линках, смещение LMFC равно 31 для фреймеров и 17 для деформатора. Второй деформатор отключён.
Настройки физического уровня: амплитуда сериализатора 15, предподчёркивание 1, эквализация десериализатора 1, SYSREF в режиме LVDS, инверсий полярности нет.
Профиль соответствует одному из штатных для ADRV9009 и совпадает по параметрам с конфигурацией по умолчанию в HDL от ADI (RX_JESD_M=4, L=2 и TX_JESD_M=4, L=4). Расхождение только в наблюдательном тракте: у ADI по умолчанию RX_OS_JESD_M=2, здесь четыре конвертера.
Последовательность инициализации
Разбор headless.c и rf_config.c даёт следующий порядок:
Заполняются структуры описания JESD-ядер FPGA: для TX F = 2, K = 32; для RX и ORX F = 4, K = 32; везде subclass 1 и скремблирование
Захватываются линии GPIO, сброс AD9528 удерживается низким 500 мс, затем отпускается
Выставляются TEST = 0 и все четыре сигнала разрешения каналов в единицу
Инициализируется SPI (25 МГц, режим 0) и записывается таблица регистров AD9528
Опрашивается регистр 0x508 до появления признаков захвата обоих PLL
Выдаётся запрос SYSREF (gpio_lmk_sync в единицу), пауза 500 мс
Сбрасываются JESD-ядра FPGA записью в up_axi
Вызывается ad9009_initial_rf1() - основная инициализация трансивера
Устанавливается ослабление передатчиков 35 дБ и ручное усиление приёмников (индекс 110)
Печатается частота гетеродина и частота отсчётов
Внутри ad9009_initial_rf1():
Шаг |
Ключевые вызовы |
Аппаратный сброс |
TALISE_openHw, TALISE_resetDevice, TALISE_initialize |
Загрузка прошивки |
TALISE_initArm, TALISE_loadStreamFromBinary, TALISE_loadArmFromBinary, TALISE_verifyArmChecksum |
Настройка гетеродина |
TALISE_setRfPllFrequency - по умолчанию 500 МГц |
Многочиповая синхронизация |
TALISE_enableMultichipRfLOPhaseSync |
Начальные калибровки |
TALISE_runInitCals, TALISE_waitInitCals (таймаут 20 с), TALISE_serializerReset |
Поднятие линков (в цикле до успеха) |
TALISE_enableFramerLink, TALISE_enableSysrefToFramer, TALISE_enableDeframerLink, TALISE_enableSysrefToDeframer, затем fpga_jesd204b_init и проверка jesd204b_check |
Включение радио |
TALISE_enableTrackingCals, TALISE_setFhmConfig/Mode, TALISE_radioOn, TALISE_setRxTxEnable, TALISE_enableFramerTestData |
Маска начальных калибровок включает почти всё: фильтр базовой полосы передатчика, настройку АЦП, угловую частоту TIA, коррекцию постоянной составляющей, задержки ослабления и усиления, калибровку компараторов АЦП, задержку в тракте, утечку гетеродина передатчика, квадратурную коррекцию передатчика и приёмника, фазовую коррекцию, сшивание АЦП и квадратурную коррекцию наблюдательного тракта.
Обратите внимание на порядок: линки JESD204B поднимаются в цикле, который повторяется до успеха. Это правильный подход - bring-up JESD204B чувствителен к моменту прихода SYSREF, и с первой попытки может не получиться.
Что демонстрирует пример
Честно говоря, немного. Это тест инициализации, а не демонстрация работы.
Что есть:
Полная цепочка настройки от тактового генератора до калибровок
Проверка захвата PLL генератора и трансивера
Проверка контрольной суммы прошивки ARM
Проверка состояния линков JESD204B
Включение встроенного тестового генератора трансивера: TALISE_enableFramerTestData(..., TAL_FTD_ADC_DATA, TAL_FTD_FRAMERINPUT) - трансивер сам подставляет тестовые данные на вход фреймера
Вывод диагностики в UART
Чего нет:
Захвата отсчётов в память
Передачи сигнала (DDS есть в FPGA, но PS им не управляет)
Тестов кольцевого замыкания
Обработки, спектрального анализа, вывода отсчётов
Бесконечного цикла - после инициализации main() просто завершается
То есть после запуска вы получите в консоли отчёт о том, что всё поднялось, и на этом всё. Дальше нужно писать своё.
Замечания по качеству кода
Пара мест, о которых стоит знать заранее.
Цикл ожидания захвата PLL не имеет таймаута. В headless.c условие выхода требует ста подряд успешных чтений регистра 0x508, и если PLL не захватятся, цикл не завершится никогда. При этом в каждой итерации выполняется printf, так что консоль зальётся сообщениями. Если при первом запуске вы видите бесконечный поток строк pll1_lock=0x0 pll2_lock=0x0 - это не зависание процессора, это вот этот цикл. Проблему ищите в тактировании: питание AD9528, VCXO, сброс.
Условие захвата PLL1 выглядит нетипично. Ожидается lock_pll1 == 0 и lock_pll2 == 1, то есть для первого контура признаком успеха считается нулевой бит. Возможно, это специфика конкретного бита регистра 0x508, а возможно - просто неточность, компенсированная тем, что реально проверяется второй контур. Если будете переписывать инициализацию, стоит уточнить по даташиту AD9528.
Названия переменных выдают происхождение кода. Сброс и синхронизация тактового генератора называются gpio_lmk_reset и gpio_lmk_sync, хотя на плате стоит AD9528, а не микросхема семейства LMK от Texas Instruments. Код очевидно адаптирован из другого проекта. Функционально это ничему не мешает, но говорит многое об уровне вычитки и профессионализме китайских самоделкиных.
Комплектный проект и SD-образ рассчитаны на разные версии API. В образе для оценочного ПО указана версия API 3.4.1.2 и версия прошивки FPGA 4E00021A, а bare-metal пример собран под Talise 3.6.0.5. Смешивать нельзя: прошивка ARM-ядра трансивера, «поток» и версия API должны быть согласованы, иначе не пройдёт проверка контрольной суммы. Все придется перелопачивать, хотя рассчета на иное и не предполагалось.
Путь 2: оценочное ПО Analog Devices
Комплект лежит в папке ADRV9009_Transceiver_Evaluation测试. Это самый быстрый способ увидеть, что плата работает.
Что внутри:
Файл |
Назначение |
ADRV9009_Transceiver_Evaluation_Software_FULL.exe |
Windows-утилита ADI с графическим интерфейсом |
AD9371 Image 20161130.img |
Базовый образ SD-карты для платы ZC706 |
zc706_update/ |
Файлы для замены на загрузочном разделе: BOOT.bin, uImage, devicetree.dtb, cmd_server |
ADRV9009_Test_MAX.xml |
Готовая конфигурация для утилиты |
使用说明.txt |
Инструкция на китайском, семь шагов |
Инструкция в переводе:
Записать образ из папки с образами на SD-карту
Скопировать файлы из zc706_update в раздел BOOT, заменив существующие
Вставить SD-карту в плату ZC706, установить загрузку с SD
Подключить кабель Ethernet, через консоль задать адрес: ifconfig eth0 192.168.1.10
Запустить оценочное ПО ADRV9009, обновить файлы прошивки по подсказкам
Загрузить тестовый файл HTML
Задать передаваемую форму сигнала, посмотреть принятую. Если в приёме много паразитных составляющих, уменьшить усиление приёмника
Конфигурация из ADRV9009_Test_MAX.xml:
Параметр |
Значение |
Тактовая частота устройства |
122.88 МГц |
Гетеродин приёмника |
1800 МГц |
Профиль передатчика |
100/225 МГц, IQ 245.76 МГц |
Профиль приёмника |
200 МГц, IQ 245.76 МГц, дециматор 4 |
Профиль наблюдательного |
200 МГц, IQ 245.76 МГц, дециматор 4 |
Каналы |
TX1 + TX2, RX1 + RX2 |
Внешний SYSREF |
Включён |
Framer A |
Линии 2 и 3, K = 32, смещение 31, скремблирование |
Framer B |
Линии 0 и 1, K = 32, смещение 31, скремблирование |
Deframer A |
Линии 0 и 1, K = 32, смещение 17, скремблирование |
Начальные калибровки |
Квадратурная коррекция приёмника и передатчика, утечка гетеродина |
Отслеживающие калибровки |
Квадратурная коррекция RX1 и RX2 |
Плюс подхода: работает из коробки, есть графический интерфейс, видно спектр, можно менять профили и генерировать новые через встроенный инструмент. Именно эта утилита и генерирует файлы talise_config.c, которые потом подставляются в bare-metal проект - то есть она нужна и для второго пути, если вам понадобится нестандартный профиль.
Минусы существенные. Работает только с ZC706 или EVAL-TPG-ZYNQ3 - с ZCU102 несовместима, и планов добавить поддержку у ADI нет. Только Windows. Это утилита для оценки, а не для встраивания: программного интерфейса для своего кода она не предоставляет.
Путь 3: официальный HDL и Linux от ADI
Самый долгий на старте и самый правильный в перспективе.
HDL. Репозиторий analogdevicesinc/hdl, проект projects/adrv9009/<носитель>. Сборка одной командой:
cd hdl/projects/adrv9009/zcu102 make
Конфигурацию можно менять параметрами:
make TX_JESD_M=4 TX_JESD_L=4 TX_JESD_S=1 \ RX_JESD_M=4 RX_JESD_L=2 RX_JESD_S=1 \ RX_OS_JESD_M=2 RX_OS_JESD_L=2 RX_OS_JESD_S=1
В отличие от комплектного проекта, здесь используются ядра ADI, включая axi_dmac - то есть контур передачи данных в DDR уже есть. Это принципиальная разница: не нужно самому проектировать тракт от JESD-ядра до памяти.
Linux. Готовый образ ADI Kuiper Linux с драйверами adrv9009 и ad9528 в подсистеме IIO. Плата появляется в системе как устройство IIO, отсчёты читаются через libiio, конфигурация - через файлы sysfs или тот же libiio. Есть IIO Oscilloscope для просмотра сигнала и спектра, есть блоки для GNU Radio, есть привязки к Python и MATLAB.
Дерево устройств для нужного носителя лежит в репозитории ядра ADI: zynq-zc706-adv7511-adrv9009-jesd204-fsm.dts для ZC706, zynqmp-zcu102-rev10-adrv9009-jesd204-fsm.dts для ZCU102.
Новые профили генерируются через MATLAB Filter Wizard / Profile Generator для ADRV9009 либо через ту же Windows-утилиту.
Плюсы: полноценный тракт данных, живая поддержка, готовая интеграция с экосистемой SDR, возможность писать своё ПО на любом языке через libiio.
Минусы: нужно собрать HDL (это часы машинного времени и терпение), разобраться с деревом устройств, а на ZCU102 ещё и решить вопрос с EEPROM (см. главу 10).
Сравнение путей
Критерий |
Комплектный bare-metal |
Оценочное ПО ADI |
HDL + Linux от ADI |
Время до первого результата |
Дни |
Вечер |
Дни, при первом опыте - недели |
Носители |
RIGUKE 7100, адаптируется |
Только ZC706 и TPG-ZYNQ3 |
ZC706, ZCU102, Arria 10, адаптируется |
Передача данных в память |
Нет, надо делать |
Есть внутри утилиты |
Есть (axi_dmac) |
Графический интерфейс |
Нет |
Есть |
IIO Oscilloscope |
Пригодность для встраивания |
Основа есть |
Нет |
Да |
Смена профиля |
Пересборка проекта |
Через интерфейс |
Пересборка + дерево устройств |
Операционная система хоста |
Любая |
Только Windows |
Любая |
Поддержка и сообщество |
Нет |
ADI |
ADI, EngineerZone, GitHub |
Что придётся доделать в любом случае
Даже пойдя по официальному пути ADI, для реальной задачи вам понадобится:
Свой профиль. Штатный 245.76 MSPS с полосой 200 МГц подходит далеко не всем. Если нужна меньшая полоса (а обычно нужна - 200 МГц это очень много данных), профиль генерируется отдельно, и под него меняются тактовые частоты в FPGA, конфигурация JESD-ядер и дерево устройств. Работа не разовая: изменение профиля затрагивает всю цепочку.
Обработка сигнала. Ни один из трёх путей не даёт демодулятора, детектора, записи в файл или чего-либо ещё прикладного. Всё, что вы получаете, - поток отсчётов I и Q.
Управление режимами TDD. Сигналы разрешения каналов есть, API есть, но логику переключения слотов надо писать самому - в FPGA, если нужна точность в наносекунды, или в процессоре, если хватает микросекунд.
Контроль состояния. Захват PLL, температура, ошибки JESD204B, прерывание GP_INTERRUPT - всё это доступно, но опрашивать и реагировать должно ваше ПО.
Глава 12. Запуск на практике и подводные камни
Эта глава - сухая практика. Собрано всё, что мы нашли при разборе схемы и документации, в порядке, в котором с этим придётся столкнуться.
Перед тем как вставить плату в разъём
Пять минут здесь сэкономят вам дни и, возможно, стоимость трансивера.
Проверьте VADJ носителя. Найдите в документации платы, какое напряжение она подаёт на VADJ, и как его настроить. Допустимо 1.8 или 2.5 В. Значение 3.3 В выведет ADRV9009 из строя - абсолютный максимум по выводу VDD_INTERFACE равен 3.0 В. На платах AMD VADJ обычно настраивается системным контроллером или через PMBus; на ZC706 он выставляется в 2.5 В, на ZCU102 - в 1.8 В.
Проверьте 12 В на FMC. Плата питается только оттуда. Если носитель 12 В по FMC не даёт - либо ищите способ включить, либо готовьтесь подавать снаружи на колодку JP8.
Проверьте, что разведено на разъёме носителя. По схеме носителя: пары DP0…DP3 в обе стороны, GBTCLK0_M2C на выводе MGTREFCLK того квада, где сидят DP, LA00_CC на тактовом выводе. Всё это перечислено в главе 9.
Осмотрите плату. Установлены ли балуны на позициях T4 и T5 (наблюдательные входы)? В схеме они помечены TCM1-83X-1+/NC, то есть могут отсутствовать. Заодно посмотрите, нет ли следов пайки, отсутствующих компонентов, погнутых контактов разъёма.
Убедитесь, что к ВЧ-разъёмам ничего не подключено - по крайней мере, на первое включение. Максимальный полезный уровень на входе приёмника около −11 дБм, а на выходе передатчика при нулевом ослаблении будет до 9 дБм. Ни то, ни другое не должно застать вас врасплох.
Первое включение
Порядок. Подайте питание на носитель со вставленной платой. Плату в работающий носитель не вставляйте: горячая замена на FMC не предусмотрена.
Светодиод питания. POWER1 должен загореться сразу. Если нет - 12 В до платы не доходят: проверяйте предохранитель F1 и наличие напряжения на разъёме.
Замерьте все четыре напряжения. Точки доступа - выводы нулевых резисторов R85…R96 и колодка JP8. Ожидаемые значения:
Рельс |
Ожидается |
Где мерить |
VOUT1_1V3_ANLG |
1.30 В |
Любой из R85…R96 со стороны рельса |
VOUT2_1V3_DIG |
1.30 В |
Развязка у выводов L8, L9 трансивера |
VOUT3_3V3 |
3.30 В |
Развязка у вывода C12, питание AD9528 |
VOUT4_1V8 |
1.80 В |
Развязка у выводов E4, E12 |
VDD_IF (это VADJ) |
1.8 или 2.5 В |
Развязка у вывода M12 |
Отсутствие VDD_IF при наличии остальных четырёх - почти наверняка проблема с VADJ и EEPROM, о которой ниже.
Два светодиода состояния тактового генератора. STATUS1 и STATUS2 показывают внутреннее состояние AD9528; в типовой конфигурации это захват PLL1 и PLL2. После инициализации оба должны гореть. До инициализации по SPI их поведение зависит от того, что в генераторе по умолчанию.
Тактовая частота трансивера. Если есть осциллограф с полосой хотя бы 200 МГц, проверьте 122.88 МГц на выводах REF_CLK_IN (E7, E8) трансивера, точки доступа - конденсаторы C99, C100. Этот сигнал должен присутствовать сразу после включения питания, ещё до какой-либо настройки - AD9528 при старте прозрачно пропускает VCXO на выходы OUT12 и OUT13 (см. главу 6). Его отсутствие означает проблему с питанием AD9528 или VCXO, а не с программой.
Bring-up JESD204B
Здесь начинается настоящая работа. Порядок операций, который нельзя нарушать:
Отпустить сброс AD9528, инициализировать его по SPI
Дождаться захвата обоих PLL генератора
Отпустить сброс трансивера, инициализировать его, загрузить прошивку ARM и «поток», проверить контрольную сумму
Настроить гетеродин, выполнить начальные калибровки
Настроить фреймеры и деформаторы трансивера, разрешить им SYSREF
Настроить и сбросить JESD-ядра в FPGA
Выдать SYSREF
Проверить состояние линков
При неудаче - повторить с шага 5
Последний пункт не признак плохой реализации, а нормальная практика: успех подъёма линка зависит от того, в какой момент придёт SYSREF относительно внутренних счётчиков, и с первой попытки может не совпасть. В комплектном примере этот цикл реализован.
Типовые проблемы
Собрал ранее упомянутые проблемы в отдельной главе, пусть
Плата не отвечает по SPI, VDD_IF отсутствует
Причина. Носитель не включил VADJ. На платах AMD семейства UltraScale системный контроллер читает IPMI EEPROM модуля и, если она пустая, повреждённая или требует напряжение, которое плата не может выдать, просто не включает VADJ.
Для оригинальной ADRV9009-W/PCBZ типовая ситуация: EEPROM объявляет минимум 2500 мВ, а ZCU102 умеет только 1800 мВ. Для клона возможен худший вариант - EEPROM вообще не прошита.
Симптом в логе Linux. ad9528: probe of spi32766.0 failed with error -5, и в списке устройств IIO нет ни трансивера, ни генератора.
Решение. Записать в EEPROM корректный образ. ADI держит готовые файлы в репозитории fru_tools:
wget https://github.com/analogdevicesinc/fru_tools/raw/master/masterfiles/ADRV9009-W.bin
В этом образе минимальное VADJ установлено 1800 мВ. Записать его по шине I2C FMC в микросхему M24C02 и обязательно выключить и включить питание - контроллер читает EEPROM только при старте. Запись физически разрешена: вывод защиты WC заземлён.
Альтернатива на один раз: выставить VADJ вручную через меню системного контроллера. Подключиться к порту системного контроллера по UART (Enhanced COM port, 115200), выбрать «FMC Menu» и задать напряжение.
Бесконечный поток pll1_lock=0x0 pll2_lock=0x0 в консоли
Причина. Цикл ожидания захвата PLL в комплектном headless.c не имеет таймаута и печатает сообщение в каждой итерации. Процессор не завис - он ждёт того, что не происходит.
Что проверять. Питание AD9528 (3V3_CLK) и VCXO (3V3_VCO), наличие 122.88 МГц на выходе VCXO, состояние вывода сброса генератора, прохождение записи по SPI (осциллографом на линиях SPI_CLK и SPI_DIN). Если PLL1 не захватывается, а PLL2 захватился - вероятно, дело в отсутствии внешней опорной частоты: комплектная таблица регистров рассчитана на 30.72 МГц на входе REFA, и без неё первый контур останется в режиме удержания.
Линк JESD204B не поднимается: нет синхронизации
Причина 1: не приходит опорная частота на GT-трансиверы. Пара GBTCLK0_M2C не разведена на MGTREFCLK нужного квада. Лечится только правильным носителем.
Причина 2: неверное соответствие линий. Порядок пар DP на плате не совпадает с интуитивным: SERDOUT0 идёт на DP1, SERDOUT2 - на DP0, SERDIN1 - на DP3, SERDIN3 - на DP2. Полная таблица в главе 9. Физический уровень при перепутанных линиях поднимется (символы синхронизации пройдут), а логический - нет.
Причина 3: не совпадают параметры линка. F, K, M, L, Np, скремблирование и subclass должны быть настроены одинаково с двух сторон. В комплектной конфигурации: TX F = 2, K = 32, четыре линии; RX и ORX F = 4, K = 32, две линии каждый; везде Np = 16, subclass 1, скремблирование включено.
Причина 4: проблема с SYSREF. Об этом отдельно ниже.
Линк поднимается нестабильно, детерминированная задержка меняется
Причина. Скорее всего SYSREF. Проверьте его осциллографом на входе FPGA.
Здесь есть конкретная вещь, найденная при разборе схемы: на плате между FPGA_SYSREF_P и FPGA_SYSREF_N установлен резистор R34 100 Ом, а в файле констрейнтов комплектного FPGA-проекта для этой же пары указано DIFF_TERM TRUE, то есть включено внутреннее согласование 100 Ом в самой FPGA. Два согласования параллельно дают 50 Ом, и амплитуда LVDS-сигнала на приёмнике падает вдвое.
Работать это, скорее всего, будет - у LVDS-приёмников есть запас по чувствительности. Но если картина нестабильная, попробуйте либо выпаять R34, либо снять DIFF_TERM в констрейнтах. Одно согласование должно остаться, два - нет.
Второе, что стоит проверить: приходит ли SYSREF на тактовый вывод FPGA. Пара LA00_CC обязана попадать на MRCC или SRCC. Если она заведена на обычный вывод, SYSREF не попадёт в глобальную тактовую сеть, и разброс задержки до разных частей логики сорвёт синхронизацию.
Не проходит проверка контрольной суммы прошивки ARM
Причина. Не совпадают версии Talise API, прошивки ARM-ядра и «потока». Все три должны быть из одного комплекта.
В материалах к плате эти версии как раз не согласованы: SD-образ для оценочного ПО содержит API 3.4.1.2 и прошивку FPGA 4E00021A, а bare-metal пример собран под Talise 3.6.0.5. Смешивать файлы из этих двух комплектов нельзя.
Принятый сигнал есть, но полный паразитных составляющих
Причина 1: перегрузка приёмника. Максимальный полезный уровень на входе около −11 дБм. Это мало: рядом с любой сотовой базовой станцией антенна даст больше. Комплектная инструкция к оценочному ПО прямо советует: «если в приёме много паразитных составляющих, уменьшите усиление приёмника». Совет рабочий, но правильнее поставить перед платой аттенюатор или полосовой фильтр.
Причина 2: не выполнены калибровки. Квадратурная коррекция и коррекция утечки гетеродина дают десятки децибел подавления зеркала и несущей. Без них картина будет плохой. В комплектном примере маска начальных калибровок включает почти всё, но убедитесь, что TALISE_waitInitCals вернул успех.
Причина 3: работа на нижнем краю диапазона. Ниже 200 МГц входные и выходные цепи платы дают существенные потери (см. главы 4 и 5), и отношение сигнал/шум просядет.
Наблюдательный приёмник не работает
Причина. Балуны T4 и T5 в схеме помечены как опциональные (TCM1-83X-1+/NC) и на плате могут физически отсутствовать. Тогда тракт от разъёма SMA до входа ORX1_IN± разорван.
Решение. Посмотреть на плату. Если позиция пустая - впаять TCM1-83X-1+. Заодно проверить конденсаторы C116, C117, C121, C122, тоже помеченные NC.
Внешний гетеродин не работает или ухудшает характеристики
Причина. Балун T7 на входе внешнего гетеродина - HHM1595A1 с рабочим диапазоном 3000…8000 МГц. А внешний гетеродин для ADRV9009 должен быть вдвое выше частоты настройки. Значит через этот вход реально работают только частоты настройки примерно 1.5…4 ГГц, а не весь диапазон трансивера.
Кроме того, гарантированные пределы балуна (фазовый баланс 180° ± 20°, амплитудный ±2.5 дБ) хуже, чем рекомендует ADI для этого входа (не более 5 градусов и 1 дБ). При работе с внешним гетеродином подавление зеркала может оказаться хуже ожидаемого.
И ещё. Внешний гетеродин обязан быть фазово привязан к тактовой частоте устройства, а его модуль (modulus) выставлен равным 8 386 560 - как у внутреннего.
Отсчёты не доходят до памяти
Причина. В комплектном FPGA-проекте нет DMA. Порты S_AXI_HP процессорной системы отключены, axi_dmac отсутствует, принятые отсчёты попадают только в анализатор ila_adc.
Решение. Либо добавлять контур передачи данных самостоятельно (включить порт HP, вставить DMA, написать драйвер), либо переходить на официальный HDL от ADI, где axi_dmac уже есть.
Профиль 250 МГц полосы передатчика не запускается
Причина. Он требует скорости линии 12288 Мбит/с. Для Zynq-7000 в корпусе FFG предел 12.5 Гбит/с достижим, но только при повышенном питании трансиверов VMGTAVCC = 1.05 В вместо 1.0 В, что обеспечивает носитель. Проверяйте документацию платы.
Именно поэтому ADI и рекомендует для полной совместимости свою материнскую плату EVAL-TPG-ZYNQ3, отмечая в FAQ, что «поддерживаемая скорость GTX у ZC706 меньше».
Оценочное ПО не видит плату на ZCU102
Причина. Transceiver Evaluation Software совместима только с ZC706 и EVAL-TPG-ZYNQ3. С ZCU102 она не работает, и добавлять поддержку ADI не планирует.
Решение. Либо ZC706 для работы с утилитой, либо путь через Linux и IIO Oscilloscope на ZCU102.
Носитель срабатывает по защите при включении
Причина. На плате не реализована последовательность включения рельсов: все четыре канала регулятора ADP5054 стартуют одновременно, так как их делители на выводах разрешения одинаковые. Даташит ADRV9009 предупреждает, что при несоблюдении рекомендованной последовательности повреждений не будет, но пусковые токи окажутся выше расчётных.
При лимите линии 12 В на разъёме FMC в 1 А (по стандарту VITA 57.1) и рабочем токе платы порядка 0.65 А запас невелик. Если защита носителя чувствительна к всплескам, возможны ложные срабатывания.
Заодно отметим: предохранитель на плате рассчитан на 2 А, то есть вдвое выше лимита стандарта по этой линии. Он защитит плату от катастрофы, но не защитит линию 12 В носителя от перегрузки. Это должен делать сам носитель.
Характеристики уходят со временем работы
Причина. Перегрев. Только ADRV9009 рассеивает до 5.7 Вт, вся плата - 7–7.5 Вт, радиатора на трансивере нет.
Решение. Обдув, особенно в закрытом корпусе. Контролировать температуру можно через встроенный датчик трансивера, доступный через вспомогательный АЦП, и это стоит делать в своём ПО постоянно.
Инструменты диагностики
Два светодиода состояния AD9528. Самый быстрый индикатор: горят - тактирование в порядке. Смотреть до подключения осциллографа.
Консоль UART. Комплектный bare-metal пример подробно печатает каждый шаг: захват PLL, версии API и прошивки, результат калибровок, состояние линков, частоту гетеродина, частоту отсчётов. Читать внимательно - там обычно и лежит ответ.
ILA в комплектном проекте FPGA. Анализатор ila_adc подключён к выходу транспортного уровня и позволяет прямо в Vivado посмотреть принятые отсчёты I и Q. Единственный способ увидеть данные в комплектном проекте, поскольку DMA в нём нет.
Регистры состояния JESD-ядер. Доступны по AXI-Lite (0x43C00000 для TX, 0x43C10000 для RX, 0x43C40000 для ORX, 0x43C20000 для физического уровня). Там видно состояние конечного автомата синхронизации, счётчики ошибок, признаки выравнивания лейнов.
Прерывание GP_INTERRUPT. Трансивер сообщает о срыве захвата PLL, перегреве, ошибках JESD204B. Выведено на пару LA04_N. В комплектном примере не используется, но в своём ПО стоит задействовать.
Нулевые резисторы. По всей плате разбросаны перемычки 0 Ом на каждой линии управления, на каждом домене питания, на каждой ВЧ-паре. Это точки для замера и разрыва цепи. Ими стоит пользоваться: например, чтобы измерить ток конкретного домена питания или подключиться щупом к дифференциальной паре.
Глава 13. Итоги
Что это в итоге
FMC_ADRV9009 - покомпонентная копия оценочной платы Analog Devices ADRV9009-W/PCBZ, сделанная китайским производителем и продающаяся в разы дешевле оригинала. Радиокарта в форм-факторе FMC HPC с широкополосным трансивером на два передатчика, два приёмника и два наблюдательных входа, диапазоном 75 МГц – 6 ГГц и интерфейсом JESD204B.
Разбор схемы показал, что копия сделана добросовестно: те же компоненты, что у ADI, правильная топология, следование рекомендациям даташита в служебных цепях, аккуратные решения там, где они требуются. Это не «нарисовали похожее», а именно воспроизведение референсного дизайна.
Сильные стороны
Работает вся официальная инфраструктура ADI. Проекты HDL из репозитория analogdevicesinc/hdl, драйверы Linux в подсистеме IIO, Windows-утилита Transceiver Evaluation Software, документация UG-1295 - всё это применимо без адаптации, потому что плата электрически идентична оригиналу. Это главное преимущество клона перед любой самодельной или экзотической платой.
Схема грамотная. Отдельный ферритовый фильтр на питание VCXO, чтобы не портить фазовый шум. Веер конденсаторов разных номиналов для широкополосного заземления. Питание сериализатора и десериализатора JESD204B взято с аналогового рельса, а не с цифрового. Нулевые резисторы на каждой линии управления и на каждом домене питания как точки для отладки. Использование того факта, что AD9528 при старте прозрачно пропускает VCXO на выходы 12 и 13, - благодаря этому трансивер получает тактирование до всякой настройки. Ни одно из этих решений не случайно.
Схема есть в комплекте. Все семь листов с номиналами и позиционными обозначениями. Для оценочной платы это норма, но для клона за десятую долю цены - приятно. И это, помимо прочего, готовый референс, если вы собираетесь разрабатывать свою плату на ADRV9009.
Полный набор возможностей микросхемы разведён. Все четыре линии JESD204B в обе стороны, все шесть ВЧ-портов, вход внешней опорной частоты, вход внешнего гетеродина, оба сигнала синхронизации в каждую сторону. Схема не накладывает ограничений на конфигурацию - они приходят только от носителя.
Есть какой-то референсный проект. Комплектные проекты Vivado и Vitis, пусть и с оговорками, дают работающую отправную точку: понятно, какие частоты, какая конфигурация JESD204B, в каком порядке инициализировать.
Вход опорной частоты сделан правильно. Балун MABA-007159-000000 работает от 4.5 МГц, разделительный конденсатор 100 нФ, согласование у приёмника. Значит можно подать 10 МГц от рубидиевого или GPS-стандарта и получить привязку всей системы к эталону - а это открывает путь к точным измерениям и к синхронным многоканальным системам.
Слабые стороны
Порог входа высокий как с технической так и с финансовой стороны. Нужен подходящий носитель (а он дорогой), умение работать с Vivado, понимание JESD204B, готовность читать код Talise API. От покупки до первого принятого сигнала - от нескольких дней до нескольких недель. Это не «подключил и работает».
ВЧ-тракт рассчитан на сотовые диапазоны. Расчёт по номиналам показывает, что ниже 200 МГц входные и выходные цепи дают существенные потери: около 4 дБ на 75 МГц во входной цепи и около 6 дБ в выходной. Для LTE и 5G это неважно, для УКВ-задач придётся перепаивать пассивные элементы. Работа несложная, но её надо запланировать.
Вход внешнего гетеродина ограничен. Балун HHM1595A1 работает 3–8 ГГц, а гетеродин должен быть вдвое выше частоты настройки. Значит через этот вход реально доступны частоты настройки примерно 1.5–4 ГГц вместо полного диапазона. Плюс гарантированные пределы балуна по фазовому и амплитудному балансу хуже рекомендаций ADI.
Наблюдательные входы могут не работать из коробки. Балуны T4 и T5 в схеме помечены как опциональные. Смотреть надо на конкретную плату.
Нет вспомогательного АЦП и почти нет GPIO. Четыре канала AUXADC заземлены, девятнадцать низковольтных GPIO и восемь из двенадцати 3.3-вольтовых не разведены. Если ваша система требует управления внешним усилителем по GPIO или контроля его температуры через AUXADC, эта плата не даст такой возможности - придётся брать управление на FPGA.
Комплектный проект - не приёмник, а стенд. В нём нет DMA: порты S_AXI_HP отключены, отсчёты можно только посмотреть в анализаторе ILA. Для любого практического применения контур передачи данных придётся делать самому либо переходить на официальный HDL от ADI.
Качество комплектного кода среднее. Цикл ожидания захвата PLL без таймаута с печатью в консоль на каждой итерации. Имена переменных, оставшиеся от другого проекта (gpio_lmk_reset вместо AD9528). Несогласованные версии API между SD-образом и bare-metal примером. Работает, но полагаться на это как на промышленный код нельзя.
Опечатки в схеме. Два блока с одинаковым заголовком ORX1 INPUT, блок FILER вместо FILTER. Безвредно, но показывает, что схему перерисовали без вычитки. При работе с ней проверяйте сомнительные места по цепям, а не по подписям.
Последовательность включения питания не реализована. Все четыре рельса стартуют одновременно. Повреждений это не вызывает, но пусковые токи выше расчётных - а лимит линии 12 В на разъёме FMC всего 1 А при рабочем токе платы 0.65 А. Плюс предохранитель на 2 А выше этого лимита.
Никаких гарантий по характеристикам. Неизвестно, какие реально стоят балуны, какой материал печатной платы, насколько аккуратно выполнено согласование и опорные слои. Для «увидеть сигнал» достаточно, для измерений с заявленной в даташите точностью - нет.
Ловушка с EEPROM. IPMI EEPROM может быть не прошита, и тогда на платах AMD семейства UltraScale напряжение VADJ просто не включится. Причина невидимая, симптомы уводят в сторону софта. Лечится, но знать об этом надо заранее.
Кому это подойдёт
Разработчику, который планирует свою плату на ADRV9009. Самый доступный способ получить микросхему в руки, проверить профили, отладить софт до готовности своего железа. Плюс схема оригинала как референс. Здесь плата окупается однозначно.
Исследователю или студенту, изучающему широкополосные SDR и JESD204B. Возможность потрогать руками полный bring-up JESD204B subclass 1 с детерминированной задержкой, SYSREF и выравниванием лейнов дорого стоит. По документации этому не научиться.
Разработчику систем в диапазоне 400 МГц – 6 ГГц. Прототипирование MIMO 2×2, работа с полосами LTE и 5G NR, построение внешнего контура DPD через наблюдательный приёмник. Плата попадает ровно в целевое применение оригинала.
Радиолюбителю или энтузиасту с опытом FPGA. Если у вас уже есть подходящий носитель и вы умеете работать с Vivado, это уникальная по возможностям железка за свои деньги. Двух передающих и двух приёмных каналов с полосой 200 МГц не даст ни один SDR сравнимой цены.
Кому не подойдёт
Тем, кто ищет готовый SDR. Здесь нет ни USB, ни Ethernet, ни ПО «из коробки», ни FPGA. Смотрите на PlutoSDR, USRP, LimeSDR, HackRF - в зависимости от задачи.
Тем, у кого нет подходящего носителя и бюджета на него. Носитель обойдётся дороже самого модуля. Считайте полную стоимость решения, а не цену платы.
Тем, кому нужны частоты ниже 100 МГц или выше 6 ГГц. Первое требует переделки пассивных цепей, второе невозможно.
Тем, кто ждёт метрологической точности. Для этого оригинальная плата ADI или своя разработка с узкополосным согласованием.
Тем, кто не готов разбираться. Реально придётся: собирать проект в Vivado, читать код Talise, разбираться с деревом устройств Linux, ловить проблемы вроде непрошитой EEPROM. Если это не про вас, деньги будут потрачены зря.
Что стоило бы улучшить
Если бы этот модуль делали заново, вот что имело бы смысл изменить.
Реализовать последовательность включения питания. У ADP5054 для этого есть всё: сигнал готовности PWRGD с открытым стоком и возможность каскадного запуска через выводы разрешения. Сейчас PWRGD просто подтянут и никуда не заведён.
Уменьшить порог токовой защиты. Резисторы 22 кОм на выводах DL1/DL2 задают порог 10.4 А при рабочем токе около 2 А. Значение 47 кОм дало бы 3.8 А - гораздо разумнее.
Поставить нормальный балун на вход внешнего гетеродина. HHM1595A1 с диапазоном 3–8 ГГц покрывает лишь часть возможных частот настройки. Широкополосный балун вроде того же TCM1-83X-1+ был бы уместнее.
Вывести хотя бы часть GPIO и AUXADC. Даже пара контактных площадок дала бы возможность управлять внешним усилителем и мерить его температуру. Место на плате под это есть.
Прошивать EEPROM на производстве. Одна операция при выпуске избавила бы покупателей от самой неочевидной проблемы при запуске.
Подтянуть выводы WP# и HOLD# SPI-флеш. Сейчас они висят в воздухе. Мелочь, но недочёт.
Вычитать схему. Два блока ORX1 INPUT и FILER вместо FILTER исправляются за минуту.
Добавить DMA в референсный проект. Именно этого не хватает, чтобы комплектный проект стал полезным, а не только демонстрационным. Без DMA любой пользователь вынужден проделывать одну и ту же работу заново.
Плата делает то, что от неё требуется: даёт доступ к ADRV9009 по цене, несравнимой с оригиналом, сохраняя совместимость со всей инфраструктурой Analog Devices. Схемотехника воспроизведена грамотно, серьёзных ошибок в ней нет - все найденные замечания либо косметические, либо касаются осознанных компромиссов оригинального дизайна. Расплачиваться приходится высоким порогом входа, необходимостью дорогого носителя, отсутствием гарантий по ВЧ-характеристикам и парой ловушек, о которых лучше знать заранее. Если вы понимаете, зачем вам ADRV9009, и у вас есть на чём его запускать - это разумная покупка. Если нет - сначала разберитесь с носителем и с тем, что именно вы хотите получить.
Размещайте облачную инфраструктуру и масштабируйте сервисы с надежным облачным провайдером Beget.
Эксклюзивно для читателей Хабра мы даем бонус 10% при первом пополнении.
