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

Когда дело доходит до отображения изображения, можно использовать несколько возможных стандартов. Однако, если я использую устройство Zynq MPSoC, я часто пытаюсь использовать контроллер DisplayPort в PS, так как он очень мощный и удобный.

Если вы раньше не сталкивались с контроллером DisplayPort, как мы увидим, он очень эффективен и поддерживает разрешения до сверхвысокой четкости со скоростью до 30 кадров в секунду. Хотя в этом примере мы будем ограничены поддерживаемыми разрешениями моего монитора DisplayPort.

Когда дело доходит до работы с контроллером DisplayPort, выходное видео может генерироваться либо из памяти PS DDR, либо из программируемой логики (PL). В терминологии MPSoC DisplayPort они называются потоками неживых и живых изображений соответственно. Простым примером неживого видео может быть Linux, генерирующий рабочий стол, в то время как пример живого видео может быть результатом цепочки обработки изображений в PL.

Контроллер DisplayPort может поддерживать до шести неактивных источников из памяти PS DDR. Он также способен поддерживать живое видео и графику из PL, конечно, мы также можем смешивать как неживые, так и живые видеопотоки.

Чтобы иметь возможность поддерживать широкий спектр приложений, контроллер DisplayPort поддерживает 6, 8, 10 или 12 бит на компонент, а также поддерживает ряд цветовых пространств, включая RGB, YCrCb 4:2:2, YCrCb 4:4:4. и YCrCb 4:2:0.

Что действительно интересно, так это дополнительные возможности, предоставляемые контроллером DisplayPort:

  • Выборка цветности и подвыборка
  • Преобразование цветового пространства
  • Альфа-смешивание
  • Аудио микшер

И окончательное смешанное видео, и аудио могут быть доступны для программируемой логики, если это необходимо.

Физически в Zynq MPSoC контроллер DisplayPort расположен в системе обработки (PS).

Гибкость является ключевым фактором в решениях для обработки изображений, и контроллер DisplayPort позволяет нам перемещать данные в четырех возможных направлениях — из памяти в путь данных, из PL в путь данных, из PL в PL и из памяти в PL.

То, как мы настраиваем контроллер DisplayPort для этих режимов, будет рассмотрено при рассмотрении создания ПО.

В этом примере мы создадим тестовый шаблон в PL и выведем его с помощью контроллера DisplayPort.

Это означает, что нам нужно сделать ввод прямой трансляции контроллера DisplayPort доступным для проекта в PL.

Делаем это перенастройкой MPSoC и под конфигурацией PS-PL -> General -> Others и ставим Live Video

В этом примере я использую Ultra 96 ​​V2, поэтому выход DisplayPort должен быть настроен, как показано ниже.

Для создания вывода видео мы будем использовать следующие блоки IP из каталога IP Vivado.

  • Генератор тестовых шаблонов — сгенерирует фактический тестовый шаблон для вывода. Мы будем контролировать это с помощью программного обеспечения, которое мы запускаем в системе обработки через интерфейс AXI Lite.
  • Контроллер синхронизации видео — генерирует синхронизацию выходного видео, ее можно настроить с помощью ПО через интерфейс AXI Lite.
  • Поток AXI на видеовыход — это преобразует тестовую таблицу, полученную в виде потока AXI, в видеосигнал с соответствующей синхронизацией благодаря контроллеру синхронизации видео. Чтобы обеспечить соответствие ширины пикселя контроллеру DisplayPort, установите значение 12 бит на пиксель.
  • ILA — наличие двух встроенных логических анализаторов гарантирует, что генератор тестовых шаблонов правильно генерирует тестовое изображение и правильно блокирует поток AXI для вывода видео.
  • Мастер часов — генерирует тактовую частоту пикселей 74,250 МГц, что является тактовой частотой пикселей для дисплея 1280 на 720 с частотой 60 Гц.

Как упоминалось выше в пункте AXI Stream to video out, нам необходимо убедиться, что мы правильно выровняем видео с входным видео в реальном времени контроллера DisplayPort.

В таблице ниже показан формат пикселей для каждого поддерживаемого цветового пространства.

Когда я собрал все это вместе, для реализации была создана блок-схема ниже. За исключением настройки Pixel Clock и соединений, все это было взаимосвязано с помощью мастеров автоматизации соединений и автоматизации блоков.

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

Теперь, когда у нас есть аппаратный дизайн, в следующий раз мы рассмотрим программную среду, необходимую для его запуска и вывода изображения на дисплей.

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

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

Доступ к архивам MicroZed Chronicles с более чем 300 статьями о FPGA / Zynq / Zynq MpSoC, которые еженедельно обновляются на MicroZed Chronicles.