В блоге прошлой недели мы настроили систему обработки (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.