Kazalo:

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

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

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

Ste si kdaj želeli obdelavo videa v realnem času, ne da bi dodali veliko zamud ali v vgrajenem sistemu? Za to se včasih uporabljajo FPGA -ji (Field Programmable Gate Arrays). pisanje algoritmov za obdelavo videa v jezikih specifikacij strojne opreme, kot sta VHDL ali Verilog, pa je v najboljšem primeru frustrirajoče. Vnesite Vivado HLS, orodje Xilinx, ki vam omogoča programiranje v okolju C ++ in ustvarjanje kode jezika specifikacije strojne opreme iz njega.

Potrebna programska oprema:

  • Vivado HLS
  • Vivado
  • (Če uporabljate registre AXI) Vivado SDK

(Izbirno) Prenesite primere Xilinxa tukaj:

Primeri videoposnetkov Xilinx HLS

1. korak: Kaj je Vivado HLS?

Vivado HLS je orodje za pretvorbo kode, podobne c ++, v strukture strojne opreme, ki jih je mogoče implementirati na FPGA. Vključuje IDE za ta razvoj. Ko končate razvoj kode za HLS, lahko izvozite ustvarjeni IP v obliki za uporabo z Vivadom.

Prenesite priložene datoteke in jih postavite blizu mesta, kjer boste ustvarjali svoj projekt. (preimenujte jih nazaj v "top.cpp" in "top.h", če imajo naključno ime)

Korak: Videoteka HLS

Video knjižnica HLS
Video knjižnica HLS
Video knjižnica HLS
Video knjižnica HLS

Video knjižnica HLS ima v tem dokumentu dokumentacijo z referenčnimi oblikami: XAPP1167 Drug dober vir je stran Xilinx Wiki o tem.

Zaženite Vivado HLS.

Ustvarite nov projekt.

Vzemite datoteke, ki ste jih prenesli v prejšnjem koraku, in jih dodajte kot izvorne datoteke. (Opomba: datoteke se ne kopirajo v projekt, ampak ostanejo tam, kjer so)

Nato z gumbom za brskanje izberite zgornjo funkcijo.

Na naslednji strani izberite del Xilinx, ki ga uporabljate.

3. korak: sintetiziranje

Sinteza
Sinteza

Rešitev => Zaženi sintezo C => Aktivna rešitev

Po ~ 227,218 sekundah je to treba storiti. (Opomba: vaš dejanski čas sinteze se bo razlikoval glede na številne dejavnike)

4. korak: Različice in druge informacije za izvoz

Različice in druge informacije za izvoz
Različice in druge informacije za izvoz

Številke različic delujejo z Vivadom, da lahko posodobite IP v zasnovi. Če gre za manjšo spremembo različice, je to mogoče storiti, medtem ko velike spremembe različice zahtevajo, da ročno dodate nov blok in odstranite starega. Če se vaši vmesniki niso spremenili in je posodobitev različice manjša, lahko posodobitev se izvede popolnoma samodejno s pritiskom na gumb za posodobitev IP -ja. Za prikaz stanja svojega IP -ja lahko zaženete "report_ip_status" v konzoli Vivado tcl.

Številke različice in druge podatke nastavite v Rešitvi => Nastavitve rešitve …

Druga možnost je, da te nastavitve nastavite med izvozom.

5. korak: Izvoz v knjižnico IP Vivado

Izvoz v knjižnico IP Vivado
Izvoz v knjižnico IP Vivado
Izvoz v knjižnico IP Vivado
Izvoz v knjižnico IP Vivado

Rešitev => Izvozi RTL

Če v prejšnjem koraku niste nastavili podrobnosti knjižnice IP, lahko to storite zdaj.

Korak 6: Sinteza in izvozna analiza

Sinteza in izvozna analiza
Sinteza in izvozna analiza
Sinteza in izvozna analiza
Sinteza in izvozna analiza
Sinteza in izvozna analiza
Sinteza in izvozna analiza

Na tem zaslonu lahko vidimo statistične podatke o izvoženem modulu, ki kažejo, da izpolnjuje naše časovno obdobje 10ns (100MHz) in koliko vsakega vira uporablja.

S kombinacijo tega, našega sinteznega poročila in naše analize pretoka podatkov lahko vidimo, da traja 317338 ur ciklov * 10ns urno obdobje * 14 faz cevovoda = 0,04442732 sekund. To pomeni, da je skupna zakasnitev, ki jo doda naša obdelava slik, manjša od ene dvajsete sekunde (če deluje pri ciljnih 100 MHz).

7. korak: Dodajanje knjižnice IP v Vivado

Dodajanje knjižnice IP v Vivadu
Dodajanje knjižnice IP v Vivadu
Dodajanje knjižnice IP v Vivadu
Dodajanje knjižnice IP v Vivadu
Dodajanje knjižnice IP v Vivadu
Dodajanje knjižnice IP v Vivadu
Dodajanje knjižnice IP v Vivadu
Dodajanje knjižnice IP v Vivadu

Če želite uporabiti sintetiziran blok IP, ga boste morali dodati v Vivado.

V Vivadu dodajte skladišče IP v svoj projekt, tako da odprete katalog IP in z desno tipko miške kliknete »Dodaj skladišče…«

Pomaknite se do imenika projekta Vivado HLS in izberite imenik rešitev.

Poročati mora IP, ki ga je našel.

8. korak: Nadgradnja

Izvajanje nadgradnje
Izvajanje nadgradnje
Izvajanje nadgradnje
Izvajanje nadgradnje
Izvajanje nadgradnje
Izvajanje nadgradnje

Včasih morate spremeniti svoj blok HLS, potem ko ga vključite v zasnovo Vivado.

Če želite to narediti, lahko naredite spremembe ter znova sintetizirate in izvozite IP z višjo številko različice (glejte podrobnosti v prejšnjem koraku o večjih/manjših spremembah številk različice).

Ko spremenite izvoz nove različice, osvežite skladišča IP v Vivadu. To lahko storite, če Vivado opazi, da se je IP spremenil v skladišču, ali pa ročno aktivirajte. (Opomba: če po zagonu osvežite svoja skladišča IP, vendar preden se izvoz konča v HLS, IP začasno ne bo tam, počakajte, da se konča, in znova osvežite.)

Na tem mestu bi se moralo prikazati okno z informacijami, da je bil IP spremenjen na disku, in vam omogočilo, da ga posodobite z gumbom »Nadgradi izbrano«. Če je bila sprememba manjša različica in se noben vmesnik ni spremenil, potem pritisk na ta gumb samodejno nadomesti stari IP z novim, sicer bo morda potrebno več dela.

9. korak: Dodatne podrobnosti in informacije

Naslednji koraki ponujajo več informacij o tem, kako deluje sinteza HLS in kaj lahko storite z njo.

Za primer projekta, ki uporablja blok IP, sintetiziran s HLS, glejte ta navodila.

10. korak: Izhod in vnos

Izhod in vhod
Izhod in vhod
Izhod in vhod
Izhod in vhod

Izhodi in vhodi v zadnji blok IP so določeni z analizo pretoka podatkov, ki jih sintetizator izvede v in iz zgornje funkcije.

Podobno kot v VHDL ali verilogu vam HLS omogoča, da določite podrobnosti o povezavah med IP. Te vrstice so primeri tega:

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

#pragma HLS INTERFACE osna vrata = video_in sveženj = INPUT_STREAM #pragma HLS INTERFACE osna vrata = video_out sveženj = OUTPUT_STREAM #pragma HLS INTERFACE s_axilite vrata = x sveženj = CONTROL_BUS odmik = 0x14 #pragma CONTROLB_SLxx xLxx xLxx HLS x HLS x HEX

Vidite lahko, kako te direktive vplivajo na vrata, prikazana v bloku IP.

Korak: Vmesnik registra AXI

Vmesnik registra AXI
Vmesnik registra AXI

Za vhod/izhod v/iz vašega bloka IP do PS je to dober način prek vmesnika AXI.

To lahko določite v kodi HLS, vključno z odmiki, ki bodo uporabljeni za poznejši dostop do vrednosti, na naslednji način:

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

#pragma HLS INTERFACE s_axilite port = x sveženj = CONTROL_BUS offset = 0x14

#pragma HLS INTERFACE s_axilite port = y sveženj = CONTROL_BUS offset = 0x1C #pragma HLS podatkovni tok

x = 42;

y = 0xDEADBEEF; }

Ko ste pravilno povezani v Vivadu, lahko dostopate do vrednosti s to kodo v Vivado SDK:

#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 boste imeli 42 v x in 0xdeadbeef v y

Korak: Pragma pretoka podatkov

Pragma podatkovnega toka
Pragma podatkovnega toka
Pragma podatkovnega toka
Pragma podatkovnega toka
Pragma podatkovnega toka
Pragma podatkovnega toka

Znotraj #pragma DATAFLOW se način izvajanja kode spreminja od običajnega C ++. Koda je načrtovana tako, da se vsa navodila izvajajo ves čas v različnih delih podatkov (pomislite na to kot na tovarniško montažno linijo, vsaka postaja deluje neprekinjeno in opravlja eno funkcijo ter jo posreduje naslednji postaji)

iz slike lahko vidite, da je vsaka od direktiv

Kljub temu, da se zdijo normalne spremenljivke, so predmeti img dejansko izvedeni kot majhni medpomnilniki med ukazi. Če uporabite sliko kot vhod za funkcijo, jo "porabi" in postane več neuporabna. (Zato so potrebni podvojeni ukazi)

Priporočena: