Files
templates/tools/dsview/zynq-ethernet

Нативный Zynq Ethernet для DSView

Драйвер регистрирует сетевой прибор в списке DSView. Через нативные Run и Stop он читает каналы по TCP (ZLA1/ZLS1) или UDP (ZLT1/ZLB1/ZLP1/ZLP2/ZLR1). Фронты декодируются из тех же отсчётов, которые получает экран DSView. Для RJ2 драйвер запрашивает буфер сокета 32 МиБ и восстанавливает порядок отсчётов в окне на 16 384 UDP-пакета. При разрыве запись сохраняет непрерывный фрагмент до пропущенного пакета.

Для сборки нужны MSYS2 UCRT64 и зависимости из основного рецепта. Исходный DSView берётся из upstream. Рецепт применяет патчи SETGUI и ethernet.patch, копирует драйвер, дисковый писатель и заголовки, затем собирает полный runtime.

git clone https://github.com/DreamSourceLab/DSView.git build/dsview-upstream
git -C build/dsview-upstream checkout 2e9e2c8e726df4ef5687d39b83d4f797cc44b574
python tools/dsview/zynq-ethernet/build.py --msys-root C:/msys64 --output build/dsview

Для SETGUI положите полный каталог dsview рядом с приложением. Внутри DSView нажмите Zynq Ethernet…, введите IPv4, выберите режим и используйте обычные настройки частоты, длительности и каналов. С прошивкой ZLP2 список частот учитывает число включённых каналов. Для Zynq RJ2 режим выбирается через Options → Operation Mode. FPGA Snapshot (Advanced) передаёт окно из BRAM после аппаратного срабатывания. Глубина до 65 536 отсчётов, до 200 Мвыб/с на всех восьми каналах. ZLT1 включает меню Advanced: до 16 стадий, AND/OR, инверсию, число совпадений, смежные совпадения и Serial Trigger с условиями Start/Stop/Clock и шаблоном данных. Буфер хранит предысторию по положению триггера. В 16-позиционных полях DSView входы D0–D7 — восемь правых позиций.

  • Buffer Mode пишет один ZIP64 DSL порциями до Stop. Экран показывает ожидание триггера и длительность записи после его срабатывания. Полный захват виден после закрытия файла.
  • Stream Mode → Single пишет выбранную длительность до 60 минут и показывает текущее окно при записи. После окончания график переключается на полный файл. Repetitive повторяет захваты, Loop показывает поток в кольцевом окне.

Options → Max Height задаёт высоту дорожек от 1X до 5X. Перетаскивание двойной черты под меткой канала меняет высоту этой дорожки. Оно доступно для всех цифровых источников: Demo, USB, Zynq, обычных файлов DSL и записей RJ2. Графики PWM изменяют высоту таким же жестом. Текстовые поля анализаторов имеют фиксированную высоту по размеру шрифта: между заголовком и полем, а также между полем и следующим заголовком остаётся 2 пикселя. Высота входных каналов, Max Height и растягивание PWM не увеличивают эти промежутки. Нижнюю границу можно захватить по всей ширине заголовка дорожки. Размеры каналов и анализаторов независимы и сохраняются при изменении размера окна и обновлении декодирования. Изменение Max Height задаёт общий размер заново. Колесо над метками прокручивает список дорожек.

Скрытие и показ строк анализатора, обычное подтверждение неизменённых настроек и переключение PWM split / combined используют уже рассчитанные аннотации. Повторный анализ выполняется при смене входов, параметров расчёта, границ анализируемого диапазона или исходной записи.

Новые файлы содержат индекс zynq_tiles.bin. Общий масштаб читает индекс, при увеличении график читает точные отсчёты нужных блоков. Для старых файлов RJ2 индекс строится в памяти при открытии. Время открытия зависит от размера записи и скорости диска. При сетевой ошибке файл содержит непрерывный префикс принятых данных. При ошибке диска может остаться временный файл .part-*.

Потеря связи останавливает также Repetitive и Loop. Причина ошибки и кнопка Закрыть показаны в панели DSView перед графиком. Предупреждение скрывается вместе с вкладкой и не блокирует закрытие DSView или приложения-хоста. После восстановления связи захват запускается вручную кнопкой Run; повторные окна ошибки не накапливаются.

Нативная проверка обрыва без платы запускается на Windows из каталога рецепта:

python tests/check_link_loss.py --source <checkout-DSView> --runtime <проверочный-runtime> --output <артефакты> # Проверяем собранный checkout на отдельной копии runtime с сохранением результатов в каталоге артефактов.

Нужен собранный build-win64 и отдельная полная копия runtime: проверочный EXE создаётся рядом с её ресурсами. Loopback-эмулятор занимает UDP 37575. Сценарий проверяет остановку повтора, отсутствие модальности и дубликатов, запоздавшие сигналы ошибки, ручной запуск, целостность сохранённого DSL и штатное закрытие с открытым предупреждением. Текст и кнопка проверяются на видимость в настоящем встроенном окне; переход на соседнюю страницу проверяет скрытие через Win32. Снимки notice-*.png показывают предупреждение.

При поддержке ZLR1 частота 200 Мвыб/с доступна и для 5–8 каналов. В этом случае FPGA запускает поток по аппаратному триггеру и сжимает повторы уровней без потерь. Если входы меняются слишком часто и очередь переполняется, захват завершается с ошибкой. На 1–4 каналах 200 Мвыб/с по-прежнему идут через ZLP2 с фиксированным темпом. Прошивка и пины относятся к проекту платы.

package_arm.py упаковывает тот же набор декодеров для Linux armhf. Платформенная сборка, FPGA, ядро и переключатель AUX ETH / Local относятся к проекту прибора.