Cuprins:
- Pasul 1: Ce este Vivado HLS?
- Pasul 2: Biblioteca video HLS
- Pasul 3: Sintetizarea
- Pasul 4: versiuni și alte informații pentru export
- Pasul 5: Exportul într-o bibliotecă IP Vivado
- Pasul 6: Sinteza și analiza exportului
- Pasul 7: Adăugarea bibliotecii IP în Vivado
- Pasul 8: Efectuarea unui upgrade
- Pasul 9: Detalii suplimentare și informații
- Pasul 10: ieșire și intrare
- Pasul 11: AXI Register Interfacing
- Pasul 12: Pragma fluxului de date
Video: Sinteza blocurilor video IP Vivado HLS: 12 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:46
Ați dorit vreodată să procesați în timp real videoclipuri fără a adăuga multă latență sau într-un sistem încorporat? FPGA (Field Programmable Gate Arrays) sunt uneori folosite pentru a face acest lucru; cu toate acestea, scrierea algoritmilor de procesare video în limbaje de specificații hardware precum VHDL sau Verilog este frustrantă în cel mai bun caz. Introduceți Vivado HLS, instrumentul Xilinx care vă permite să programați într-un mediu C ++ și să generați codul de limbaj de specificații hardware din acesta.
Software-uri necesare:
- Vivado HLS
- Vivado
- (Dacă utilizați registrele AXI) Vivado SDK
(Opțional) Descărcați exemplele făcute de Xilinx aici:
Exemple video Xilinx HLS
Pasul 1: Ce este Vivado HLS?
Vivado HLS este un instrument folosit pentru a transforma codul c ++ în structuri hardware care pot fi implementate pe un FPGA. Include un IDE pentru a face această dezvoltare. După ce ați finalizat dezvoltarea codului pentru HLS, puteți exporta IP-ul generat într-un format pentru utilizare cu Vivado.
Descărcați fișierele atașate și puneți-le aproape de locul în care vă veți crea proiectul. (redenumiți-le înapoi la „top.cpp” și „top.h” dacă au un nume randomizat)
Pasul 2: Biblioteca video HLS
Biblioteca video HLS conține documentație cu designuri de referință în această lucrare: XAPP1167 O altă resursă bună este pagina Xilinx Wiki despre aceasta.
Porniți Vivado HLS.
Creați un proiect nou.
Luați fișierele pe care le-ați descărcat în pasul anterior și adăugați-le ca fișiere sursă. (Notă: fișierele nu sunt copiate în proiect, ci rămân acolo unde sunt)
Apoi utilizați butonul Răsfoire pentru a selecta funcția de sus.
Pe pagina următoare, selectați partea Xilinx pe care o utilizați.
Pasul 3: Sintetizarea
Soluție => Executați C Synthesis => Soluție activă
După ~ 227.218 secunde, ar trebui să se facă. (Notă: timpul real de sinteză va varia în funcție de mulți factori)
Pasul 4: versiuni și alte informații pentru export
Numerele de versiune interacționează cu Vivado pentru a vă permite să actualizați IP-ul într-un design. Dacă este vorba de o modificare a versiunii minore, aceasta se poate face în loc, în timp ce modificările majore ale versiunii necesită adăugarea manuală a noului bloc și eliminarea celui vechi. realizat complet automat apăsând butonul de actualizare IP. Puteți rula „report_ip_status” în consola Vivado tcl pentru a vedea starea IP-ului dvs.
Setați numerele de versiune și alte informații în Soluție => Setări soluție …
Alternativ, aceste setări pot fi setate în timpul exportului.
Pasul 5: Exportul într-o bibliotecă IP Vivado
Soluție => Export RTL
Dacă nu ați setat detaliile bibliotecii IP în pasul anterior, puteți face acest lucru acum.
Pasul 6: Sinteza și analiza exportului
Pe acest ecran putem vedea statisticile despre modulul nostru exportat, arătând că acesta îndeplinește perioada de ceas de 10ns (100MHz) și cât din fiecare resursă utilizează.
Cu o combinație dintre acestea, Raportul nostru de sinteză și analiza fluxului de date, putem vedea că durează 317338 cicluri de ceas * 10ns perioadă de ceas * 14 etape ale conductei = 0,04442732 secunde. Însemnând că latența totală adăugată prin procesarea imaginii noastre este mai mică de o douăzecime de secundă (când este tactată la 100MHz vizată).
Pasul 7: Adăugarea bibliotecii IP în Vivado
Pentru a utiliza blocul IP sintetizat, va trebui să îl adăugați la Vivado.
În Vivado adăugați un depozit IP la proiectul dvs. accesând catalogul IP și făcând clic dreapta selectând „Adăugare depozit…”
Navigați la directorul de proiect Vivado HLS și selectați directorul soluției.
Ar trebui să raporteze adresa IP pe care a găsit-o.
Pasul 8: Efectuarea unui upgrade
Uneori trebuie să faceți modificări la blocul dvs. HLS după ce îl includeți într-un design Vivado.
Pentru a face acest lucru, puteți face modificările și resintezați și exportați adresa IP cu un număr de versiune mai mare (consultați detaliile din pasul anterior despre modificările numărului de versiune majoră / minoră).
După ce ați schimbat exportul noii versiuni, reîmprospătați-vă depozitele IP în Vivado. Acest lucru se poate face fie când Vivado observă că IP-ul s-a schimbat în depozit, fie este activat manual. (Rețineți, dacă vă reîmprospătați depozitele IP după ce ați început, dar înainte ca exportul să se finalizeze în HLS, IP nu va fi temporar acolo, așteptați să se termine și reîmprospătați din nou.)
În acest moment ar trebui să apară o fereastră cu informațiile despre faptul că un IP a fost modificat pe disc și vă oferă opțiunea de a-l actualiza cu un buton „Upgrade Selected”. apoi apăsarea butonului respectiv va înlocui automat vechiul IP cu cel nou, altfel ar putea fi nevoie de mai multă muncă.
Pasul 9: Detalii suplimentare și informații
Următorii pași oferă mai multe informații despre modul în care funcționează sinteza HLS și ce puteți face cu aceasta.
Pentru un exemplu de proiect care utilizează un bloc IP sintetizat HLS, consultați acest instructable.
Pasul 10: ieșire și intrare
Ieșirile și intrările către blocul IP final sunt determinate dintr-o analiză pe care sintetizatorul o face asupra fluxului de date în și din funcția de sus.
Similar cu VHDL sau verilog, HLS vă permite să specificați detalii despre conexiunile dintre IP. Aceste linii sunt exemple în acest sens:
void image_filter (AXI_STREAM & video_in, AXI_STREAM & video_out, int & x, int & y) {
#pragma HLS INTERFACE ax port = video_in bundle = INPUT_STREAM #pragma HLS INTERFACE ax port = video_out bundle = OUTPUT_STREAM #pragma HLS INTERFACE s_axilite port = x bundle = CONTROL_BUS offset = 0x14 # pragma HLS INTERFACE = yBil
Puteți vedea cum porturile expuse pe blocul IP sunt influențate de aceste directive.
Pasul 11: AXI Register Interfacing
Pentru a obține intrarea / ieșirea către / de la blocul IP către PS, o modalitate bună de a face acest lucru este printr-o interfață AXI.
Puteți specifica acest lucru în codul dvs. HLS, inclusiv compensările care vor fi utilizate pentru a accesa valoarea ulterior astfel:
void image_filter (AXI_STREAM & video_in, AXI_STREAM & video_out, int & x, int & y) {
#pragma HLS INTERFACE s_axilite port = x bundle = CONTROL_BUS offset = 0x14
#pragma HLS INTERFACE s_axilite port = y bundle = CONTROL_BUS offset = 0x1C #pragma HLS dataflow
x = 42;
y = 0xDEADBEEF; }
Odată conectat corect în Vivado, puteți accesa valorile folosind acest cod în 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);
Acest lucru vă va face să ajungeți cu 42 în x și 0xdeadbeef în y
Pasul 12: Pragma fluxului de date
În interiorul #pragma DATAFLOW, modul în care este implementat codul se schimbă față de C ++ normal. Codul este canalizat astfel încât toate instrucțiunile să ruleze în orice moment în diferite părți ale datelor (gândiți-vă la el ca la o linie de asamblare într-o fabrică, fiecare stație funcționează continuu, realizând o funcție și trecând-o la următoarea stație)
din imagine puteți vedea că fiecare dintre directive
În ciuda faptului că par a fi variabile normale, obiectele img sunt de fapt implementate ca tampoane mici între comenzi. Utilizarea unei imagini ca intrare pentru o funcție o „consumă” și o face să nu mai fie utilizabilă. (De aici necesitatea comenzilor duplicat)
Recomandat:
Motor pas cu pas controlat MIDI cu cip de sinteză digitală directă (DDS): 3 pași
Motor pas cu pas controlat MIDI cu cip de sinteză digitală directă (DDS): Ați avut vreodată o idee proastă că DOAR a trebuit să vă transformați într-un mini proiect? Ei bine, mă jucam cu o schiță pe care o făcusem pentru Arduino Due menită să fac muzică cu un modul AD9833 Direct Digital Synthesis (DDS) … și la un moment dat m-am gândit & q
Sinteza vorbirii retro. Partea: 12 IoT, Home Automation: 12 pași (cu imagini)
Sinteza vorbirii retro. Partea: 12 IoT, Home Automation: Acest articol este al 12-lea dintr-o serie de instrumente de automatizare a casei care documentează cum să creați și să integrați un dispozitiv IoT Retro Speech Synthesis Device într-un sistem de automatizare acasă existent, incluzând toate funcționalitățile software necesare pentru a activa t
Cum se folosește Vivado Simluation: 6 pași
Cum se folosește Vivado Simluation: Am făcut acest proiect de simulare pentru o clasă online. Proiectul este scris de Verilog. Vom folosi simularea în Vivado pentru a vizualiza forma de undă în enable_sr (cifra de activare) din proiectul de cronometru creat anterior. În plus, ne vom
Camara De Video En Carro De Radio Control / Camera Video pe R / C Truck: 5 Steps
Camara De Video În Carro De Radio Control / Video Camera on R / C Truck: Este Instruccionable presentado in Spanish and English
Sinteza analogică a sunetului pe computer: 10 pași (cu imagini)
Sinteza analogică a sunetului pe computer: Ca sunetul acelor vechi sintetizatoare analogice? Doriți să vă jucați cu unul singur, la propriul dvs. loc, atât timp cât doriți, GRATUIT? Aici se împlinesc visele tale cele mai sălbatice Moog. Puteți deveni un artist de înregistrare electronică sau puteți