Съдържание:
- Стъпка 1: Какво представлява Vivado HLS?
- Стъпка 2: HLS видео библиотека
- Стъпка 3: Синтезиране
- Стъпка 4: Версия и друга информация за експортиране
- Стъпка 5: Експортиране в Vivado IP библиотека
- Стъпка 6: Синтез и анализ на експорта
- Стъпка 7: Добавяне на IP библиотека във Vivado
- Стъпка 8: Извършване на ъпгрейд
- Стъпка 9: Допълнителни подробности и информация
- Стъпка 10: Изход и вход
- Стъпка 11: Свързване на AXI регистър
- Стъпка 12: Прагма на потока данни
Видео: Vivado HLS Video IP Block Synthesis: 12 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:54
Искали ли сте някога обработка на видео в реално време без добавяне на много латентност или в вградена система? Понякога за това се използват FPGA (Field Programmable Gate Arrays); обаче писането на алгоритми за обработка на видео в езици за хардуерни спецификации като 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 синтез => Активно решение
След ~ 227.218 секунди трябва да се направи. (Забележка: действителното ви време за синтез ще варира в зависимост от много фактори)
Стъпка 4: Версия и друга информация за експортиране
Номерата на версиите взаимодействат с Vivado, за да ви позволят да актуализирате IP в дизайна. Ако това е незначителна промяна на версията, тя може да се извърши, докато основните промени изискват ръчно добавяне на новия блок и премахване на стария. Ако интерфейсите ви не са се променили и актуализацията на версията е незначителна, актуализацията може да бъде направено напълно автоматично чрез натискане на бутона за актуализиране на IP. Можете да стартирате „report_ip_status“в конзолата на Vivado tcl, за да видите състоянието на вашия IP.
Задайте номера на версията и друга информация в Solution => Solution Settings …
Като алтернатива тези настройки могат да бъдат зададени по време на експортирането.
Стъпка 5: Експортиране в Vivado IP библиотека
Решение => Експортиране на RTL
Ако не сте задали подробности за IP библиотеката в предишната стъпка, можете да направите това сега.
Стъпка 6: Синтез и анализ на експорта
На този екран можем да видим статистическите данни за нашия експортиран модул, показващи, че той отговаря на нашия тактов период от 10ns (100MHz) и колко от всеки ресурс използва.
С комбинация от това, нашият синтезиран доклад и нашия анализ на потока данни можем да видим, че отнема 317338 тактови цикъла * 10ns тактов период * 14 етапа на конвейера = 0,04442732 секунди. Това означава, че общата латентност, добавена от нашата обработка на изображения, е по -малка от една двадесета от секундата (когато се задейства на целевите 100MHz).
Стъпка 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 и какво можете да направите с него.
За пример на проект, използващ HLS синтезиран IP блок, вижте тази инструкция.
Стъпка 10: Изход и вход
Изходите и входовете към крайния IP блок се определят от анализ, който синтезаторът извършва за потока от данни във и извън функцията top.
Подобно на VHDL или verilog, HLS ви позволява да посочите подробности за връзките между IP. Тези редове са примери за това:
void image_filter (AXI_STREAM & video_in, AXI_STREAM & video_out, int & x, int & y) {
#pragma HLS INTERFACE ос порт = video_in пакет = INPUT_STREAM #pragma HLS INTERFACE ос порт = video_out пакет = OUTPUT_STREAM #pragma HLS ИНТЕРФЕЙС s_axilite порт = x пакет = CONTROL_BUS отместване = 0x14 #pragma sLBxx xLSx bLxx hLSx bLxx hLS x hLS x hLS x hLS x hLS x hLS x hLS xx
Можете да видите как портовете, изложени на 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 порт = x пакет = CONTROL_BUS отместване = 0x14
#pragma HLS INTERFACE s_axilite port = y bundle = CONTROL_BUS offset = 0x1C #pragma HLS поток от данни
x = 42;
y = 0xDEADBEEF; }
След като се свържете правилно във Vivado, можете да получите достъп до стойностите, като използвате този код във Vivado SDK:
#include "параметри.h"
#дефинирайте xregoff 0x14 #дефинирайте 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: Прагма на потока данни
Вътре в #pragma DATAFLOW начинът на внедряване на кода се променя от нормалния C ++. Кодът е конвейерен, така че всички инструкции да се изпълняват по всяко време в различни части на данните (Мислете за това като за монтажна линия във фабрика, всяка станция работи непрекъснато, като изпълнява една функция и я предава на следващата станция)
от изображението можете да видите, че всяка от директивите
Въпреки че изглеждат като нормални променливи, img обектите всъщност се реализират като малки буфери между командите. Използването на изображение като вход за функция го "консумира" и го прави вече неизползваем. (Следователно необходимостта от дублиращи се команди)
Препоръчано:
UK Ring Video Doorbell Pro, работещ с механичен звънец: 6 стъпки (със снимки)
UK Ring Video Doorbell Pro, работещ с механичен звънец: **************************************** *************** Моля, обърнете внимание, че този метод работи само с променливотоково захранване в момента Ще актуализирам, ако/когато намеря решение за звънеца на врати, използващи DC захранване Междувременно, ако имате DC захранване доставка, ще ви трябва т
Vídeo Tutoriales De Tecnologías Creativas 01: Здравей, свят! Blink, Hacemos Parpadear Nuestro Primer Led Con Arduino: 4 стъпки
Vídeo Tutoriales De Tecnologías Creativas 01: Здравей свят! Blink, Hacemos Parpadear Nuestro Primer Led Con Arduino: Естествен урок за апрендер, който е хапър на parpadear (мига) с LED диод с Arduino Uno. Este ejercicio lo realizaremos mediaante simulación y para ello utilizaremos Tinkercad Circuits (utilizando una cuenta gratuita). A Continuación se
ESP 32 Camera Streaming Video Over WiFi - Първи стъпки с ESP 32 CAM Board: 8 стъпки
ESP 32 Camera Streaming Video Over WiFi | Първи стъпки с ESP 32 CAM Board: ESP32-CAM е много малък камерен модул с чип ESP32-S, който струва приблизително 10 долара. Освен камерата OV2640 и няколко GPIO за свързване на периферни устройства, тя разполага и със слот за microSD карта, която може да бъде полезна за съхраняване на изображения, направени с
Слънчев монитор Mario Question Block: 7 стъпки (със снимки)
Слънчев монитор на блок за въпроси на Марио: На покрива имаме система от слънчеви панели, която генерира електричество за нас. Това беше голяма инвестиция отпред и се изплаща бавно с времето. Винаги съм мислил за това като стотинка, която пада в кофа на всеки няколко секунди, когато слънцето е излязло. Да
Как да използвате Vivado Simluation: 6 стъпки
Как да използвам Vivado Simluation: Направих този симулационен проект за онлайн клас. Проектът е написан от Verilog. Ще използваме симулация във Vivado, за да визуализираме формата на вълната в enable_sr (цифра за активиране) от предварително създадения проект за хронометър. Освен това ще ни