Sadržaj:

Sinteza video bloka Vivado HLS video IP: 12 koraka
Sinteza video bloka Vivado HLS video IP: 12 koraka

Video: Sinteza video bloka Vivado HLS video IP: 12 koraka

Video: Sinteza video bloka Vivado HLS video IP: 12 koraka
Video: FPGA Twitch 04 - Vivado HLS - С-тестбенчи и Назначение интерфейсов (часть 1 из 2) 2024, Studeni
Anonim
Sinteza video bloka Vivado HLS video IP
Sinteza video bloka Vivado HLS video IP

Jeste li ikada poželjeli obradu videa u stvarnom vremenu bez dodatnog kašnjenja ili u ugrađenom sustavu? Za to se ponekad koriste FPGA (Field Programmable Gate Arrays). međutim, pisanje algoritama za video obradu u jezicima specifikacija hardvera poput VHDL -a ili Veriloga u najboljem je slučaju frustrirajuće. Unesite Vivado HLS, alat Xilinx koji vam omogućuje programiranje u C ++ okruženju i generiranje koda jezika specifikacije hardvera iz njega.

Potrebni softver:

  • Vivado HLS
  • Vivado
  • (Ako koristite AXI registre) Vivado SDK

(Izborno) Ovdje preuzmite primjere izrađene od Xilinxa:

Primjeri video zapisa Xilinx HLS

Korak 1: Što je Vivado HLS?

Vivado HLS je alat koji se koristi za pretvaranje koda sličnog c ++ u hardverske strukture koje se mogu implementirati na FPGA. Uključuje IDE za ovaj razvoj. Nakon što dovršite razvoj koda za HLS, možete izvesti generirani IP u format za uporabu s Vivadom.

Preuzmite priložene datoteke i postavite ih blizu mjesta na kojem ćete stvarati svoj projekt. (preimenujte ih natrag u "top.cpp" i "top.h" ako imaju nasumično ime)

Korak 2: Videoteka HLS -a

Videoteka HLS
Videoteka HLS
Videoteka HLS
Videoteka HLS

Videoteka HLS ima dokumentaciju s referentnim dizajnom u ovom radu: XAPP1167Još jedan dobar izvor je Xilinx Wiki stranica o tome.

Pokrenite Vivado HLS.

Izradite novi projekt.

Uzmite datoteke koje ste preuzeli u prethodnom koraku i dodajte ih kao izvorne datoteke. (Napomena: datoteke se ne kopiraju u projekt, već ostaju gdje jesu)

Zatim pomoću gumba Pregledaj odaberite gornju funkciju.

Na sljedećoj stranici odaberite dio Xilinx koji koristite.

Korak 3: Sintetiziranje

Sintetiziranje
Sintetiziranje

Rješenje => Pokreni sintezu C => Aktivno rješenje

Nakon ~ 227.218 sekundi, to bi trebalo biti učinjeno. (Napomena: vaše stvarno vrijeme sinteze varirat će ovisno o mnogim faktorima)

Korak 4: Izvođenje verzija i ostale informacije za izvoz

Izvođenje verzija i ostale informacije za izvoz
Izvođenje verzija i ostale informacije za izvoz

Brojevi verzija u interakciji su s Vivadom kako biste mogli ažurirati IP u dizajnu. Ako se radi o manjoj promjeni verzije, to se može učiniti na mjestu dok velike izmjene verzija zahtijevaju da ručno dodate novi blok i uklonite stari. Ako se vaša sučelja nisu promijenila, a ažuriranje verzije je manje, ažuriranje se može vrši se potpuno automatski pritiskom na gumb za ažuriranje IP -a. Možete pokrenuti "report_ip_status" na Vivado tcl konzoli da vidite status vašeg IP -a.

Postavite brojeve verzija i druge podatke u Rješenju => Postavke rješenja …

Alternativno, ove se postavke mogu postaviti tijekom izvoza.

Korak 5: Izvoz u Vivado IP knjižnicu

Izvoz u Vivado IP knjižnicu
Izvoz u Vivado IP knjižnicu
Izvoz u Vivado IP knjižnicu
Izvoz u Vivado IP knjižnicu

Rješenje => Izvoz RTL -a

Ako u prethodnom koraku niste postavili pojedinosti o IP biblioteci, to možete učiniti sada.

Korak 6: Sinteza i izvozna analiza

Sinteza i izvozna analiza
Sinteza i izvozna analiza
Sinteza i izvozna analiza
Sinteza i izvozna analiza
Sinteza i izvozna analiza
Sinteza i izvozna analiza

Na ovom ekranu možemo vidjeti statistiku o našem izvezenom modulu, koja pokazuje da zadovoljava naše razdoblje od 10ns (100MHz) i koliko svakog resursa koristi.

Kombinacijom ovoga, našeg sintetskog izvješća i naše analize protoka podataka, možemo vidjeti da je potrebno 317338 ciklusa takta * razdoblje takta 10ns * 14 faza cjevovoda = 0,04442732 sekunde. Što znači da je ukupna latencija dodana našom obradom slike manja od jedne dvadesete sekunde (kada radi na ciljanih 100MHz).

Korak 7: Dodavanje IP knjižnice u Vivadu

Dodavanje IP knjižnice u Vivadu
Dodavanje IP knjižnice u Vivadu
Dodavanje IP knjižnice u Vivadu
Dodavanje IP knjižnice u Vivadu
Dodavanje IP knjižnice u Vivadu
Dodavanje IP knjižnice u Vivadu
Dodavanje IP knjižnice u Vivadu
Dodavanje IP knjižnice u Vivadu

Da biste koristili svoj sintetizirani IP blok, morat ćete ga dodati u Vivado.

U Vivadu dodajte IP spremište u svoj projekt tako da odete na IP katalog i desnom tipkom miša odaberete "Dodaj spremište …"

Idite u direktorij projekta Vivado HLS i odaberite direktorij rješenja.

Trebao bi prijaviti IP koji je pronašao.

Korak 8: Nadogradnja

Radite nadogradnju
Radite nadogradnju
Radite nadogradnju
Radite nadogradnju
Radite nadogradnju
Radite nadogradnju

Ponekad morate unijeti promjene u svoj HLS blok nakon što ga uključite u Vivado dizajn.

Da biste to učinili, možete unijeti promjene i ponovno sintetizirati i izvesti IP s većim brojem verzije (pogledajte detalje u prethodnim koracima o velikim/manjim promjenama broja verzije).

Nakon promjene izvoza nove verzije, osvježite svoja IP spremišta u Vivadu. To se može učiniti kad Vivado primijeti da se IP promijenio u spremištu ili se može ručno aktivirati. (Napomena, ako osvježite svoja spremišta IP -a nakon pokretanja, ali prije nego što se izvoz dovrši u HLS -u, IP privremeno neće biti tu, pričekajte da se završi i ponovno osvježite.)

U ovom trenutku trebao bi se pojaviti prozor s informacijom da je IP promijenjen na disku i daje vam mogućnost da ga ažurirate gumbom "Nadograđeno odabrano". Ako je promjena bila manja verzija verzije i nijedno sučelje se nije promijenilo, pritiskom na taj gumb automatski će se stari IP zamijeniti novim, u protivnom će možda biti potrebno više posla.

Korak 9: Dodatni detalji i informacije

Sljedeći koraci pružaju više informacija o tome kako sinteza HLS -a funkcionira i što možete učiniti s njom.

Za primjer projekta koji koristi HLS sintetizirani IP blok, pogledajte ovu uputu.

Korak 10: Izlaz i ulaz

Izlaz i ulaz
Izlaz i ulaz
Izlaz i ulaz
Izlaz i ulaz

Izlazi i ulazi u konačni IP blok određuju se analizom koju sintisajzer radi o protoku podataka unutar i izvan gornje funkcije.

Slično kao u VHDL -u ili verilogu, HLS vam omogućuje da navedete pojedinosti o vezama između IP -a. Primjeri za to su ove crtice:

void image_filter (AXI_STREAM & video_in, AXI_STREAM & video_out, int & x, int & y) {

#pragma HLS INTERFACE osi port = video_in snop = INPUT_STREAM #pragma HLS INTERFACE osi port = video_out snop = OUTPUT_STREAM #pragma HLS INTERFACE s_axilite port = x paket = CONTROL_BUS pomak = 0x14 #pragma HLS x hLxx hLS x hLxx HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HLS x HEX

Možete vidjeti kako ove direktive utječu na portove izložene u IP bloku.

Korak 11: Sučelje AXI registra

Sučelje AXI registra
Sučelje AXI registra

Da biste dobili ulaz/izlaz u/iz vašeg IP bloka do PS -a, dobar način za to je putem AXI sučelja.

To možete navesti u svom HLS kodu, uključujući pomake koji će se kasnije koristiti za pristup vrijednosti ovako:

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 tok podataka

x = 42;

y = 0xDEADBEEF; }

Nakon što ste ispravno povezani u Vivadu, možete pristupiti vrijednostima pomoću ovog koda u Vivado SDK -u:

#include "parametri.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);

Tako ćete imati 42 u x i 0xdeadbeef u y

Korak 12: Pragma protoka podataka

Pragma protoka podataka
Pragma protoka podataka
Pragma protoka podataka
Pragma protoka podataka
Pragma protoka podataka
Pragma protoka podataka

Unutar #pragme DATAFLOW način implementacije koda mijenja se od normalnog C ++. Kôd se usmjerava tako da se sve upute izvode u svakom trenutku u različitim dijelovima podataka (Zamislite to kao tvorničku montažnu liniju, svaka stanica radi neprekidno obavljajući jednu funkciju i prosljeđujući je sljedećoj stanici)

sa slike možete vidjeti da je svaka od direktiva

Unatoč tome što se čine normalnim varijablama, img objekti su zapravo implementirani kao mali međuspremnici između naredbi. Korištenje slike kao ulaza u funkciju "troši" je i čini je više neupotrebljivom. (Otuda potreba za duplikatima naredbi)

Preporučeni: