Перейти к содержанию

Лабораторная 11.27 — BER цифрового loopback QPSK в runtime

Цель

Проверить QPSK-модем через runtime-плоскость управления PL. Вспомогательный скрипт поддерживает прямой loopback в fabric PL для детерминированной квалификации модема и отдельную диагностику цифрового loopback AD9361. Он выбирает QPSK через gp_ctrl[4] и записывает каждую попытку.

Что уже доказано без железа

Каноническая HDL-проверка подтверждает:

  • отображение символов QPSK кодом Грея;
  • loopback QPSK-модема на 140 символов / 280 бит при BER=0;
  • мост gpreg двойного модема при BER=0;
  • упорядоченную передачу 500 отсчётов через асинхронный FIFO между тактовыми доменами RX.

Программное доказательство запускается так:

python tools/run_block5_hdl_smoke.py --no-generate

Команды для платы

Детерминированная квалификация fabric PL без AD9361 и без RF-передачи:

python blocks/block_11_integrated_sdr_project/python/lab_11_27_runtime_qpsk_digital_loopback.py \
  --bit-bin-path tmp/bridge_txrx_mux.qpsk.cdcfix_20260707.wordswap.bit.bin \
  --loopback fabric \
  --start-offsets 62 \
  --retries 10 \
  --no-stop-on-zero \
  --tx-attenuation-db -89.75

Диагностика BIST AD9361:

python blocks/block_11_integrated_sdr_project/python/lab_11_27_runtime_qpsk_digital_loopback.py \
  --start-offsets 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 \
  --loopback ad9361 \
  --retries 20 \
  --run-tag qpsk_clean_boot_01

Скрипт перезагружает runtime-нагрузку, выполняет выбранный loopback, записывает каждую попытку и отладочные счётчики в JSON и возвращает исходное (stock) состояние перезагрузкой, если не указан --no-reboot-after. В режиме fabric перепривязка/конфигурация драйвера AD9361 пропускается.

Ворота приёмки

Ворота Требуемый результат
Плоскость управления считан ожидаемый gpreg ID и активен бит режима QPSK
Полнота кадра принято 140/140 символов QPSK
Число бит 280 сравниваемых бит на полный кадр
Корректность ноль битовых ошибок для успешной попытки
Повторяемость указано число успехов / всего попыток для каждого start_offset
Восстановление после эксперимента доступен stock-контекст IIO

Единичная лучшая попытка с BER=0: свидетельство того, что тракт данных работает, а не того, что он детерминирован. Повышение до статуса measured требует серии чистых загрузок с полной таблицей попыток и заявленной долей успехов.

Необходимые артефакты

  • вывод JSON вспомогательного скрипта;
  • идентичность bitstream/XSA и коммит Git;
  • снимок конфигурации AD9361;
  • число попыток и успехов по каждому смещению;
  • короткий вывод, отделяющий функциональный успех от повторяемости;
  • необязательный спектральный свидетель RTL-SDR, если позже добавится антенна или кабельный тракт.

Измеренный результат: 2026-07-07

QPSK-нагрузка с исправленным CDC и без нарушений тайминга достигла BER=0 при start_offset=62. Четыре независимые сессии stock→runtime→stock прошли, и все 13 попыток при выбранном смещении восстановили 140 символов / 280 бит без ошибок. Каждая сессия успешно вернулась в stock.

См. reports/hardware/qpsk-fabric-loopback-qualification-20260707.md и docs/assets/lab1127_qpsk_fabric_cdcfix_qualification_20260707.json.

Результат квалифицирует ядро QPSK на кремнии, но обходит AD9361 и RF. Источник сырого цифрового loopback AD9361 по-прежнему возвращает ноль символов QPSK. Bitstream-снимок вендора, работающий на железе, теперь укладывается в тайминг с WNS +0,003 нс; внешние свидетельства RTL-SDR по QPSK и больший запас по таймингу остаются открытыми воротами.