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

Блок 11: разборы случаев отладки

Около половины лабораторных блока 11: не упражнения, а запись того, как модем заставляли работать на реальном оборудовании. Каждая фиксирует один отказ, эксперименты, которые его сузили, и в итоге причину. Читайте их после основного пути как разобранные примеры отладки, а не как процедуры для повторения.

Чему учат эти случаи, одним списком

  • Счётчик внутри FPGA: не доказательство излучённого сигнала. Это может сказать только независимый приёмник (случай 3).
  • Успешный тест соседнего пути ничего не говорит о сломанном. Исправный DDS-тон скрыл отключённый путь данных (случай 3).
  • Сначала проверьте, что именно собрано, и только потом: что оно делает. Устаревший block design обесценил недели результатов (случай 4).
  • Знайте, где стоит ваш щуп. Пять лабораторных измеряли здоровый сигнал на один блок раньше того блока, который его портил (случай 7).
  • Разделите популяцию отказов, прежде чем усреднять. «Пол BER» оказался двумя разными дефектами (случай 8).
  • Один эксперимент это одна гипотеза. Отрицательный результат это тоже результат: каждый исключённый подозреваемый сужал поиск (случай 2).
  • Симуляция и закрытие тайминга необходимы, но не достаточны. Право вето у живого A/B-теста (случаи 5 и 6).

Случаи

№ Лабораторные Симптом Чем это оказалось Урок
1 11.8–11.11 Первый пакет PL BPSK не возвращает бит; захват IIO на хосте, идущий одновременно с управлением пакетом, падает с Bus error или тайм-аутом refill. Проблема интеграции вокруг живого PL-дизайна, а не настройки: отключение входа clock-monitor у axi_gpreg убрало Bus error при перекрытии. Сначала оверлей урезали до минимального безопасного при загрузке пути управления. Когда отказ зависит от того, что ещё работает одновременно, перестаньте подбирать усиления и смотрите на структуру. Держите заведомо рабочую базу и меняйте по одному параметру.
2 11.13–11.19 После горячей загрузки runtime-оверлея tx_valid_count > 0, но rx_valid_count = 0, а захват RX на хосте падает по тайм-ауту (errno 110). Не повторная инициализация RX common (11.16), не start_offset 0–127 (11.17), не состояние сессии хоста (11.18), не время прогрева TX (11.19). Позже Лабораторная 11.26 выяснила, что развёрнутый битстрим был собран из устаревшего block design. Каждая лабораторная исключила одного подозреваемого и прямо это зафиксировала. Именно эта запись позволила найти настоящую причину.
3 11.20–11.25 Внешний RTL-SDR декодирует BPSK стокового shell с BER 0 и видит DDS-тон в обоих режимах, но записи runtime-PL остаются на BER ≈ 0,35 без корреляции преамбулы. Сначала страницы заключили «TX исправен, сломан RX». Данные говорили другое: пакета PL в эфире не было. После перезагрузки оверлея ЦАП работает в режиме DDS-only и игнорирует поток PL (выяснено в 11.26). DDS-тон работал, потому что этот поток не использовал. tx_valid_count > 0 доказывает, что отсчёты созданы, а не переданы. Лабораторные 11.22–11.25 теперь содержат исправление.
4 11.26 На оборудовании BER держится около 40–50 %, хотя все симуляции проходят. Шесть дефектов, найденных по одному: ЦАП в режиме DDS-only; устаревший block design, у которого карта регистров не совпадала с хостом (кэш out-of-context синтеза к тому же прятал исправления RTL); сэмплер тайминга, сбрасываемый один раз, из-за чего каждый кадр после первого ничего не восстанавливал; неверный формат отсчётов; пузырь рукопожатия в один такт на символ, опустошавший FIFO ЦАП и искажавший время; и 4-битное окно захвата преамбулы, совпадавшее и с ведущими нулями. После последнего исправления: BER 0 на кристалле. У пола BER в 50 % много возможных причин. Исправьте одну, закрепите её регрессионным тестом, измерьте снова.
5 11.33 Новый выборщик тайминга проходит replay и RTL-тесты и закрывает тайминг. Живой A/B на двух платах оказался хуже принятого приёмника (10–35 % чистых попыток против 67,5 %). Кандидат удалён. Прохождение симуляции и закрытие тайминга необходимы; решает физический A/B.
6 11.35 Петля Гарднера помогает захвату, но не чистым кадрам, и разваливается при нулевом CFO. Дешёвый детектор ошибки использовал независимые знаки по I и Q, поэтому его усиление зависело от поворота созвездия. CFO прокручивает созвездие и маскировал дефект; при нулевом CFO он проявился. Форма через скалярное произведение исправила инвариантность. Тестируйте в условии, которое убирает маскирующую переменную, и давайте парные результаты с доверительными интервалами.
7 11.41 Один бит полезной нагрузки неверен в каждом отмеченном кадре, хотя все измерения сигнала на этом символе в порядке. Точка захвата записывает вход приёмной цепочки; DC-блокер: первый блок после неё, и он следил за данными. Пять лабораторных измеряли правильную величину не в том месте. Знайте, где стоит щуп. Когда измерение и симптом расходятся, подозреваемой становится и схема между ними.
8 11.42 После исправления DC-блокера около 8 % кадров всё ещё грязные. Две популяции: одиночные шумовые ошибки и кадры примерно с половиной неверных бит начиная с бита 0, то есть весь пакет декодирован в неверном повороте из-за ложного захвата кадровой синхронизации. Не усредняйте бимодальный отказ в один BER; разделите его и идите за той популяцией, которая несёт сигнал.

Остальные лабораторные блока 11 вне основного пути (11.9, 11.10, 11.15–11.18, 11.21, 11.23, 11.24): отдельные эксперименты внутри этих случаев.