В блоге прошлой недели мы настроили систему обработки (PS) и программируемую логику (PL), чтобы иметь возможность выводить живое видео с помощью контроллера DisplayPort.

В этом блоге мы собираемся создать ПО, необходимое для вывода на экран тестового шаблона, сгенерированного в ЯП.

Первое, что нам нужно сделать после того, как Vivado HW станет доступным, — это экспортировать аппаратное обеспечение SDK и открыть SDK. Это приведет к описанию HW и позволит нам создать новое приложение и BSP.

После того, как BSP сгенерирован, нам нужно убедиться, что он правильно настроен для приложения видео в реальном времени. Мы делаем это, открывая файл MSS и изменяя драйвер, который используется контроллером DisplayPort.

Нам нужно сделать это, так как существует четыре возможных конфигурации контроллера DisplayPort, и в зависимости от того, какая конфигурация используется, требуется другой драйвер.

  • Путь от памяти к данным — в этом случае используйте API dppsu.
  • PL to Data Path — в этом случае используйте API dppsu.
  • PL to PL — в этом случае используйте avbuf API.
  • Память в PL — В этом случае используйте avbuf API.

Мы можем выбрать нужный API, повторно настроив параметры BSP и выбрав необходимый драйвер. Обратите внимание, что когда мы используем DPPSU, BSP по-прежнему будет содержать API AVBUF, поскольку они также необходимы.

В то время как AVBUF определяет конфигурацию и использование аудио/видеоконвейера, DPPSU определяет конфигурацию передатчика DisplayPort. Поэтому, когда мы хотим передать внешнее по отношению к MPSoC видео, нам нужно использовать его, а также драйверы AVBUF.

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

  • Настройте генератор тестовых шаблонов для создания нужного тестового шаблона.
  • Настройте контроллер синхронизации видео для создания желаемой синхронизации видео.
  • Настройте контроллер прерываний.
  • Определите параметры контроллера DisplayPort с помощью API DPPSU и AVBUF. Это включает в себя режим видео, кодирование пикселей, количество полос и скорость полосы.
  • Настройте вход видео в реальном времени и параметры синхронизации PL.

Полный код доступен на мой GitHub; однако мы можем использовать такие функции, как:

  • XAVBuf_SetInputLiveVideoFormat(&AVBufPtr, RGB_8BPC);
  • XAVBuf_InputVideoSelect(AVBufPtr, XAVBUF_VIDSTREAM1_LIVE, XAVBUF_VIDSTREAM2_NONE);
  • XAVBuf_SetAudioVideoClkSrc(AVBufPtr, XAVBUF_PL_CLK, XAVBUF_PS_CLK);

Все необходимые функции и определения типов содержатся в файлах xavbuf.h и xdppsu.h.

Как только код будет завершен, мы можем загрузить приложение и битовый поток на Ultra96 V2 с помощью модуля JTAG/UART, и, если подключен подходящий дисплей, мы должны увидеть тестовую таблицу.

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

Конечно, если у вас возникли проблемы с запуском и запуском проекта, в проекте есть два ILA. Мы можем подключиться к ним с помощью Vivado Hardware Manager и изучить выходные данные генератора тестовых шаблонов и AXI Stream для вывода видео.

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

Я особенно заинтересован в использовании высокоскоростного разъема на Ultra96 V2.

Проект находится на моем GitHub.

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

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

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