В этом примере показано, как реализовать алгоритм коррекции адаптивной гистограммы с ограничением контрастности (CLAHE) для FPGA, включая интерфейс внешней памяти.
Оценочный комплект Xilinx ® Zynq ® ZC706 + мезонинная карта FMC-HDMI-CAM
Алгоритмы обработки видео часто сохраняют полный кадр видеоданных в памяти. Внедрение этой системы хранения на FPGA увеличивает коэффициент использования оперативной памяти и может привести к ограничениям разрешения входного видео. В этом примере показано, как реализовать алгоритмы технического зрения на FPGA, используя внешний ресурс памяти, чтобы уменьшить использование BRAM и разрешить обработку входного видео с более высоким разрешением.
Интерфейс внешней памяти в этом примере использует AXI4 протоколы и проверяет конструкцию на предмет конфликтов памяти. Интерфейс AXI4 Random Access обеспечивает простой прямой интерфейс с межсоединением памяти. Этот протокол позволяет алгоритму действовать в качестве ведущего устройства памяти, предоставляя адреса и непосредственно управляя передачей пакетов. Владелец AXI4 Пишет Диспетчеру, и Основные Прочитанные блоки Диспетчера AXI4 в этом примере моделируют упрощенный интерфейс AXI-4 в Simulink™. При создании кода HDL с использованием продукта HDL Coder™ созданный код включает полностью совместимый IP-адрес интерфейса AXI4.
Можно использовать блоки SoC Blockset™ и средства визуализации для моделирования, моделирования и анализа аппаратных и программных архитектур для ASIC, FPGA и систем на кристалле (SoC). Эти функции могут помочь в построении архитектуры системы с использованием моделей памяти, моделей шин и моделей интерфейсов, а также в моделировании архитектуры вместе с алгоритмами. В этом примере моделируется внешняя память с использованием двух блоков из библиотек блоков SoC:
Канал памяти: Этот блок передает данные через внешнюю память. Он моделирует передачу данных между главными алгоритмами чтения и записи через общую память. Этот пример использует тип канала Произвольного доступа AXI4.
Контроллер памяти: Этот блок выполняет арбитраж между хозяевами и предоставляет им уникальный доступ к общей памяти. Он сконфигурирован для поддержки нескольких каналов с различными протоколами арбитража. Этот блок также регистрирует и отображает данные о производительности памяти. Эта функция позволяет анализировать и отлаживать производительность системы во время моделирования.
Алгоритм CLAHE имеет три шага: мозаика, выравнивание гистограммы и билинейная интерполяция. Этап билинейной интерполяции использует интенсивности пикселей из входного кадра. Сохранение полного входного кадра видеоданных до тех пор, пока этап билинейной интерполяции не потребует внешней памяти.
На рисунке показан верхний уровень примерной модели. Блок HDMI Rx обрабатывает входной видеосигнал и передает его в подсистему CLAHEAlgorithm_fpga. Блок HDMI Rx преобразует необработанные видеоданные в формат потока YCbCr 4:2:2. Выходные данные представляют собой поток пикселей, подходящий для разработки аппаратного алгоритма. Блок HDMI Rx также предписывает инструменту SoC Builder генерировать IP-блоки, необходимые для получения видеоданных с платы FMC-HDMI-CAM, подключенной к аппаратной плате.
В модели AXI4-владелец Пишет Диспетчеру, и AXI4-основные Прочитанные блоки Диспетчера моделируют, память AXI4 нанесла на карту интерфейсы. Блок контроллера записи AXI4-Master записывает входной кадр во внешнюю память, а блок контроллера чтения AXI4-Master считывает кадр из внешней памяти для билинейной интерполяции. Блок AXI Read FIFO посылает выходной поток пикселей в блок HDMI Tx. Блок Tx HDMI преобразует поток пикселей в формате YCbCr 4:2:2 в необработанные видеоданные для отображения во время моделирования. Этот блок также предписывает инструменту SoC Builder генерировать IP-блоки, которые передают видеоданные обратно на плату FMC-HDMI-CAM. Для указания состояния блоков AXI Read FIFO и AXI Write FIFO при выполнении проектирования на аппаратных средствах четыре сигнала отладки из этих блоков подключаются к светодиодным индикаторам на плате.

На следующем рисунке показана ссылочная модель CLAHEAlgorithm_fpga. Входной поток пикселей соединяется с блоком соединителя видеопотока. Этот блок обеспечивает потоковый видеоинтерфейс для подключения любых двух IP-адресов в реализации FPGA. В этом примере блоки Video Stream Connector соединяют входной и выходной блоки HDMI с остальным алгоритмом FPGA.

На следующем рисунке показана подсистема CLAHEAlgorithm_fpga/CLAHE, реализующая AXI запись и чтение из внешней памяти, и алгоритм CLAHE.

Подсистема содержит следующие области: * AXI Write to Memory: Этот раздел записывает входные данные в DDR. Он состоит из блока главного контроллера записи AXI4, который принимает входную информацию управления видео от блока Rx HDMI и моделирует интерфейс отображения памяти AXI4 для записи данных в DDR. Он генерирует пять сигналов: wr_addr, wr_len, wr_valid, rd_start, и frame. wr_valid сигнал является входом в блок AXI Write FIFO, который сохраняет входящую интенсивность пикселей. Блок SoC Bus Creator генерирует wrCtrlOut шина «ведущий-ведомый» для записи данных в DDR. Модель записывает одну строку данных за пакет. После записи строк tireHeight/2 (где tireHeight соответствует высоте каждой плитки в CLAHE) модель утверждает, что rd_start сигнал для начала запроса на чтение. frame сигнал указывает на количество входных кадров.
AXI Read from Memory: этот раздел считывает данные из DDR. Это состоит из AXI4-основного Прочитанного блока Диспетчера, который получает rd_start сигнал из блока контроллера записи AXI4-Master. Блок контроллера считывания AXI4-Master генерирует rd_addr, rd_len, rd_avalid, и rd_dready сигналы. Автобусный блок Создателя SoC объединяет эти сигналы в автобус. AXI4-основной Прочитанный блок Диспетчера также производит pixelcontrol шину, соответствующую rd_data. Модель срезает 32-разрядную rd_data сигнал для извлечения 8-битовой (LSB) составляющей яркости, а затем записывает ее в блок кэш-памяти алгоритма CLAHE.
CLAHE: Подробное описание реализации алгоритма CLAHE для аппаратного обеспечения см. в примере коррекции адаптивной гистограммы с ограниченным контрастом (Vision HDL Toolbox). Подсистема CLAHEHDLAlgorithm работает с 8-битными изображениями в градациях серого, поэтому компонент 8-битной яркости (Y) отделен от 16-битных данных пикселя YCbCr.
Подсистема CLAHEHDLAlgorithm выполняет три этапа CLAHE: мозаику, выравнивание гистограммы и билинейную интерполяцию. На первом этапе входной кадр делится на сетку из плиток 8 на 8. На втором этапе вычисляется гистограмма каждой плитки, а затем выполняется распределение, перераспределение и вычисления CDF. Вычисленные значения CDF хранятся в буфере для дальнейшей обработки. На третьем этапе вычисляют интенсивности выходных пикселей с использованием билинейной интерполяции значений CDF. Интенсивности пикселей входного кадра используются в качестве адреса к буферу, в котором хранятся значения CDF. Эти интенсивности пикселей считываются из внешней памяти, в которой хранится исходный входной кадр.
Поскольку данные, считанные из внешней памяти, находятся в пакетном режиме, их нельзя использовать непосредственно для билинейной интерполяции. Буфер кэша хранит пакет строк, считанных из внешней памяти. Глубина кэша достаточна для хранения числа строк, равного tureHeight. rdValid сигнал от подсистемы CLAHEHDLAlgorithm формирует rd_addr сигнал для считывания данных из кэша. Данные, считанные из кэша (pixValue) затем возвращается в подсистему CLAHEHDLAlgorithm для завершения билинейной интерполяции для вычисления выходной интенсивности пикселя.
Инструмент SoC Builder создает, загружает и выполняет модель на плате FPGA. В этом примере используется аппаратная плата Xilinx ® Zynq ® ZC706. Чтобы построить, загрузить и выполнить проект на оборудовании, выполните следующие действия.
Настройте инструмент Vivado ® для синтеза, реализации и генерации битового потока FPGA.
Пример модели, выполняемой в Accelerator по умолчанию для ускорения моделирования. Однако инструмент SoC Builder требует Normal режим моделирования. В окне «Параметры конфигурации Simulink» установите режим моделирования в значение Normal.
Запустите инструмент SoC Builder, щелкнув Настроить, Построить и развернуть на панели инструментов Simulink.
Выберите Компоновать модель (Build model), а затем просмотрите карту памяти на панели Просмотр карты памяти (Review Memory Map).
На панели «Выбор папки проекта» укажите папку проекта. На панели Выбрать действие построения выберите Построение, загрузка и запуск.
На панели Проверить модель (Validate Model) щелкните Проверить (Validate), чтобы проверить совместимость модели для реализации. Затем нажмите кнопку Построить (Build), чтобы начать построение модели. При запуске синтеза FPGA открывается внешняя оболочка.
По завершении формирования битового потока на панели Connect Hardware выберите Test Connection для проверки соединения между хост-компьютером и аппаратной платой. Загрузите поток битов на оборудование, нажав кнопку Загрузить.
На этом рисунке показаны окончательные результаты SoC Builder после завершения этих шагов.
В этом примере используется входное видео размером 480 на 640 пикселей. Этот размер настраивается в блоке HDMI Rx. Для оценочного комплекта Xilinx Zynq ZC706 контроллер DDR PL сконфигурирован с 64-разрядным интерфейсом AXI4-Slave, работающим на частоте 200 МГц. В результате полоса пропускания составляет 1600 МБ/с. В этом примере два мастера AXI подключены к контроллеру DDR. Эти мастера AXI являются интерфейсами DUT AXI4 чтения и записи. Формат видео YCbCr 4:2:2 требует 2 байта на пиксель. Для интерфейсов чтения и записи AXI4 DUT каждый пиксель заполняется нулем до 4 байт. В этом случае для интерфейсов чтения и записи требуется пропускная способность 2 * 4 * 480 * 640 * 60 = 147,456 МБ/с.
На этом рисунке показан график производительности блока контроллера памяти. Для просмотра графика производительности сначала откройте блок контроллера памяти. Затем на вкладке Производительность (Performance) щелкните Просмотр графиков производительности (View performance plots). Выберите все шаблоны в разделе Полоса пропускания и нажмите кнопку Обновить. После того, как DUT начинает запись и считывание данных во внешнюю память, пропускная способность остается около 154 МБ/с, что находится в пределах требуемой пропускной способности 147,456 МБ/с.
Сигналы в примерной модели регистрируются во время моделирования. Просмотрите эти сигналы с помощью приложения Logic Analyzer. На этом рисунке показаны записанные данные входных и выходных кадров.
На этом рисунке показаны входные и выходные кадры модели. Результат показывает улучшенную контрастность в выходном изображении.
[1] Цюйдервельд, Карел. «Коррекция адаптивной гистограммы с ограниченным контрастом». В «Graphics Gems IV» под редакцией Пола С. Хекберта, 474-485. AP Professional, 1994.