Контрастное Ограниченное Адаптивная Гистограмма Эквализация с внешней памятью

Этот пример показов, как реализовать алгоритм адаптивной гистограммы с ограниченной контрастностью (CLAHE) эквализации для FPGA, включая внешний интерфейс памяти.

Поддерживаемые аппаратные средства

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

Введение

Алгоритмы обработки видео часто хранят полную систему координат видео данных в памяти. Реализация этого хранилища на FPGA увеличивает использование BRAM и может привести к ограничениям разрешения входного видео. Этот пример показывает, как реализовать алгоритмы зрения на FPGAs с помощью ресурса внешней памяти, чтобы уменьшить использование BRAM и включить обработку входного видео с более высоким разрешением.

Интерфейс внешней памяти в этом примере использует AXI4 протоколы и проверяет проект на наличие конфликтов в памяти. Интерфейс AXI4 Random Access обеспечивает простой, прямой интерфейс для соединения с памятью. Этот протокол позволяет алгоритму действовать как хозяину памяти, предоставляя адреса и управляя передачей пакета непосредственно. Главный контроллер записи AXI4 и Главный контроллер чтения AXI4 в этом примере моделируют упрощенный интерфейс AXI-4 в Simulink™. Когда вы генерируете HDL-код с помощью HDL Coder™ продукта, сгенерированный код включает полностью соответствующий AXI4 интерфейс IP.

Модель внешней памяти

Можно использовать блоки SoC Blockset™ и инструменты визуализации для моделирования, симуляции и анализа аппаратной и программных архитектур для ASIC, FPGA и систем на чипе (SoC). Эти функции могут помочь вам создать архитектуру системы с помощью моделей памяти, моделей шины и моделей интерфейса, а также помочь вам симулировать архитектуру вместе с алгоритмами. Этот пример моделирует внешнюю память, используя два блока из библиотек SoC Blockset:

  • Канал памяти: Этот блок потокует данные через внешнюю память. Он моделирует передачу данных между главными алгоритмами чтения и записи через общую память. В этом примере используется AXI4 тип канала Random Access.

  • Контроллер памяти: Этот блок арбитрирует между мастерами и предоставляет им уникальный доступ к общей памяти. Он сконфигурирован для поддержки нескольких каналов с различными арбитражными протоколами. Этот блок также регистрирует и отображает данные о эффективности памяти. Эта функция позволяет вам анализировать и отлаживать эффективность системы во время симуляции.

Реализация HDL

Алгоритм CLAHE имеет три шага: плиточное размещение, гистограмма эквализации и билинейная интерполяция. Шаг билинейной интерполяции использует интенсивность пикселей из входного кадра. Хранение полного входного кадра видео данных пока шаг билинейной интерполяции не потребует внешней памяти.

Рисунок показывает верхний уровень модели примера. Блок HDMI RX обрабатывает видео входа и передает его в подсистему CLAHEAlgorithm_fpga. Блок HDMI RX преобразует необработанные видео- данные в формат потока YCbCr 4:2:2 пикселя. Данные выходы являются потоком пикселей, подходящим для оборудования проекта алгоритма. Блок HDMI RX также предписывает инструменту SoC Builder сгенерировать IP- блоков, необходимую для приема видео- данных от платы FMC-HDMI-CAM, которая подключена к оборудованию плате.

В модели блоки AXI4-Master Write Controller и AXI4-Master Read Controller моделируют AXI4 интерфейсов, сопоставленных с памятью. Блок AXI4-Master Контроллер записывает входной кадр во внешнюю память, а блок AXI4-Master Read Controller считывает систему координат из внешней памяти для билинейной интерполяции. Блок AXI Read FIFO отправляет выходной поток пикселей в блок HDMI Tx. Блок HDMI Tx преобразует поток пикселей в формате YCbCr 4:2:2 в необработанные данные видео для отображения во время симуляции. Этот блок также направляет инструмент SoC Builder для генерации IP- блоков, которые передают видео данных обратно на карту FMC-HDMI-CAM. Чтобы указать состояние блоков AXI Read FIFO и AXI Write FIFO при запуске проекта на оборудовании, четыре сигнала отладки от этих блоков соединяются со светодиодами на плате.

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

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

Подсистема содержит следующие области: * AXI Write to Memory: Этот раздел записывает входные данные в DDR. Он состоит из блока AXI4 Master Write Controller, который получает входную информацию управления видео от блока HDMI RX и моделирует AXI4 интерфейс памяти для записи данных в DDR. Он генерирует пять сигналов: wr_addr, wr_len, wr_valid, rd_start, и frame. The wr_valid сигнал является входом в блок AXI Write FIFO, который сохраняет интенсивность входящего пикселя. Блок SoC Bus Creator генерирует wrCtrlOut master to slave bus для записи данных в DDR. Модель записывает по одной линии данных на пакет. После записи линий tileHeight/2 (где tileHeight соответствует высоте каждой плитки в CLAHE), модель утверждает rd_start сигнал для начала запроса на чтение. The frame сигнал указывает количество входных кадров.

  • AXI Read from Memory: В этом разделе считываются данные из DDR. Он состоит из блока AXI4-Master Read Controller, который получает rd_start сигнал от блока AXI4-Master Write Controller. Блок AXI4-Master Read Controller генерирует rd_addr, rd_len, rd_avalid, и rd_dready сигналы. Блок SoC Bus Creator объединяет эти сигналы в шину. Блок AXI4-Master Read Controller также генерирует pixelcontrol шина, соответствующая rd_data. Модель срезает 32-битную rd_data сигнал для извлечения 8-битного компонента яркости (LSB) и затем записи его в блок памяти кэша алгоритма CLAHE.

  • CLAHE: Подробное описание реализации алгоритма CLAHE для оборудования смотрите в примере Contrast Limited Adaptive Histogram Equalization (Vision HDL Toolbox). Подсистема CLAHEHDLAlgorithm работает с 8-битными полутоновыми изображениями, из-за чего 8-битный компонент яркости (Y) отделяется от 16-битовых пиксельных данных YCbCr.

Подсистема CLAHEHDLAlgorithm выполняет три этапа CLAHE: плиточное размещение, гистограмму эквализации и билинейную интерполяцию. На первом этапе входной кадр разделяется на сетку плитки 8 на 8. На втором этапе вычисляется гистограмма каждой плитки, а затем выполняется распределение, перераспределение и вычисление CDF. Вычисленные значения CDF сохраняются в буфере для дальнейшей обработки. Третий шаг вычисляет интенсивность выхода пикселей с помощью билинейной интерполяции значений CDF. Интенсивность пикселей входного кадра используется в качестве адреса буфера, который хранит значения CDF. Эти интенсивности пикселей считываются из внешней памяти, которая хранит исходный входной кадр.

Поскольку данные, считанные из внешней памяти, находятся в пакетном режиме, они не могут использоваться непосредственно для билинейной интерполяции. Буфер кэша хранит пакет линий, считанных из внешней памяти. Глубины кэша достаточно, чтобы хранить количество линий, равное tileHeight. The rdValid сигнал от подсистемы CLAHEHDLAlgorithm генерирует rd_addr сигнал для считывания данных из кэша. Данные, считанные из кэша (pixValue) затем возвращается в подсистему CLAHEHDLAlgorithm, чтобы завершить билинейную интерполяцию, чтобы вычислить интенсивность выходного пикселя.

Аппаратная реализация

Инструмент SoC Builder создает, загружает и выполняет модель на плате FPGA. В этом примере используется аппаратная плата Xilinx ® Zynq ® ZC706. Чтобы создать, загрузить и выполнить проект на оборудовании, выполните следующие шаги.

  1. Настройте инструмент Vivado ® для синтеза, реализации и генерации битового потока FPGA.

  2. Пример модели запускается в Accelerator режим по умолчанию для ускорения симуляции. Однако инструмент SoC Builder требует Normal режим симуляции. В параметрах конфигурации Simulink установите режим симуляции Normal.

  3. Запустите инструмент SoC Builder, нажав на Configure, Build, & Развертывание на панели инструментов Simulink.

  4. Выберите Build model, а затем проверьте карту памяти на панели Review Memory Map.

  5. На панели «Выбор папки проекта» укажите папку проекта. На панели Select Build Action выберите Build, загрузите и запустите.

  6. На панели Валидация модели (Validate Model) щелкните Валидация (Validate), чтобы проверить совместимость модели для реализации. Затем нажмите Build, чтобы начать создание модели. Когда начинается синтез FPGA, открывается внешний интерпретатор.

  7. Когда генерация битового потока завершена, на панели Connect Hardware выберите Test Connection, чтобы проверить соединение между хостом-компьютером и аппаратной платой. Загрузите битовый поток на оборудование нажав кнопку Загрузить.

Этот рисунок показывает окончательные результаты SoC Builder после завершения этих шагов.

Симуляция и результаты

Этот пример использует вход видео размером 480 на 640 пикселей. Этот размер сконфигурирован в блоке HDMI RX. Для набора для оценки ZC706 Xilinx Zynq, контроллер PL DDR сконфигурирован с 64-разрядным AXI4-Slave интерфейсом, работающим на частоте 200 МГц. Получившаяся пропускная способность составляет 1600 Мбайт/с. В этом примере к контроллеру DDR подключены два мастера AXI. Эти AXI-мастера являются интерфейсами DUT AXI4 чтения и записи. Формат видео YCbCr 4:2:2 требует 2 байта на пиксель. Для интерфейсов чтения и записи AXI4 DUT каждый пиксель заполнен нулями до 4 байт. В этом случае для интерфейсов чтения и записи требуется пропускная способность 2 * 4 * 480 * 640 * 60 = 147,456 МБ/с.

Этот рисунок показывает график эффективности блока Контроллер. Чтобы просмотреть график эффективности, сначала откройте блок Контроллер. Затем на вкладке Эффективности щелкните Просмотр графиков эффективности. Выберите все шаблоны в разделе Пропускная способность и нажмите кнопку Обновить. После того, как DUT начинает запись и чтение данных во внешнюю память, пропускная способность остается на уровне около 154 МБ/с, что находится в пределах необходимой пропускной способности 147,456 МБ/с.

Сигналы в модели примера регистрируются во время симуляции. Просмотрите эти сигналы с помощью приложения Logic Analyzer. Этот рисунок показывает записанные данные входных и выходных систем координат.

Этот рисунок показывает входную и выходную системы координат из модели. Результат показывает улучшенную контрастность в выходном изображении.

Ссылки

[1] Zuiderveld, Karel. «Контрастная адаптивная гистограмма эквализации». В Graphics Gems IV под редакцией Пола С. Хекберта, 474-485. AP Professional, 1994.