В этом примере показано, как использовать интерфейс AXI4-Stream Video для обеспечения высокоскоростной потоковой передачи видео на сгенерированном IP-ядре HDL.
Для выполнения этого примера необходимо установить и настроить следующее программное и аппаратное обеспечение:
Пакет поддержки кодера HDL для платформы Xilinx Zynq
Пакет поддержки встроенного кодера для платформы Xilinx Zynq
Пакет поддержки набора инструментов системы компьютерного зрения для аппаратных средств на базе Xilinx Zynq
Панель инструментов Vision HDL
Xilinx Vivado Design Suite с поддерживаемой версией, указанной в документе Поддержка языка HDL и Поддерживаемые сторонние инструменты и оборудование
ZedBoard
Плата ввода/вывода HDMI FMC (FMC-HDMI-CAM или FMC-IMAGEON)
Для настройки платы ZedBoard см. раздел Настройка аппаратных средств и инструментов Zynq в этом примере.
В этом примере показано, как:
Моделирование алгоритма потоковой передачи видео с использованием протокола пикселя потоковой передачи.
Создание IP-ядра HDL с помощью видеоинтерфейса AXI4-Stream.
Интеграция сгенерированного IP-ядра в видеореферентную конструкцию ZedBoard с доступом к интерфейсам HDMI.
Используйте процессор ARM ® для настройки параметров матрицы FPGA для изменения вывода видеосигнала в реальном времени.
Создайте собственный дизайн ссылок на видео.

На приведенном выше рисунке представлена высокоуровневая схема архитектуры, на которой показано, как генерируемое ядро IP HDL DUT работает в заранее определенном эталонном проекте видео. На этой схеме IP-блок HDL DUT представляет собой IP-ядро, генерируемое в процессе генерации IP-ядра. Остальная часть диаграммы представляет предварительно определенный эталонный дизайн видео, который содержит другие IP-адреса для обработки интерфейсов ввода и вывода HDMI.
HDL DUT IP обрабатывает видеопоток, поступающий от входного IP HDMI, генерирует выходной видеопоток и отправляет его на выходной IP HDMI. Все эти видеопотоки передаются в видеоинтерфейсе AXI4-Stream.
HDL DUT IP может также включать в себя интерфейс AXI4-Lite для настройки параметров. По сравнению с интерфейсом AXI4-Lite, интерфейс AXI4-Stream Video передает данные гораздо быстрее, что делает его более подходящим для пути передачи данных алгоритма видео.
1. Установите плату ZedBoard и плату ввода/вывода HDMI FMC, как показано на рисунке ниже. Для получения дополнительной информации о настройке аппаратных средств ZedBoard см. документацию по плате.

1.1. Подключите кабель UART USB, кабель Ethernet и кабель питания, как показано на рисунке выше (маркеры 1- 3).
1.2. Убедитесь, что JP7 кому JP11 перемычки установлены, как показано на рисунке выше (маркер 4), чтобы можно было загрузить Linux с карты памяти SD. JP7: вниз; JP8: вниз; JP9вверх; JP10вверх; JP11: вниз.
1.3. Убедитесь, что J18 перемычки устанавливаются на 2V5, как показано на рисунке выше (маркер 5).
1.4. Подключите источник видео HDMI к плате ввода/вывода HDMI FMC, как показано на рисунке выше (маркер 6). Источник видео должен иметь возможность вывода видео 1080p, например, это может быть видеокамера, смартфон, планшет или выход HDMI компьютера.
1.5. Подключите монитор к плате ввода/вывода HDMI FMC, как показано на рисунке выше (маркер 7). Монитор должен поддерживать дисплей 1080p.
2. Если вы еще не установили пакеты поддержки кодера HDL и встроенного кодера для платформы Xilinx Zynq, а также пакет поддержки панели инструментов Computer Vision System для аппаратного обеспечения на базе Xilinx Zynq. Чтобы установить пакет поддержки, перейдите на панель инструментов MATLAB ® и выберите Add-On > Get Hardware Support Packages.
3. Убедитесь, что вы используете образ SD-карты, предоставленный пакетом поддержки встроенного кодера для платформы Xilinx Zynq. Если необходимо обновить образ карты памяти SD, выполните следующую команду в приглашении MATLAB:
targetupdater
4. Установите аппаратное соединение Zynq путем ввода следующей команды в окне команд MATLAB:
h = zynq
zynq регистрируется на аппаратном обеспечении через COM-порт и запускает ifconfig для получения IP-адреса платы. Эта функция также проверяет соединение Ethernet.
5. Настройте траекторию инструмента синтеза Xilinx Vivado с помощью следующей команды в окне команды MATLAB. При выполнении команды используйте собственный путь установки Vivado.
hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', 'C:\Xilinx\Vivado\2017.4\bin\vivado.bat')Чтобы развернуть простой алгоритм обнаружения краев Собеля на Zynq, первым шагом является определение, какая часть конструкции должна выполняться на FPGA, а какая - на ARM-процессоре. В этом примере мы хотим реализовать детектор границ на FPGA для обработки входящего видеопотока в протоколе AXI4-Stream Video. И мы хотим использовать процессор ARM для настройки параметров на FPGA, чтобы изменить вывод живого видео.
В примерной модели подсистема DUT, Sobel_HW, использует блок детектора края для реализации алгоритма обнаружения края Собеля. Видеоданные и управляющие сигналы моделируются в потоковом пиксельном протоколе, который используется всеми блоками в панели инструментов Vision HDL. pixelIn и pixelOut являются портами данных для видеопотоков. В и В являются управляющими портами для видеопотоков. Они моделируются с использованием типа данных шины (Pixel Control Bus), который содержит следующие сигналы: hStart, hEnd, vStart, vEnd, valid.
Четыре входных порта - Threshold, Sobel_Enable, Background_Color и Show_Gradient - являются управляющими портами для настройки параметров алгоритмов обнаружения краев Sobel. Для настройки входных значений этих портов можно использовать блок усиления ползуна или ручного переключателя. После сопоставления этих портов с AXI4-Lite интерфейсом процессор ARM может управлять сгенерированным ядром IP путем записи в сгенерированные регистры, доступные для интерфейса AXI.
modelname = 'hdlcoder_sobel_video_stream';
open_system(modelname);
sim(modelname);


Затем мы запускаем мастер рабочего процесса HDL и используем рабочий процесс совместного проектирования аппаратного и программного обеспечения Zynq для развертывания этого проекта на оборудовании Zynq. Более подробное пошаговое руководство см. в примере Начало работы с платформой Targeting Xilinx Zynq.
1. Запустите помощник по рабочим процессам HDL из подсистемы DUT, hdlcoder_sobel_video_stream/Sobel_HW. Настройки целевого интерфейса уже сохранены в этой модели, поэтому настройки в задании 1.1-1.3 загружаются автоматически. Дополнительные сведения о сохранении настроек целевого интерфейса в модели см. в разделе Сохранение настроек целевого оборудования в примере модели.
В задаче 1.1 для целевого рабочего процесса выбирается поколение IP Core, а для целевой платформы - ZedBoard.

В задаче 1.2 для эталонного проектирования выбрана видеосистема по умолчанию (требуется модуль HDMI FMC).

В задаче 1.3 загружается таблица интерфейса целевой платформы, как показано на следующем рисунке. Порты потока видеоданных «pixelIn», «startIn», «pixelOut» и «startOut» сопоставляются интерфейсам «AXI4-Stream Video», а порты параметров управления, например «Threshold», сопоставляются интерфейсу «AXI4-Lite».

Интерфейс AXI4-Stream Video осуществляет связь в режиме ведущий/ведомый, где ведущее устройство передает данные ведомому устройству. Поэтому, если порт данных является портом ввода, назначьте его ведомому интерфейсу AXI4-Stream Video, а если порт данных является портом вывода, назначьте его ведущему интерфейсу AXI4-Stream Video.
2. Щелкните правой кнопкой мыши Задание 3.2, Создать код RTL и ядро IP и выберите Выполнить до выбранного задания, чтобы создать ядро IP. Сопоставление адресов регистров и другую документацию по IP-ядру можно найти в созданном отчете по IP-ядру.
Затем в помощнике по рабочим процессам HDL мы выполняем задачи интеграции встроенных систем для развертывания созданного IP-ядра HDL на оборудовании Zynq.
1. Запустите задачу 4.1 «Создание проекта». Эта задача вставляет сгенерированное IP-ядро в эталонный проект видеосистемы по умолчанию. Как показано на первой схеме, эта эталонная конструкция содержит IP-адреса для обработки интерфейсов ввода и вывода HDMI. Он также содержит IP-адреса для преобразования цветового пространства из YCbCr в RGB. Созданный проект является полным проектом Zynq, включая часть алгоритма (сгенерированный IP-адрес алгоритма DUT) и часть платформы (эталонный проект).
2. Щелкните ссылку на панели «Результат», чтобы открыть созданный проект Vivado. В инструменте Vivado щелкните Открыть дизайн блоков (Open Block Design), чтобы просмотреть схему проектирования Zynq, которая включает сгенерированное IP-ядро HDL, другие IP-адреса для конвейера видео и процессор Zynq.

3. В помощнике по рабочим процессам HDL выполните остальные задачи для создания модели интерфейса программного обеспечения, а также создайте и загрузите битовый поток FPGA. Выберите команду Download programming method в задаче Program Target Device для загрузки битового потока FPGA на карту SD на плате ZedBoard, чтобы при включении и включении питания плата ZedBoard автоматически перезагружалась.

Модель интерфейса программного обеспечения генерируется в задаче 4.2 «Создание модели интерфейса программного обеспечения».
1. Прежде чем создавать код из модели программного интерфейса, прокомментируйте источник видео и средство просмотра видео в созданной модели, как показано на следующем рисунке. Эти блоки не требуется запускать на ARM-процессоре. Процессор ARM использует AXI4-Lite интерфейс для управления матрицей FPGA. На фабрике FPGA работают фактический источник видео и интерфейс дисплея. Источник видео поступает со входа HDMI, и видеовыход передается на монитор, подключенный к выходу HDMI.

2. Сконфигурируйте и создайте модель интерфейса программного обеспечения для внешнего режима:
В созданной модели откройте диалоговое окно Параметры конфигурации (Configuration Parameters).
Выберите Решатель и установите для параметра «Stop Time» значение «inf».
В меню модели выберите Моделирование > Режим > Внешний.
Нажмите кнопку «Выполнить» на панели инструментов модели. Embedded Coder создает модель, загружает исполняемый файл ARM на оборудование ZedBoard, выполняет его и соединяет модель с исполняемым файлом, работающим на оборудовании ZedBoard.
3. Теперь как аппаратные, так и программные части проекта работают на аппаратном обеспечении Zynq. Используйте переключатель Sobel_Enable, чтобы убедиться, что выход видеосигнала в реальном времени переключается между выходом детектора границы и исходным видео. Используйте переключатель Threshold (Порог) или Background_Color (Порог), чтобы увидеть различные эффекты обнаружения границ на выводе видео в реальном времени. Эти значения параметров передаются в аппаратные средства Zynq через внешний режим и интерфейс AXI4-Lite.
Возможно, потребуется расширить существующий эталонный проект видеосистемы по умолчанию, чтобы добавить дополнительные IP-адреса конвейерной обработки перед обработкой или после обработки, или использовать другое аппаратное обеспечение SoC или интерфейс видеокамеры. Эталонный дизайн видеосистемы по умолчанию является примером или отправной точкой для создания собственного пользовательского эталонного дизайна.
Например, эталонный проект видеосистемы по умолчанию содержит два IP-ядра для преобразования цветового пространства из YCbCr в RGB, как показано на следующем рисунке. Эти два IP-ядра генерируются кодером HDL, а также с использованием рабочего процесса генерации IP-ядра. При необходимости можно создать другие предварительно обработанные или постобработанные IP-ядра для конвейерной обработки камер и добавить их в пользовательский эталонный дизайн для расширения видеоплатформы.

Дополнительные сведения о создании собственной пользовательской ссылочной конструкции см. в примере Определение пользовательской платы и ссылочной конструкции для рабочего процесса Zynq.