exponenta event banner

Буферизация разрывных данных с использованием блока FIFO потока пикселей

В этом примере показано, как взаимодействовать с пакетными потоками пикселей, например из источников DMA и Camera Link ®, с помощью блока Pixel Stream FIFO.

Обзор

Ниже показана система DMACamureSourceHDL.slx.

Существует два пиксельных входных потока - источник DMA и источник связи с камерой. Входные данные для обоих источников загружаются из .mat файл, в InitFcn обратный вызов. Источник DMA моделирует несмежный поток данных, поступающих из внечиповой памяти. Пиксели поступают короткими пакетами случайной длины со случайными промежутками между пакетами. Это может происходить, когда существует конфликт на источнике DMA, и поэтому невозможно непрерывно передавать пиксели из внечиповой памяти. Источник связи с камерой моделирует случай, когда камера осуществляет потоковую передачу изображения с более низким разрешением, чем максимально допустимое тактовым сигналом пикселя, и поэтому оставляет регулярные промежутки между допустимыми пикселями. Этот интервал позволяет выполнять потоковую передачу изображений с множественным разрешением с использованием общих часов посредством стробирования validIn.

Источник связи с камерой моделирует входящий видеопоток от датчика. Источник DMA моделирует видеопоток из буфера кадров, в котором были обработаны данные предыдущих кадров, чтобы создать альфа-канал, позволяющий смешивать данные предыдущих кадров с текущим потоком.

Подсистема наложения пиксельного потока показана на диаграмме ниже. Из этой подсистемы можно создать код HDL.

В модели имеется четыре основных этапа обработки - буферизация входных данных для удаления разрывов, обнаружение краев и наложение на поток Camera Link, выравнивание потоков пикселей и альфа-смешивание потока DMA на поток Camera Link.

Буферизация пиксельного потока

Pixel Stream FIFO блокирует буферизацию входных данных при их потоковой передаче в модель. Pixel Stream FIFO является маскированной подсистемой. Взглянув на Pixel Stream FIFO, мы видим, что он состоит из контроллера памяти, счетчиков чтения и записи и двух RAM. Одно ОЗУ хранит входящий поток пикселей, а другое - входящий поток управляющих сигналов. Как только полная линия буферизирована в ОЗУ, линия выводится непрерывно, устраняя любое прерывистое поведение, наблюдаемое на входе.

Эта форма сигнала иллюстрирует разницу в сигналах управления пикселями после Pixel Stream FIFO. Вход valid сигнал, DMA_ControlIn(5), показывает короткие пачки допустимых пикселей, в то время как выходные данные valid, DMA_ctrlClean(5), показывает непрерывную строку допустимых пикселов. Общее количество циклов в каждой строке, показанное временем между hStart утверждения остаются прежними.

Обнаружение краев и наложение на поток связи с камерой

Чтобы дополнительно дифференцировать потоки пикселей, поток Camera Link имеет участок обнаружения краев и наложения. Поток пикселей сначала предварительно обрабатывается блоком двустороннего фильтра. Этот блок сглаживает изображение, сохраняя края, и поэтому это хороший выбор для подавления шума до обнаружения края. Блок «Детектор кромок» обнаруживает кромки с помощью метода Собеля. Затем края прореживают с помощью операции [2x2] эрозии. Уменьшенное изображение края накладывается на исходное изображение связи с камерой.

Выравнивание пиксельного потока

Теперь потоки пикселей Camera Link и DMA должны быть выровнены для учета алгоритмической задержки в тракте данных. Выравнивание потоков пикселей осуществляется просто с помощью блока «Выравнивание потока пикселей».

Альфа-смешение

Входной поток DMA является вектором [1x4], в то время как входной поток Camera Link является вектором [1x3]. Дополнительный столбец на входе DMA используется для хранения информации альфа-канала. Альфа-канал представляет величину, на которую каждый из пикселей из источника DMA должен быть смешан с входящим потоком Camera Link.

Результаты моделирования

Выходной видеопоток показывает поток DMA альфа, смешанный с входным сигналом Camera Link. Наложение пурпурного цвета указывает края, обнаруженные во входящем потоке связи с камерой.

Создание кода HDL и проверка его поведения

Для проверки и генерации кода HDL, на который ссылается этот пример, необходимо иметь лицензию HDL Coder™.

Для создания кода HDL используется следующая команда:

makehdl('DMACameraSourceHDL/Pixel Stream Overlay');

Для создания тестового стенда HDL используйте следующую команду:

makehdltb('DMACameraSourceHDL/Pixel Stream Overlay');