Переключение стимула внутри частотной точки — что собрать
=========================================================

Матрица 4x4 за одну развёртку: каждый порт мастера измеряется на каждой частоте
дважды, с двумя положениями выходного ключа. Подробное описание —
device_firmware/per_point_switching.md в репозитории.

ЧТО ЗДЕСЬ
---------
  make_files.sh          собирает files\ и SHA256_new.txt из дерева репозитория
  files\                 8 файлов дерева LibreVNA (НЕ в git, генерируется)
  install.cmd            бэкап оригиналов + установка + сборка MCU
  build_mcu.cmd          только сборка MCU (если правки уже стоят)
  backup_original\       появится после install.cmd — оригиналы для отката
  SHA256_new.txt         хеши устанавливаемых файлов для проверки

Изменены: FPGA/VNA/{Sweep,SPIConfig,top}.vhd,
          FPGA/VNA/VNA.xise  <- закреплён Starting Placer Cost Table = 2,
                                без него сборка даёт нарушение тайминга
          Software/VNA_embedded/Application/VNA.cpp,
          Software/VNA_embedded/Application/Drivers/FPGA/FPGA.{cpp,hpp}
Добавлен: FPGA/VNA/Test_Sweep.vhd (тестбенч, в проект ISE не входит)

ПЕРЕД ОТПРАВКОЙ НА WINDOWS запустить на машине с репозиторием:
    bash install_windows/make_files.sh
Каталог files\ не версионируется намеренно: когда он лежал в git, после
переделки Sweep.vhd и закрепления cost table комплект молча остался со старыми
версиями. Генерация из дерева исключает это.

ВАЖНО: ПЕРЕПРОШИВАТЬ НАДО ТОЛЬКО МАСТЕР
---------------------------------------
Слейвы остаются как есть. Хост выставляет им обе порт-стадии в 7, а стоковое
сравнение "stage_cnt = порт-стадия" при счётчике 0..3 с семёркой не совпадает
никогда — то есть слейв не излучает и без доработки, а четыре стадии на точку
отрабатывает по тому же полю STAGES, что и раньше.

Значит slave-битстрим пересобирать не нужно, а он побайтово невоспроизводим.

ШАГ 1. Установка правок и сборка MCU
------------------------------------
    install.cmd

Собирается мастер тулчейном STM32CubeIDE 1.17.0 (gcc 12.3.1).
Результат: ...\reproduce\LibreVNA\Software\VNA_embedded\build\VNA_embedded.bin

ШАГ 2. Битстрим FPGA мастера (Xilinx ISE 14.7)
----------------------------------------------
1. Папка FPGA уже скопирована в C:\shared\LibreVNA\FPGA (внутри гостя это
   /home/ise/shared/LibreVNA/FPGA).
2. В ISE открыть VNA.xise — проект МАСТЕРА. Не VNA_external_lo_slave.xise.
3. Process -> Generate Programming File.
4. Забрать top.bin СРАЗУ и переименовать в top_master_per_point_switching.bin:
   оба проекта пишут в один и тот же top.bin, и следующая сборка его затрёт.
   Именно так был потерян исходный мастер-битстрим.
5. Положить его в ...\reproduce\LibreVNA\FPGA\VNA\

   ВНИМАНИЕ: имя обязательно новое. Лежащий там top_master.bin — копия
   НЕВОСПРОИЗВОДИМОГО битстрима текущей рабочей прошивки, перезаписывать его
   нельзя ни при каких обстоятельствах.

Битстрим невоспроизводим побайтово (place & route недетерминирован плюс
timestamp внутри), так что новый файл будет отличаться от старого при любом
исходе — это нормально.

ШАГ 3. Упаковка .vnafw
----------------------
    cd %USERPROFILE%\Documents\radar_system\device_firmware\reproduce\LibreVNA
    python AssembleFirmware.py --bitstream FPGA\VNA\top_master_per_point_switching.bin ^
        --mcu Software\VNA_embedded\build\VNA_embedded.bin ^
        --output ..\combined_per_point_switching.vnafw

Имя намеренно новое: НЕ перезаписывайте combined.vnafw, пока не проверите всё на
железе — это ваш путь отката.

ШАГ 4. Заливка
--------------
LibreVNA-GUI: Device -> Firmware Update, скормить .vnafw целиком.

ШАГ 5. Проверка
---------------
1. Сначала СТАРЫЙ режим (stimulus_switch_positions: 1) — должен работать ровно
   как раньше. Только потом включать переключение.
2. Осциллографом на контроллере ключа: PB2 и PB6 — положение ключей (порт 1 и
   порт 2, меняются одновременно), PB5 — импульс на
   каждое исправление чётности (в норме молчит). На одной частоте должно быть
   четыре стадии и два периода A B A B.
3. По USB CDC контроллера, остановив развёртку: parity corrections : 0 и
   stages per point : 4.

ОТКАТ
-----
    xcopy /s /y backup_original\* ^
        "%USERPROFILE%\Documents\radar_system\device_firmware\reproduce\LibreVNA\"
и залить обратно старый combined.vnafw.
