EdigE
← ЛЕНТА

RTL-блок поселили в GNU Radio и проверяют до сборки FPGA

В одном окне GNU Radio работают два варианта будущего передатчика. Первый — привычный программный DSP-блок. Второй получает те же входные байты, но внутри него тактируется Verilator-модель RTL, а её 16-битные I/Q-слова возвращаются в комплексный поток. Оба выхода можно сразу свести на сравнение, посмотреть созвездие или прогнать через следующий блок тракта. FPGA в этот момент ещё не синтезирована.

Именно эту связку команда готовит для DVB-S2-передатчика на ZCU102 с MxFE AD9081. Обычный путь от правки Verilog до проверки на плате проходит synthesis, place-and-route, генерацию bitstream и загрузку железа. Авторы доклада для GRCon оценивают такой цикл в 10–30 минут. В их Verilator-контуре обратная связь после изменения RTL заявлена менее секунды: меняется только исполняемая модель, включённая в уже существующий flowgraph.

Такой стенд ловит гораздо больше, чем грубую ошибку в отдельном модуле. GNU Radio-реализация продолжает задавать математику: порядок битов, framing, форму импульса, масштабирование и ожидаемый поток отсчётов. RTL проходит тот же stimulus с той же последовательностью данных. Расхождение появляется там, где его можно локализовать до появления лабиринта из IP-ядер, DMA и отладочных пробников на плате.

RTL получает тот же эфир из отсчётов

В опубликованном коде мост вполне осязаем. Embedded Python block создаёт PyVerilator-модель, подаёт ей входы и фронты тактового сигнала, затем забирает `out_i` и `out_q`. То есть модель логики не рисует абстрактный результат алгоритма: она живёт в циклах и регистрах RTL. В этом и состоит удачный компромисс. Проверяются задержки и последовательность тактовых состояний, а тяжёлый физический этап FPGA-сборки пока вынесен за пределы внутреннего цикла.

Самое ценное здесь — постепенный перенос тракта. Сначала вся радиоцепочка существует как CPU-flowgraph. Затем QPSK-кодер, physical-layer framer или pulse-shaping filter получают RTL-двойника; исходный блок остаётся рядом как oracle. Когда пара совпала на нужном наборе данных, ей уже можно заниматься в железе: выбирать fixed-point разрядности, выравнивать буферы, проверять CDC, закрывать timing и считать LUT, DSP-блоки и RAM. Такой порядок не обещает, что implementation пройдёт безболезненно. Он убирает из этой стадии спор о том, верна ли сама DSP-идея.

От симуляции к радиотракту

Где кончается доказанное

Авторы заявляют, что часть DVB-S2-цепочки — QPSK encoder, physical-layer framer и pulse-shaping filter — работала на 250 MSPS на связке ZCU102 и AD9081. Платформа для такой частоты правдоподобна: reference design Analog Devices для AD9081-FMCA-EBZ на ZCU102 документирует 250 MSPS для конвертерного тракта через FMC HPC0 и JESD204B. Однако для конкретной DVB-S2-реализации пока нет опубликованных timing report, utilization, спектра или EVM.

Открытый `grc-hdl` доказывает сам принцип интеграции, но его доступный flowgraph скромнее громкой цели: он использует `ook.v`, частоту 32 kS/s и демонстрирует bytes-to-I/Q encoder. Это воспроизводимый маленький стенд, а не исходники полного 250-MSPS DVB-S2-передатчика. Также sub-second относится к проверке Verilator-модели внутри GNU Radio; synthesis, place-and-route и bitstream по-прежнему занимают своё время.

И всё же инженерная мысль уже достаточно сильна. FPGA-разработка часто заставляет ждать физическую реализацию даже ради ответа на вопрос о нескольких регистрах и одном коэффициенте фильтра. Здесь будущий аппаратный блок сначала становится участником обычной радиолаборатории: его кормят реальными отсчётами, сталкивают с программным эталоном и переносят на кристалл лишь после того, как поведение перестало быть загадкой.