Commit Graph
38 Commits
Author SHA1 Message Date
Ayzen 5bb86b7165 Rework radar system 2026-10-06 12:32:26 +03:00
Ayzen 8f097dfa2e Refactor radar system 2026-10-05 16:46:28 +03:00
Ayzen 45861f4047 sar3d: GPU port of the notebook with four views
The sar3d processor is rewritten as a checked port of Multi_antenna_3D_clean_v1.ipynb:
NVRTC kernels, timing from the trace stamps, notebook parameter names and one cubic
SAR_VOXEL_M. It adds front, side, top and 3D views, drops gpr_cpp and the parity tools,
and the GUI speed now applies only while the socket speed is ignored.
2026-10-02 16:05:22 +03:00
Ayzen 61ef8720e1 number stimulus outputs in device stage order
The output index now equals the device stage, so outputs follow the order the
device measures them: master port 1 through its switch positions, then port 2.
The previous position-major numbering permuted the middle two against the
physical order, so data captured before this needs its calibration re-captured.
2026-10-02 13:57:33 +03:00
awe b3339d101c projector version 2026-09-15 19:06:05 +03:00
AyzenandClaude Opus 5 59c9d4f255 fpga: replace variable shift with a compare mask in port gating
Контрольная сборка стока в ISE показала, что первая версия правки внесла
нарушение тайминга: сток даёт Timing Score 0, а она — 1880 (hold на входе
MCU_MOSI). Причина — shift_right с переменным сдвигом синтезируется в barrel
shifter, а вызывался он четырежды: +142 LUT при +3 регистрах, из-за чего
поехало размещение и пострадала SPI-шина, по которой MCU пишет регистры FPGA.
Сбой там означал бы неверную конфигурацию развёртки.

Теперь младшие биты счётчика стадий просто маскируются, а маска декодируется
из SUBSTAGE_BITS тремя вентилями. Итог: 2182 LUT против 2189 у стока, то есть
логика стала дешевле стоковой. При SUBSTAGE_BITS=0 маска все единицы и
выражение вырождается в стоковое stage_cnt = port_stage буквально.

Заодно контракт стал однозначнее: хост присылает ПЕРВУЮ стадию блока порта, а
не индекс порта. Без под-стадий это то же число, поэтому стоковая совместимость
сохраняется, а зарезервированное "7 = порт выключен" больше не может совпасть с
настоящей стадией (при четырёх под-стадиях маскированная семёрка совпадала с
блоком второго порта).

Из VHDL убраны не-ASCII символы: GHDL отвергает их даже в комментариях.

Проверено: тестбенч проходит все четыре сценария и падает под мутацией
(8 сработавших проверок), 305 python-тестов зелёные, ISE собирает битстрим.
Остаточное нарушение hold на MCU_MOSI ловится подбором cost table размещателя —
ограничение маргинально уже в стоке (запас +0.458 нс).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-10 14:02:30 +03:00
AyzenandClaude Opus 5 c1f8654677 review fixes: shared mock capture window, 2-position controller caveat
Мок-бэкенд ставил каждому трейсу свой capture_end_ns, потому что метка бралась
в момент создания трейса. На реальном железе все комбинации коллекции выходят из
одного синхронизированного цикла и делят одно окно — мок теперь ведёт себя так
же, иначе он вводит в заблуждение при чтении записанных меток.

В README контроллера добавлена оговорка: прошивка рассчитана ровно на два
положения ключа. Хост допускает и 4, но тогда положение перестаёт быть
чередованием одного бита и нужен контроллер на две управляющие линии.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 22:15:50 +03:00
AyzenandClaude Opus 5 6693ece0aa per-point stimulus switching: host side
Матрица 4x4 за одну развёртку: каждый порт мастера измеряется на каждой частоте
дважды, с двумя положениями выходного ключа. Ключ дёргает контроллер в
триггерной петле, поэтому расбери переключателями больше не управляет —
SwitchedMatrixRadarService уходит из тракта, все 16 комбинаций снимаются в
пределах одной точки вместо разброса между тремя развёртками.

Выходы нумеруются позиция-мажорно, стадии порт-мажорно (старшие биты счётчика
стадий выбирают порт, младший — положение ключа). Из этого следует, что
положение ключа = младший бит номера стадии, а период 2 нацело делит 4 стадии —
поэтому контроллеру достаточно инвертировать ногу на каждый цикл триггера, без
абсолютного счётчика. Выходы 0 и 1 при этом сохраняют прежний смысл.

Приёмники слейвов пронумерованы от числа выходов + 1, а не от фиксированного 3:
иначе при 4 выходах прямой член «приёмник 3 <- выход 3» назывался бы так же, как
отражение выхода 3. При двух выходах даёт прежние порты 3..6.

Слейвам порт-стадии выставляются в 7: стоковый приём «одна за последней стадией»
перестаёт работать, когда порт выбирается старшими битами.

Всё за флагом multi_device.stimulus_switch_positions (1 = прежнее поведение,
байт в байт). Спецификация правок FPGA/STM в device_firmware/per_point_switching.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 21:26:56 +03:00
Ayzen 7997abe2d9 added capture time for every sweep 2026-09-03 17:30:19 +03:00
Ayzen 6ada811c2f some fixes 2026-08-26 15:02:21 +03:00
BogatskiyG 74723bb635 Merge branch 'laser-temp-monitoring' into feature/switched-matrix-radar 2026-08-04 14:57:03 +03:00
BogatskiyG 7c6cab07fc some changes and log fix 2026-07-30 19:58:53 +03:00
BogatskiyG 68bec25f17 Add real switch support for multi-device matrix radar
MultiDeviceLibreVnaService only exposes the 2x4 virtual combo matrix on
its own USB transport. When a physical GPIO switch sits on the master
stimulus and/or slave receiver path, the effective matrix is wider than
that. SwitchedMatrixRadarService wraps the inner service and drives the
extra switch(es) between acquire_collection calls, widening the combo
matrix by the physical position counts (matrix_output_switch_positions /
matrix_input_switch_positions in RunConfigModel).

Combo-matrix construction was centralized into
RunConfigModel.build_runtime_combos() so the GUI, workflows, and codec
all derive the same widened matrix instead of each computing its own
version of the virtual 2x4 layout.
2026-07-29 17:44:28 +03:00
awe 52c1218bf7 Independent monitor + checker for CHANGE_CURRENT_LD1 variation 2026-07-27 16:24:58 +03:00
Ayzen 3efe968dd1 some kamil_adc fixes 2026-07-02 17:44:24 +03:00
Ayzen 8db14b9482 added data saving feature 2026-06-23 12:19:31 +03:00
Ayzen d7ddca6e76 added diagnostics 2026-06-22 16:30:55 +03:00
Ayzen 7c381facaf some fixes 2026-06-22 15:01:26 +03:00
Ayzen e7f2d25585 new gpr 2026-06-13 12:07:23 +03:00
Ayzen 9661504e51 new kamil adc 2026-06-11 13:02:02 +03:00
Ayzen aea49f6128 improved logging 2026-06-06 00:52:52 +03:00
Ayzen af6005d68f web UI added and refactoring done 2026-06-06 00:06:30 +03:00
Ayzen 3c30a12d4a some fixes again 2026-06-05 17:50:59 +03:00
Ayzen bbea744459 some fixes 2026-06-05 14:40:10 +03:00
Ayzen 22942d9dc9 some fixes 2026-06-04 18:33:38 +03:00
Ayzen eacea436a4 some fixes and improvements 2026-05-28 14:33:12 +03:00
Ayzen 83a934f251 added timing 2026-05-26 15:08:56 +03:00
AYZEN 5b480f1b55 sn9000 support 2026-05-20 16:20:34 +03:00
Ayzen 1c544aa582 added median sweep and fixed multi device issue 2026-05-20 16:52:06 +03:00
Ayzen 0da8b1283c working version 2026-05-18 17:27:00 +03:00
Ayzen 907dbf29ce kamil_adc support added 2026-05-08 21:23:52 +03:00
Ayzen bde86813e5 first attempt at radioradar 2026-05-06 18:15:50 +03:00
Ayzen 5a70235ef3 added remote k209 setup 2026-04-29 16:32:39 +03:00
Ayzen e05c06bcbe added k209 driver 2026-04-29 15:20:56 +03:00
Ayzen 1ea2aabf87 added multidevice support 2026-04-28 17:29:21 +03:00
Ayzen 4abc95c372 added generator mode 2026-04-01 13:00:01 +03:00
Ayzen 077542cbd0 added s11! 2026-03-26 18:29:42 +03:00
Ayzen fd4618b20d init commit 2026-03-05 14:42:33 +03:00