Лабораторная 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 и больший запас по таймингу остаются открытыми воротами.