Оглавление:
- Шаг 1. Что такое Vivado HLS?
- Шаг 2. Библиотека видео HLS
- Шаг 3: синтез
- Шаг 4. Контроль версий и другая информация для экспорта
- Шаг 5: Экспорт в IP-библиотеку Vivado
- Шаг 6: синтез и анализ экспорта
- Шаг 7: Добавление IP-библиотеки в Vivado
- Шаг 8: Выполнение обновления
- Шаг 9: Дополнительные сведения и информация
- Шаг 10: вывод и ввод
- Шаг 11: Сопряжение регистров AXI
- Шаг 12: Прагма Dataflow
Видео: Синтез IP-блоков видео Vivado HLS: 12 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
Вы когда-нибудь хотели обрабатывать видео в реальном времени без увеличения задержки или во встроенной системе? Иногда для этого используются FPGA (программируемые пользователем вентильные матрицы); однако написание алгоритмов обработки видео на языках спецификации оборудования, таких как VHDL или Verilog, в лучшем случае разочаровывает. Откройте для себя Vivado HLS, инструмент Xilinx, который позволяет вам программировать в среде C ++ и генерировать из него код языка спецификации оборудования.
Необходимое программное обеспечение:
- Vivado HLS
- Вивадо
- (Если вы используете регистры AXI) Vivado SDK
(Необязательно) Загрузите примеры, сделанные Xilinx здесь:
Примеры видео Xilinx HLS
Шаг 1. Что такое Vivado HLS?
Vivado HLS - это инструмент, используемый для превращения кода, подобного C ++, в аппаратные структуры, которые могут быть реализованы на FPGA. Он включает IDE для выполнения этой разработки. После того, как вы завершили разработку кода для HLS, вы можете экспортировать сгенерированный IP-адрес в формате для использования с Vivado.
Загрузите прикрепленные файлы и положите их рядом с тем местом, где вы будете создавать свой проект. (переименуйте их обратно в «top.cpp» и «top.h», если у них рандомизированное имя)
Шаг 2. Библиотека видео HLS
В библиотеке видео HLS есть документация со справочными проектами в этом документе: XAPP1167 Еще один хороший ресурс - это страница Xilinx Wiki об этом.
Запустите Vivado HLS.
Создайте новый проект.
Возьмите файлы, которые вы загрузили на предыдущем шаге, и добавьте их в качестве исходных файлов. (Примечание: файлы не копируются в проект, а остаются там, где они есть)
Затем используйте кнопку «Обзор», чтобы выбрать верхнюю функцию.
На следующей странице выберите деталь Xilinx, которую вы используете.
Шаг 3: синтез
Решение => Запустить C Synthesis => Активное решение
Через ~ 227,218 секунды это должно быть сделано. (Примечание: ваше фактическое время синтеза будет зависеть от многих факторов)
Шаг 4. Контроль версий и другая информация для экспорта
Номера версий взаимодействуют с Vivado, чтобы вы могли обновлять IP в дизайне. Если это незначительное изменение версии, оно может быть выполнено на месте, в то время как изменения основной версии требуют, чтобы вы вручную добавили новый блок и удалили старый. Если ваши интерфейсы не изменились, а обновление версии является второстепенным, обновление может быть выполняется полностью автоматически, нажав кнопку обновления IP. Вы можете запустить "report_ip_status" в консоли Vivado tcl, чтобы увидеть статус вашего IP.
Задайте номера версий и другую информацию в Solution => Solution Settings…
Как вариант, эти настройки можно установить во время экспорта.
Шаг 5: Экспорт в IP-библиотеку Vivado
Решение => Экспорт RTL
Если вы не установили детали IP-библиотеки на предыдущем шаге, вы можете сделать это сейчас.
Шаг 6: синтез и анализ экспорта
На этом экране мы можем увидеть статистику нашего экспортированного модуля, показывающую, что он соответствует нашему тактовому периоду 10 нс (100 МГц) и сколько ресурсов он использует.
Сочетая все это, наш сводный отчет и анализ потока данных, мы видим, что это занимает 317338 тактовых циклов * тактовый период 10 нс * 14 этапов конвейера = 0,04442732 секунды. Это означает, что общая задержка, добавленная нашей обработкой изображений, составляет менее одной двадцатой секунды (при тактовой частоте 100 МГц).
Шаг 7: Добавление IP-библиотеки в Vivado
Чтобы использовать синтезированный блок IP, вам нужно добавить его в Vivado.
В Vivado добавьте репозиторий IP в свой проект, перейдя в каталог IP и щелкнув правой кнопкой мыши, выбрав «Добавить репозиторий…»
Перейдите в каталог проекта Vivado HLS и выберите каталог решения.
Он должен сообщить IP, который он нашел.
Шаг 8: Выполнение обновления
Иногда вам нужно внести изменения в свой HLS-блок после его включения в дизайн Vivado.
Для этого вы можете внести изменения, повторно синтезировать и экспортировать IP-адрес с более высоким номером версии (см. Подробности на предыдущем шаге об изменении основного / дополнительного номера версии).
После изменения экспорта новой версии обновите репозитории IP в Vivado. Это можно сделать, когда Vivado замечает, что IP-адрес в репозитории изменился, или активировать вручную. (Обратите внимание: если вы обновляете свои репозитории IP после запуска, но до завершения экспорта в HLS, IP временно не будет там, дождитесь его завершения и обновите снова.)
На этом этапе должно появиться окно с информацией о том, что IP-адрес был изменен на диске, и дает вам возможность обновить его с помощью кнопки «Обновить выбранный». Если изменение было незначительным изменением версии и ни один из интерфейсов не изменился, затем нажатие этой кнопки автоматически заменит старый IP-адрес новым, в противном случае может потребоваться дополнительная работа.
Шаг 9: Дополнительные сведения и информация
Следующие шаги предоставляют дополнительную информацию о том, как работает синтез HLS и что с ним можно делать.
Для примера проекта, использующего блок IP, синтезированный HLS, см. Это руководство.
Шаг 10: вывод и ввод
Выходы и входы в последний IP-блок определяются на основе анализа, который синтезатор выполняет для потока данных, поступающих и исходящих из верхней функции.
Подобно VHDL или Verilog, HLS позволяет вам указывать детали о соединениях между IP. Эти строки являются примерами этого:
void image_filter (AXI_STREAM & video_in, AXI_STREAM & video_out, int & x, int & y) {
#pragma HLS INTERFACE, ось port = video_in bundle = INPUT_STREAM #pragma HLS INTERFACE axis port = video_out bundle = OUTPUT_STREAM #pragma HLS INTERFACE s_axilite port = x bundle = CONTROL_BUS offset = 0x14 # pragma HLS INTERFACE_S_S_BANDLITE_SPORT = s_Bandle_Bandle_port
Вы можете увидеть, как эти директивы влияют на порты, выставленные в блоке IP.
Шаг 11: Сопряжение регистров AXI
Чтобы получить вход / выход в / из вашего IP-блока в PS, хороший способ сделать это - через интерфейс AXI.
Вы можете указать это в своем коде HLS, включая смещения, которые будут использоваться для доступа к значению позже, например:
void image_filter (AXI_STREAM & video_in, AXI_STREAM & video_out, int & x, int & y) {
#pragma ИНТЕРФЕЙС HLS s_axilite port = x bundle = CONTROL_BUS смещение = 0x14
#pragma ИНТЕРФЕЙС HLS s_axilite port = y bundle = CONTROL_BUS offset = 0x1C #pragma HLS dataflow
х = 42;
y = 0xDEADBEEF; }
После правильного подключения в Vivado вы можете получить доступ к значениям с помощью этого кода в Vivado SDK:
#include "parameters.h"
#define xregoff 0x14 #define yregoff 0x1c x = Xil_In32 (XPAR_IMAGE_FILTER_0_S_AXI_CONTROL_BUS_BASEADDR + xregoff); y = Xil_In32 (XPAR_IMAGE_FILTER_0_S_AXI_CONTROL_BUS_BASEADDR + yregoff);
Это приведет к тому, что у вас будет 42 в x и 0xdeadbeef в y
Шаг 12: Прагма Dataflow
Внутри #pragma DATAFLOW способ реализации кода отличается от обычного C ++. Код является конвейерным, так что все инструкции всегда выполняются в разных частях данных (подумайте об этом как о сборочной линии на заводе, каждая станция работает непрерывно, выполняя одну функцию и передавая ее на следующую станцию)
из изображения видно, что каждая из директив
Несмотря на то, что они кажутся обычными переменными, объекты img на самом деле реализованы как небольшие буферы между командами. Использование изображения в качестве входных данных для функции «потребляет» его и делает непригодным для использования. (Отсюда необходимость в повторяющихся командах)
Рекомендуемые:
Воспроизведение видео с ESP32: 10 шагов (с изображениями)
Воспроизведение видео с помощью ESP32: в этих инструкциях показано, как воспроизводить видео и аудио с помощью ESP32
3D-печать Endgame Arc Reactor (видео точная и пригодная для носки): 7 шагов (с изображениями)
3D-печать Endgame Arc Reactor (Movie Accurate and Wearable): Полное руководство на Youtube: я не смог найти каких-либо особенно точных 3D-файлов для дугового реактора Mark 50 / корпуса для наночастиц, поэтому мы с моим приятелем приготовили несколько сладких. Потребовалась тонна настроек, чтобы вещь выглядела точной и потрясающей
Синтез ретро речи. Часть: 12 Интернет вещей, Домашняя автоматизация: 12 шагов (с изображениями)
Синтез ретро речи. Часть: 12 Интернет вещей, домашняя автоматизация: эта статья является 12-й в серии по домашней автоматизации Instructables, в которой описывается, как создать и интегрировать устройство синтеза речи в стиле ретро Интернета вещей в существующую систему домашней автоматизации, включая все необходимые программные функции, позволяющие
Как использовать симуляцию Vivado: 6 шагов
Как использовать Vivado Simluation: Я сделал этот проект моделирования для онлайн-класса. Проект написан Verilog. Мы будем использовать моделирование в Vivado, чтобы визуализировать форму волны в enable_sr (цифра включения) из ранее созданного проекта секундомера. Кроме того, мы будем
Синтез аналогового звука на вашем компьютере: 10 шагов (с изображениями)
Аналоговый синтез звука на вашем компьютере: Вам нравится звук тех старых аналоговых синтезаторов? Хотите играть с ним в свободное время, у себя дома, сколько хотите, БЕСПЛАТНО? Здесь сбываются ваши самые смелые мечты о Moog. Вы можете стать исполнителем электронных записей или просто