exponenta event banner

Выравнивание гистограммы с помощью буфера видеокадров

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

Поддерживаемая аппаратная платформа

  • Оценочный комплект Xilinx ® Zynq ® ZC706 + мезонинная карта FMC-HDMI-CAM

Задачи проектирования и системные требования

Рассмотрим приложение, включающее непрерывную потоковую передачу видеоданных через FPGA. В верхней модели soc_histogram_equalization_top FPGA вычисляет гистограмму входящего видеопотока, в подсистеме 'FPGA', при этом потоковая передача того же видеопотока во внешнюю память для хранения. Как только гистограмма вычислена и накоплена по всему видеокадру, переключается сигнал синхронизации для запуска обратного считывания сохраненного кадра из внешней памяти. Затем вектор накопленной гистограммы применяют к видеопотоку, считанному из внешней памяти, для выполнения алгоритма выравнивания. Буфер кадров внешней памяти моделируется с использованием блока «Канал памяти» в AXI4-Stream Video Frame Buffer режим.

Блок «HDMI Input» считывает видеофайл и подает видеоданные и управляющие сигналы в нижестоящие блоки обработки FPGA. Видеоданные находятся в формате YCbCr 4:2:2, а управляющие сигналы находятся в pixel control bus формат. Блок «HDMI Output» считывает видеоданные и управляющие сигналы в том же формате, что и на выходе блока «HDMI Input», и обеспечивает визуальный вывод с помощью блока «Video Display».

Блок Push Button позволяет обходить алгоритм выравнивания гистограммы, направляя необработанные выходные данные из буфера кадров внешней памяти в выходные данные.

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

  • Пропускная способность: Какова скорость передачи данных в/из памяти для удовлетворения требований вашего алгоритма? Какой размер кадра и частоту кадров необходимо поддерживать специально для приложений технического зрения?

  • Задержка: Сколько времени может выдержать ваш алгоритм между запросом и получением данных? Вам нужен непрерывный поток данных, без пробелов? Можно ли буферизовать образцы, входящие в алгоритм, чтобы предотвратить потерю данных при блокировке доступа к памяти?

Для этого примера выравнивания гистограммы определены следующие требования:

  • Пропускная способность должна быть достаточной для поддержания видеопотока 1920x1080p со скоростью 60 кадров в секунду.

  • Задержка должна быть достаточно низкой, чтобы не сбрасывать кадры.

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

$$1920\times1080\times60 = 124.416\,\mathrm{Msps}$$

Поскольку формат видео - YCbCr 4:2:2, мы требуем 2 байта на пиксель (BPP), это равняется требованию пропускной способности

$$2\times124.416 = 248.832\,\mathrm{MB/s}$$

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

$$2\times248.832 = 497.664\,\mathrm{MB/s}$$

Проектирование с использованием блока SoC

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

  • Какова общая доступная пропускная способность памяти в системе SoC?

  • Как алгоритм адаптируется к общей полосе пропускания памяти?

  • Может ли ваш алгоритм выдерживать увеличенную задержку чтения/записи?

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

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

Моделирование дополнительных потребителей памяти

Моделирование системы без дополнительных потребителей памяти и просмотр графика производительности памяти из блока «Контроллер памяти».

Ниже приведены основные параметры памяти:

  1. Ведущий 1: запись в буфер кадров

  2. Мастер 2: считывание буфера кадров

  3. Master 3: Contention (генератор трафика памяти) (комментируется)

Обратите внимание, что оба активных мастера потребляют 248,8 МБ/с пропускной способности памяти.

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

Например, предположим, что для вторичного алгоритма предусмотрены следующие требования к памяти:

  • Пропускная способность: 1150 МБ/с

Учитывая, что основной алгоритм потребляет ~ 500 МБ/с пропускной способности памяти, а общая доступная пропускная способность памяти составляет 1600 МБ/с, мы знаем, что общая потребность в пропускной способности нашей системы превышает общую доступную пропускную способность на ~ 50 МБ/с.

Чтобы включить моделирование вторичного алгоритма доступа к памяти, раскомментируйте Contention Блок генератора трафика памяти. Параметры маски блока показаны ниже.

Моделирование системы с доступом к памяти вторичного алгоритма приводит к следующему графику использования пропускной способности памяти.

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

Внедрение и запуск на оборудовании

Для этого раздела требуются следующие продукты:

  • Coder™ ЛПВП

Для реализации модели на поддерживаемой плате SoC используйте приложение SoC Builder. Откройте маску подсистемы «FPGA» и установите вариант модели на «Pixel based processing».

Прокомментируйте блок «Конкуренция».

Нажмите кнопку «Настроить, построить и развернуть» на панели инструментов, чтобы открыть SoC Builder

  • Выберите «Build Model» на экране «Setup». Нажмите кнопку «Далее».

  • Нажмите кнопку «View/Edit Memory Map» для просмотра карты памяти на экране «Review Memory Map». Нажмите кнопку «Далее».

  • Укажите папку проекта на экране «Select Project Folder». Нажмите кнопку «Далее».

  • Выберите «Build, load and run» на экране «Select Build Action». Нажмите кнопку «Далее».

  • Нажмите кнопку «Validate», чтобы проверить совместимость модели для реализации на экране «Validate Model». Нажмите кнопку «Далее».

  • Нажмите кнопку «Build», чтобы начать построение модели на экране «Build Model». Внешняя оболочка откроется, когда начнется синтез FPGA. Нажмите кнопку «Далее».

  • Нажмите кнопку «Next» для перехода к экрану «Load Bitstream».

Синтез FPGA может занять более 30 минут. Чтобы сэкономить время, можно использовать предоставленный предварительно сгенерированный битовый поток, выполнив следующие действия.

  • Закройте внешнюю оболочку для завершения синтеза.

  • Скопируйте предварительно созданный битовый поток в папку проекта, выполнив приведенную ниже команду, а затем:

  • Нажмите кнопку «Load and Run» для загрузки предварительно созданного битового потока и запуска модели на плате SoC.

copyfile(fullfile(matlabshared.supportpkg.getSupportPackageRoot,'toolbox','soc',...
         'supportpackages','xilinxsoc','xilinxsocexamples','bitstreams',...
         'soc_histogram_equalization_top-zc706.bit'), './soc_prj');

Сейчас модель работает на аппаратном обеспечении. Для получения информации об использовании полосы пропускания памяти в аппаратном обеспечении выполните следующий тест aximaster для soc_histogram_equalization_top_aximaster.

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

Резюме

Вы разработали видеоприложение с интерфейсом ввода-вывода HDMI в реальном времени и буферизацией кадров во внешней памяти. Вы изучили влияние других потребителей памяти на общую пропускную способность. Для реализации модели на оборудовании и проверки конструкции использовался SoC Builder.