Создав ранее простой прозрачный конвейер обработки изображений с помощью Zybo Z7, в этом блоге я собираюсь посмотреть, как мы можем реализовать наши алгоритмы обработки изображений с помощью синтеза высокого уровня (HLS).

HLS позволяет нам работать на более высоком уровне абстракции, используя C и C ++ для реализации наших алгоритмов обработки изображений или многих других алгоритмов. Таким образом, когда мы получаем намного более быстрое время разработки, инструмент HLS сам генерирует Verilog или VHDL-реализацию нашей желаемой функциональности.

Одним из больших преимуществ использования HLS является то, что, поскольку мы также можем разрабатывать наши алгоритмы на C или C ++, мы не только используем стандартные отраслевые структуры и библиотеки, но также можем получить выгоду от гораздо более быстрого моделирования.

Когда дело доходит до работы с Zynq или Zynq MPSoC, мы можем использовать мощь HLS, используя поток HLx или SDx.

На данный момент, поскольку мы работаем с операционной системой без операционной системы на Zybo Z7, мы сосредоточимся на потоке HLx, который создает IP-ядра, которые мы можем добавить в наш дизайн Vivado.

Мы подробно рассмотрим поток SDx в следующем блоге. Однако поток SDx можно кратко описать как оптимизацию на системном уровне, позволяющую разработчику беспрепятственно перемещать функции между системой обработки (PS) и программируемой логикой (PL).

Чтобы создать наше приложение обработки изображений HLx, мы можем использовать следующие библиотеки, предназначенные для ускорения приложений обработки изображений:

  1. Используйте встроенные видеобиблиотеки HLS, HLS_Video.h и HLS_opencv.h, которые предоставляют несколько функций, которые могут быть синтезированы в логику (HLS_Video.h) наряду с предоставлением необходимых интерфейсов с OpenCV (HLS_opencv.h) для простого создания тестовых стендов.
  2. Добавьте библиотеку xfOpenCV из Xilinx GitHub в Vivado HLx. Библиотека xfOpenCV предоставляет 50 с лишним функций OpenCV, которые могут быть преобразованы в логику.

Обе эти библиотеки предоставляют нам возможность ускорять широкий спектр функций обработки изображений, которые можно сгруппировать:

  1. Базовая функциональность, например преобразование цвета, побитовые и пиксельные операции, размытие и расширение.
  2. Геометрическое преобразование, например Масштабирование / изменение размера, деформация и переназначение
  3. Обработка и фильтрация изображений, например Собел, гистограмма, свертка
  4. Обнаружение и классификация признаков, например Canny edge, Harris Corner, HOG, SVM
  5. 3D-реконструкция, например StereoLBM
  6. Анализ и отслеживание движения, например Отслеживание среднего сдвига и оптический поток LK Dense

Основное различие между традиционным потоком OpenCV и ускоренной функцией заключается в методе адресации пикселей. При использовании OpenCV изображение сохраняется в памяти, поскольку такие пиксели адресуются случайным образом. Такой подход был бы неэффективным для решения на основе программируемой логики. В качестве таких ускоренных функций изображения обрабатываются как потоки пикселей, что также помогает повысить производительность.

Представив поток Vivado HLx и доступные нам библиотеки, давайте посмотрим, как мы можем использовать Vivado HLx для ускорения работы нашего приложения для обработки изображений.

См. Мои проекты FPGA / SoC: Адам Тейлор на Hackster.io

Получить код: ATaylorCEngFIET (Адам Тейлор)

Дополнительную информацию о разработке Xilinx FPGA / SoC можно найти еженедельно в MicroZed Chronicles.