В этом примере показано, как реализовать алгоритм ограниченной контрастом адаптивной эквализации гистограммы (CLAHE) для FPGA, включая интерфейс внешней памяти.
Оценочный комплект Xilinx® Zynq® ZC706 + дополнительная плата FMC-HDMI-CAM
Алгоритмы обработки видеоданных часто хранят полную систему координат видеоданных в памяти. Реализация этого устройства хранения данных на FPGA увеличивает использование BRAM и может привести к входным ограничениям разрешения видео. В этом примере показано, как реализовать алгоритмы визуализации для FPGAs при помощи ресурса внешней памяти, чтобы уменьшать использование BRAM и позволить обработать более высокого входного видео разрешения.
Интерфейс внешней памяти в этом примере использует протоколы AXI4 и проверяет проект по нехватке памяти. Интерфейс AXI4 Random Access обеспечивает простой, прямой интерфейс к межсоединению памяти. Этот протокол позволяет алгоритму действовать как ведущее устройство памяти путем обеспечения адресам и управлению пакетной передачи непосредственно. Основной Контроллер Записи AXI4 и Контроллер Ведущего устройства AXI4 Рида блоки в этом примере моделируют упрощенный интерфейс AXI-4 в Simulink™. Когда вы генерируете HDL-код с помощью продукта HDL Coder™, сгенерированный код включает полностью совместимый IP интерфейса AXI4.
Можно использовать блоки SoC Blockset™ и инструменты визуализации для моделирования, симуляции и анализа аппаратных и программных архитектур для ASICs, FPGAs и систем на чипе (SoC). Эти функции могут помочь вам архитектура системы сборки с помощью моделей памяти, моделей шины, и соединить интерфейсом с моделями и помочь вам симулировать архитектуру вместе с алгоритмами. Эта внешняя память моделей в качестве примера с помощью двух блоков из библиотек SoC Blockset:
Канал памяти: Эти потоковые данные о блоке через внешнюю память. Это моделирует передачу данных между чтением, и напишите основные алгоритмы через общую память. Этот пример использует тип канала Произвольного доступа 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 Write Controller пишет входной кадр во внешнюю память, и блок AXI4-Master Read Controller читает систему координат из внешней памяти для билинейной интерполяции. Блок AXI Read FIFO отправляет поток выходного пикселя в блок HDMI Tx. Блок HDMI Tx преобразует пиксельный поток в формате YCbCr 4:2:2 к необработанным видеоданным для отображения в процессе моделирования. Этот блок также направляет инструмент SoC Builder, чтобы сгенерировать блоки IP, которые передают видеоданные назад к карте FMC-HDMI-CAM. Чтобы указать на состояние Рида AXI FIFO и Запись AXI блоки FIFO при выполнении проекта на оборудовании, четыре сигнала отладки от этих блоков соединяются со светодиодами на плате.
Следующий рисунок показывает образец модели CLAHEAlgorithm_fpga. Поток входного пикселя соединяется с блоком Video Stream Connector. Этот блок обеспечивает интерфейс потоковой передачи видео, чтобы соединить любых двух дюйм/с в реализации FPGA. В этом примере блоки Коннектора Видеопотока соединяют блоки ввода и вывода HDMI с остальной частью алгоритма FPGA.
Следующий рисунок показывает подсистему CLAHEAlgorithm_fpga/CLAHE, которая реализует запись AXI и чтение от внешней памяти и алгоритм CLAHE.
Подсистема содержит эти области: * Запись AXI к Памяти: Этот раздел пишет входные данные в DDR. Это состоит из блока AXI4 Master Write Controller, который получает входную информацию об управлении видео от блока HDMI Rx и моделирует интерфейс с отображенной памятью AXI4 для того, чтобы записать данные в DDR. Это генерирует пять сигналов: wr_addr
, wr_len
, wr_valid
, rd_start
, и frame
. wr_valid
сигнал является входом с блоком AXI Write FIFO, который хранит входящие интенсивности пикселей. Блок SoC Bus Creator генерирует wrCtrlOut
ведущее устройство к ведомой шине для записи данных в DDR. Модель пишет одну линию данных на пакет. После писания линий tileHeight/2 (где tileHeight соответствует высоте каждой мозаики в CLAHE), модель утверждает rd_start
сигнал начать запрос чтения. frame
сигнал указывает на количество входного кадра.
Чтение AXI из памяти: Этот раздел считывает данные из 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 для оборудования смотрите Контрастный Ограниченный Адаптивный пример Эквализации Гистограммы. Подсистема CLAHEHDLAlgorithm работает с 8-битными полутоновыми изображениями, который является, почему 8-битная яркость (Y) компонент разделяется от 16-битных пиксельных данных YCbCr.
Подсистема CLAHEHDLAlgorithm выполняет три шага CLAHE: плиточное размещение, эквализация гистограммы и билинейная интерполяция. В первом шаге входной кадр разделен на 8 8 сетка мозаик. На втором шаге гистограмма каждой мозаики вычисляется, и затем выполняет распределение, перераспределение и вычисления CDF. Расчетные значения CDF хранятся в буфере для последующей обработки. Третий шаг вычисляет интенсивность выходного пикселя при помощи билинейной интерполяции значений CDF. Интенсивности пикселей входного кадра используются в качестве адреса к буферу, который хранит значения CDF. Эти интенсивности пикселей читаются из внешней памяти, которая хранит исходный входной кадр.
Поскольку чтение данных назад от внешней памяти находится в пакетном режиме, это не может использоваться непосредственно для билинейной интерполяции. Кэш-буфер хранит пакет строк, прочитанных от внешней памяти. Глубины кэша достаточно, чтобы сохранить много линий, равных tileHeight. rdValid
сигнал от подсистемы CLAHEHDLAlgorithm генерирует rd_addr
предупредите, чтобы считать данные из кэша. Данные считаны из кэша (pixValue
) затем возвращен в подсистему CLAHEHDLAlgorithm, чтобы завершить билинейную интерполяцию, чтобы вычислить интенсивность выходного пикселя.
Сборки инструмента SoC Builder, загрузки, и выполняют модель на плате FPGA. Аппаратная плата, используемая в этом примере, является оценочным комплектом Xilinx® Zynq® ZC706. Чтобы создать, загрузите, и выполните проект на оборудовании, выполните эти шаги.
Настройте инструмент Vivado® для синтеза, реализации и генерации потока битов FPGA.
Модель в качестве примера запускается в Accelerator
режим по умолчанию, чтобы ускорить симуляцию. Однако инструмент SoC Builder требует Normal
режим симуляции. В Параметрах конфигурации Simulink, режиме Simulation набора к Normal
.
Запустите инструмент SoC Builder путем нажатия на Configure, Build, & Deploy в Панели инструментов Simulink.
Выбор создает модель, и затем рассматривает карту распределения памяти в панели Карты распределения памяти Анализа.
В Выбрать панели Project Folder задайте свою папку проекта. В Выбрать панели Build Action выберите Build, загрузку и запуск.
В Подтверждать панели Модели нажмите Validate, чтобы проверять совместимость модели для реализации. Затем нажмите Build, чтобы начать создавать модель. Когда синтез FPGA запускается, внешний интерпретатор открывается.
Когда генерация потока битов будет завершена в Аппаратной панели Подключения, выберите Test Connection, чтобы протестировать связь между хостом - компьютером и аппаратной платой. Загрузите поток битов на оборудовании путем нажатия на Load.
Этот рисунок показывает итоговому Разработчику SoC результаты после того, как эти шаги будут завершены.
Этот пример использует входное видео размера 480 640 пиксели. Этот размер сконфигурирован в блоке HDMI Rx. Для оценочного комплекта Xilinx Zynq ZC706 контроллер PL DDR сконфигурирован с 64-битным интерфейсом AXI4-Slave, достигающим 200 МГц. Получившаяся полоса пропускания составляет 1 600 Мбайт/с. Этот пример имеет два ведущих устройства AXI, соединенные с контроллером DDR. Эти ведущие устройства AXI являются чтением DUT AXI4 и интерфейсами записи. Формат видео YCbCr 4:2:2 требует 2 байт на пиксель. Для чтения DUT AXI4 и интерфейсов записи, каждый пиксель дополнен нулем к 4 байтам. В этом случае чтение и интерфейсы записи имеют требование пропускной способности 2*4*480*640*60 = 147,456 Мбайт/с.
Этот рисунок показывает график эффективности блока Memory Controller. Чтобы просмотреть график эффективности, откройте сначала блок Memory Controller. Затем на вкладке Performance нажмите графики эффективности View. Выберите все ведущие устройства под Полосой пропускания, и затем нажмите Update. После того, как DUT начинает писать и считывать данные во внешнюю память, пропускная способность остается приблизительно 154 Мбайт/с, который является в необходимой пропускной способности 147,456 Мбайт/с.
Сигналы в модели в качестве примера регистрируются в процессе моделирования. Просмотрите эти сигналы при помощи приложения Logic Analyzer. Этот рисунок показывает записанные данные систем координат ввода и вывода.
Этот рисунок показывает системы координат ввода и вывода из модели. Результат показывает улучшенный контраст в выходном изображении.
[1] Zuiderveld, Карел. "Контрастная Ограниченная Адаптивная Эквализация Гистограммы". В Графическом IV Драгоценных камней, отредактированном Полом С. Хекбертом, 474-485. Профессионал AP, 1994.
Memory Channel (SoC Blockset) | Memory Controller (SoC Blockset) | Memory Traffic Generator (SoC Blockset)