Пакет поддержки для управления аппаратной платформой РИТМ SDR USRP
В статье содержатся сведения, необходимые для использования в Engee библиотеки Targets.RITM_SDR_API, предназначенной для дистанционного управления аппаратной платформой РИТМ SDR[1] USRP[2] и обмена данными по сети Ethernet. Приведены требования к среде выполнения, порядок подключения, описание интерфейса прикладного программирования (API) и регистровая карта основных IP-ядер[3].
Назначение и условия применения
Библиотека Targets.RITM_SDR_API предназначена для управления аппаратной платформой РИТМ SDR USRP на базе системы-на-кристалле Xilinx Zynq UltraScale+ и радиочастотного трансивера ADRV9009. Управление осуществляется посредством сетевого взаимодействия с управляющим модулем РИТМ SDR USRP.
РИТМ SDR USRP обеспечивает работу в диапазоне 75 МГц – 6 ГГц при мгновенной полосе до 450 МГц. Библиотека Targets.RITM_SDR_API применяется при разработке, отладке и испытаниях беспроводных систем связи и радиолокации.
Общие сведения
Библиотека Targets.RITM_SDR_API реализует набор строго типизированных методов и макросов языка Julia для выполнения следующих операций:
-
установление и завершение TCP-соединения с управляющим модулем РИТМ SDR USRP;
-
установка радиочастотных параметров и параметров тракта (частота, аттенюация, режимы TX / RX[4]);
-
выполнение процедур сброса и управления IP-ядрами;
-
передача и прием выборок I/Q и служебных данных.
Взаимодействие с РИТМ SDR USRP выполняется через Engee Device Manager. Схема взаимодействия компонентов приведена на рисунке.

Условия выполнения
Для работы библиотеки Targets.RITM_SDR_API требуется:
-
доступ РИТМ SDR USRP к сети Ethernet;
-
наличие Engee Device Manager на стороне управляющего компьютера (при применении согласно принятой архитектуре).
Сетевые параметры по умолчанию:
-
IP-адрес РИТМ SDR USRP —
192.168.2.70; -
TCP-порт —
12345.
Быстрый старт
-
Установите или подключите подсистему Engee.Интеграции как показано в статье.
engee.package.install("Engee-Device-Manager")Ссылка для подключения: engee.com/prod/user/demo1234-user Установите клиентскую программу: https://dl.kpm-ritm.ru/repo/Host-Device-Manager-v1.57-Windows.zip - Для Windows https://dl.kpm-ritm.ru/repo/Host-Device-Manager-v1.57-Linux.zip - Для Linux Для получения примеров выполните: engee.package.getdemos("Engee-Device-Manager") Для запуска серверной программы выполните: engee.package.start("Engee-Device-Manager") Пакет поддержки 'Engee-Device-Manager' версии 'v1.57' успешно установлен.engee.package.start("Engee-Device-Manager")"engee.com/prod/user/demo1234-user" -
Используйте команды:
using Main.EngeeDeviceManager.Targets.RITM_SDR_API import Main.EngeeDeviceManager.Targets.RITM_SDR_API client = RITM_SDR_API.RITMClient("192.168.2.70") if !RITM_SDR_API.connect(client) println("Ошибка подключения") return end println("Версия сервера: $(RITM_SDR_API.get_version(client))") RITM_SDR_API.disconnect(client)Пример ожидаемого вывода в консоль:
Подключено к 192.168.2.70:12345 Версия сервера: v5.1.5 Соединение закрыто
Подробнее см. в статье Начало работы с РИТМ SDR USRP
Интерфейс прикладного программирования (API)
В разделе приведено описание макросов и функций библиотеки. Для каждой позиции указаны наименование, прототип (при наличии в исходном тексте) и назначение.
Группа ведения журнала
| Наименование | Прототип | Назначение |
|---|---|---|
|
|
Макрос для «тихого» ведения журнала без вывода в консоль. Записывает данные, только если |
|
|
Главный переключатель системы ведения журнала. Устанавливает глобальную переменную |
|
|
Основной макрос для комбинированного вывода. Преобразует выражение в строку, очищает ее, печатает в консоль и, если ведение журнала активно, записывает в файл журнала с временной меткой. Пример: |
|
|
Печатает сообщение в консоль без перевода строки. Используется для интерактивных прогресс-баров или вывода частичных результатов в одной строке. |
|
|
Корректное завершение сессии ведения журнала. Добавляет финальную запись, создает очищенную версию файла журнала и сбрасывает глобальные переменные. |
Служебные функции
| Наименование | Прототип | Назначение |
|---|---|---|
|
|
Конструктор основного объекта библиотеки. Создает структуру с полями: IP-адрес управляющего модуля, дескриптор TCP-соединения и частота дискретизации (по умолчанию). |
|
|
Очистка строковых ответов от управляющего модуля от управляющих и непечатаемых символов. |
|
|
Очистка входного буфера сетевого сокета. |
|
|
Прием бинарных данных с управляющего модуля по установленному протоколу. |
|
|
Отправка бинарных данных на управляющий модуль по установленному протоколу. |
|
|
Ключевая низкоуровневая функция для отправки команд управляющему модулю. Отправляет команду, ожидает обработки, читает и анализирует ответ. |
|
|
Безопасный разрыв соединения. |
|
|
Установка TCP-соединения с управляющим модулем. Порт фиксирован — |
Управление основными параметрами
| Наименование | Прототип | Назначение |
|---|---|---|
|
|
Запрос статуса калибровки системы. |
|
|
Запрос текущей частоты. |
|
|
Запрос табличного значения аттенюации приемника. |
|
|
Измерение мощности на входе приемника. |
|
|
Запрос текущего состояния трансивера. |
|
|
Запрос аттенюации передатчика. |
|
|
Установка несущей частоты передатчика и приемника. Проверяет диапазон, отправляет команду |
|
|
Универсальная установка параметра. |
|
|
Установка табличного значения аттенюации приемника. |
|
|
Конфигурация каналов передатчика и приемника с помощью битовых масок. |
|
|
Установка аттенюации передатчика. |
|
|
Альтернативная установка частоты в Гц. |
|
|
Остановка передачи. |
Функции расширенного управления и сбросов
| Наименование | Назначение |
|---|---|
|
Чтение регистра функционального модуля (IP-ядра). |
|
Целевой сброс FIFO[5] в системе DFE. |
|
Сброс блока вспомогательного генератора шума. |
|
Сброс DMA-контроллеров[6] приема и передачи. |
|
Сброс DMA-контроллеров приема и передачи. |
|
Комплексный сброс FIFO-буферов. |
|
Запись в регистр функционального модуля (IP-ядра). |
RF-переключатели
| Наименование | Прототип | Назначение |
|---|---|---|
|
|
Ручная калибровка канала обратной связи. |
|
|
Управление RF-коммутацией на аппаратной платформе. |
|
|
Управление RF-коммутацией на аппаратной платформе. |
|
|
Управление RF-коммутацией на аппаратной платформе. |
|
|
Управление RF-коммутацией на аппаратной платформе. |
|
|
Управление RF-коммутацией на аппаратной платформе. |
|
|
Управление RF-коммутацией на аппаратной платформе. |
|
|
Включение/выключение дублирования данных передатчика для MIMO-режимов. |
Управление приемом и передачей данных
| Наименование | Назначение |
|---|---|
|
Управление ослаблением каналов ORX[7]. |
|
Проверка завершения DMA-передачи для основного приема (RX) и каналов обратной связи (ORX). |
|
Проверка завершения DMA-передачи для основного приема (RX) и каналов обратной связи (ORX). |
|
Форматирование принятых данных из |
|
Подготовка комплексных данных к передаче: масштабирование и интерливинг компонентов. |
|
Прием данных с канала обратной связи (ORX) в ОЗУ. |
|
Инициация приема данных с приемника в ОЗУ. |
|
Прямое включение/выключение приемных каналов. |
|
Команда на передачу данных из ОЗУ в передатчик. |
|
Управление ослаблением каналов ORX. |
Дополнительные сервисные функции
| Наименование | Назначение |
|---|---|
|
Мониторинг температур различных компонентов аппаратной платформы. |
|
Запрос версии программного обеспечения управляющего модуля. |
Функции автоматической регулировки усиления
| Наименование | Прототип | Назначение |
|---|---|---|
|
|
Конфигурация автоматической регулировки усиления ( |
|
|
Принудительное применение настроек автоматической регулировки усиления после их изменения. |
|
|
Возврат настроек автоматической регулировки усиления к значениям по умолчанию. |
|
|
Включение/выключение дублирования данных передатчика для MIMO-режимов. |
Сетевое взаимодействие и обмен данными
Соединение с управляющим модулем изделия устанавливается по протоколу TCP. Номер порта фиксирован (12345). Функция connect() должна вызываться до выполнения любых команд управления и обмена данными. Разрыв соединения выполняется функцией disconnect() (или close(), если используется синоним).
Отправка команд управления реализуется через низкоуровневую функцию _send_command(), осуществляющую передачу строковой команды и анализ ответа. Передача и прием бинарных массивов данных выполняются функциями _put_data() и _get_data() по установленному протоколу обмена.
Регистры SDR
В таблице приведена регистровая карта IP-ядер, доступных через механизм set_ip_core()/get_ip_core(). Адреса указаны в шестнадцатеричном виде. Типы данных приведены в соответствии с обозначениями, применяемыми в проекте ПЛИС.
| IP-ядро | Адрес (hex) | Название регистра | Тип данных | Описание |
|---|---|---|---|---|
DUCex[8] |
|
|
|
Сброс ядра: запись |
DUCex |
|
|
|
Уникальный временной штамп ядра (формат |
DUCex |
|
|
|
Регистр данных для настройки коэффициента интерполяции. |
DUCex |
|
|
|
Включение / выключение интерполятора. |
DUCex |
|
|
|
Асинхронный сброс ядра через AXI. |
DUCex |
|
|
|
Глобальное включение ядра. |
DUCex |
|
|
|
Коэффициент усиления канала 0 (коррекция). |
DUCex |
|
|
|
Включение усиления канала 0. |
DUCex |
|
|
|
Коэффициент усиления канала 1 (коррекция). |
DUCex |
|
|
|
Включение усиления канала 1. |
DUCex |
|
|
|
Включение NCO[9] канала 0. |
DUCex |
|
|
|
Инкремент фазы NCO канала 0 ( |
DUCex |
|
|
|
Смещение фазы NCO канала 0 ( |
DUCex |
|
|
|
Сброс накопителя фазы NCO канала 0. |
DUCex |
|
|
|
Инкремент фазы NCO канала 1 ( |
DUCex |
|
|
|
Смещение фазы NCO канала 1 ( |
DUCex |
|
|
|
Сброс накопителя фазы NCO канала 1. |
DUCex |
|
|
|
Включение NCO канала 1. |
DUCex |
|
|
|
Включение DDS[10] канала 0. |
DUCex |
|
|
|
Включение DDS канала 1. |
DDCex |
|
|
|
Сброс ядра: запись |
DDCex |
|
|
|
Уникальный временной штамп ядра (формат |
DDCex |
|
|
|
Регистр данных для настройки коэффициента децимации. |
DDCex |
|
|
|
Включение / выключение дециматора. |
DDCex |
|
|
|
Асинхронный сброс ядра через AXI[11]. |
DDCex |
|
|
|
Коэффициент усиления канала 0 (коррекция). |
DDCex |
|
|
|
Коэффициент усиления канала 1 (коррекция). |
DDCex |
|
|
|
Включение усиления канала 0. |
DDCex |
|
|
|
Включение усиления канала 1. |
DDCex |
|
|
|
Инкремент фазы NCO канала 0. |
DDCex |
|
|
|
Смещение фазы NCO канала 0. |
DDCex |
|
|
|
Сброс накопителя фазы NCO канала 0. |
DDCex |
|
|
|
Инкремент фазы NCO канала 1. |
DDCex |
|
|
|
Смещение фазы NCO канала 1. |
DDCex |
|
|
|
Сброс накопителя фазы NCO канала 1. |
DDCex |
|
|
|
Включение NCO общего выхода. |
DDCex |
|
|
|
Включение NCO канала 1. |
DDCex |
|
|
|
Включение DDS канала 0. |
DDCex |
|
|
|
Включение DDS канала 1. |
DDCex |
|
|
|
|
DDCex |
|
|
|
|
DDCex |
|
|
|
|
DDCex |
|
|
|
|
DDCex |
|
|
|
|
DDCex |
|
|
|
|
DDCex |
|
|
|
|
DDCex |
|
|
|
|
DDCex |
|
|
|
|
DDCex |
|
|
|
|
DDCex |
|
|
|
|
DDCex |
|
|
|
|
AGCex[12] |
|
|
|
Сброс ядра: запись |
AGCex |
|
|
|
Включение ядра (по умолчанию включено, когда бит 0 равен |
AGCex |
|
|
|
Уникальный временной штамп ядра (формат |
AGCex |
|
|
|
Регистр данных для входного порта |
AGCex |
|
|
|
Регистр данных для входного порта |
AGCex |
|
|
|
Регистр данных для входного порта |
AGCex |
|
|
|
Регистр данных для входного порта |
AGCex |
|
|
|
Регистр данных для входного порта |
AGCex |
|
|
|
Регистр данных для входного порта |
AGCex |
|
|
|
Регистр данных для входного порта |
AGCex |
|
|
|
Регистр данных для входного порта |
AGCex |
|
|
|
Регистр данных для входного порта |
AGCex |
|
|
|
Регистр данных для входного порта |
AGCex |
|
|
|
Регистр данных для входного порта |
AGCex |
|
|
|
Регистр данных для входного порта |
AGCex |
|
|
|
Регистр данных для входного порта |
AGCex |
|
|
|
Регистр данных для входного порта |
AGCex |
|
|
|
Регистр данных для выходного порта |
AGCex |
|
|
|
Регистр данных для выходного порта |
AGCex |
|
|
|
Регистр данных для выходного порта |
AGCex |
|
|
|
Регистр данных для выходного порта |
AGCex |
|
|
|
Регистр данных для выходного порта. |