Obsah:

Syntéza bloku IP videa Vivado HLS Video: 12 krokov
Syntéza bloku IP videa Vivado HLS Video: 12 krokov

Video: Syntéza bloku IP videa Vivado HLS Video: 12 krokov

Video: Syntéza bloku IP videa Vivado HLS Video: 12 krokov
Video: ПЛИС для начинающих: Разбираем задачи из Хэррис и Хэррис: упражнение 4.5: Решение 1 2024, Júl
Anonim
Syntéza bloku IP videa Vivado HLS Video
Syntéza bloku IP videa Vivado HLS Video

Už ste niekedy chceli spracovanie videa v reálnom čase bez pridania veľkej latencie alebo vo vstavanom systéme? Niekedy sa na to používa FPGA (Field Programmable Gate Arrays); písanie algoritmov na spracovanie videa v jazykoch hardvérovej špecifikácie, ako je VHDL alebo Verilog, je však prinajlepšom frustrujúce. Zadajte Vivado HLS, nástroj Xilinx, ktorý vám umožňuje programovať v prostredí C ++ a generovať z neho kód jazykovej špecifikácie hardvéru.

Požadovaný softvér:

  • Vivado HLS
  • Vivado
  • (Ak používate registre AXI) Vivado SDK

(Voliteľné) Stiahnite si príklady vytvorené spoločnosťou Xilinx tu:

Príklady videa Xilinx HLS

Krok 1: Čo je Vivado HLS?

Vivado HLS je nástroj používaný na premenu kódu podobného kódu C ++ na hardvérové štruktúry, ktoré je možné implementovať na FPGA. Obsahuje IDE na tento vývoj. Po dokončení vývoja kódu pre HLS môžete vygenerovanú IP adresu exportovať vo formáte na použitie s Vivado.

Stiahnite si priložené súbory a umiestnite ich blízko miesta, kde budete vytvárať svoj projekt. (ak majú náhodný názov, premenujte ich späť na „top.cpp“a „top.h“)

Krok 2: Videotéka HLS

Videotéka HLS
Videotéka HLS
Videotéka HLS
Videotéka HLS

Videoknižnica HLS má dokumentáciu s referenčnými návrhmi v tomto článku: XAPP1167 Ďalším dobrým zdrojom je stránka Wil Xx o tom.

Spustite Vivado HLS.

Vytvorte nový projekt.

Vezmite súbory, ktoré ste stiahli v predchádzajúcom kroku, a pridajte ich ako zdrojové súbory. (Poznámka: súbory sa nekopírujú do projektu, ale zostanú tam, kde sú)

Potom pomocou tlačidla Prehľadávať vyberte najvyššiu funkciu.

Na ďalšej stránke vyberte časť Xilinx, ktorú používate.

Krok 3: Syntetizácia

Syntetizácia
Syntetizácia

Riešenie => Spustite syntézu C => Aktívne riešenie

Po ~ 227,218 sekundách by ste to mali urobiť. (Poznámka: váš skutočný čas syntézy sa bude líšiť v závislosti od mnohých faktorov)

Krok 4: Verzia a ďalšie informácie pre export

Správa verzií a ďalšie informácie pre export
Správa verzií a ďalšie informácie pre export

Čísla verzií interagujú s Vivado, aby vám umožnili aktualizovať IP v dizajne. Ak ide o menšiu verziu, je možné ju vykonať na mieste, zatiaľ čo zmeny veľkých verzií vyžadujú, aby ste nový blok pridali ručne a odstránili starý. Ak sa vaše rozhrania nezmenili a aktualizácia verzie je menšia, aktualizáciu je možné vykonať Vykonáva sa úplne automaticky stlačením tlačidla Aktualizovať IP. Stav „IP“môžete spustiť v konzole Vivado tcl, aby ste videli.

Nastavte čísla verzií a ďalšie informácie v časti Riešenie => Nastavenia riešenia …

Alternatívne je možné tieto nastavenia nastaviť počas exportu.

Krok 5: Export do knižnice IP Vivado

Export do knižnice IP Vivado
Export do knižnice IP Vivado
Export do knižnice IP Vivado
Export do knižnice IP Vivado

Riešenie => Exportovať RTL

Ak ste v predchádzajúcom kroku nenastavili podrobnosti o knižnici IP, môžete to urobiť teraz.

Krok 6: Syntéza a exportná analýza

Syntéza a exportná analýza
Syntéza a exportná analýza
Syntéza a exportná analýza
Syntéza a exportná analýza
Syntéza a exportná analýza
Syntéza a exportná analýza

Na tejto obrazovke vidíme štatistiky o našom exportovanom module, ktoré ukazujú, že spĺňa naše časové obdobie 10ns (100 MHz) a koľko z každého zdroja používa.

Vďaka kombinácii tejto našej súhrnnej správy a našej analýzy toku údajov vidíme, že to trvá 317 338 hodinových cyklov * 10 -hodinové časové obdobie * 14 fáz potrubia = 0,04442732 sekundy. To znamená, že celková latencia pridaná naším spracovaním obrazu je kratšia ako jedna dvadsatina sekundy (pri taktovaní na cielených 100 MHz).

Krok 7: Pridanie knižnice IP do Vivado

Pridanie knižnice IP do Vivado
Pridanie knižnice IP do Vivado
Pridanie knižnice IP do Vivado
Pridanie knižnice IP do Vivado
Pridanie knižnice IP do Vivado
Pridanie knižnice IP do Vivado
Pridanie knižnice IP do Vivado
Pridanie knižnice IP do Vivado

Ak chcete použiť váš syntetizovaný blok IP, budete ho musieť pridať do Vivado.

Vo Vivado pridajte do svojho projektu úložisko IP tak, že prejdete do katalógu IP a pravým tlačidlom myši vyberiete „Pridať úložisko …“

Prejdite do adresára projektu Vivado HLS a vyberte adresár svojho riešenia.

Malo by to nahlásiť IP, ktorú zistilo.

Krok 8: Vykonanie inovácie

Vykonáva sa inovácia
Vykonáva sa inovácia
Vykonáva sa inovácia
Vykonáva sa inovácia
Vykonáva sa inovácia
Vykonáva sa inovácia

Niekedy je potrebné vykonať zmeny vo vašom bloku HLS po zahrnutí do dizajnu Vivado.

Ak to chcete urobiť, môžete vykonať zmeny a znova syntetizovať a exportovať IP s vyšším číslom verzie (pozrite si podrobnosti v predchádzajúcom kroku o zmenách hlavného/vedľajšieho čísla verzie).

Po zmene exportu novej verzie obnovte svoje úložiská IP vo Vivado. To je možné vykonať buď vtedy, keď si Vivado všimne, že sa v úložisku zmenila adresa IP, alebo sa aktivuje manuálne. (Upozorňujeme, že ak obnovíte svoje úložiská IP po spustení, ale než sa export dokončí v HLS, adresa IP tam dočasne nebude, počkajte, kým sa dokončí a obnoví.)

V tomto mieste by sa malo objaviť okno s informáciou, že na disku IP bola zmenená adresa IP, a poskytne vám možnosť aktualizovať ho pomocou tlačidla „Inovácia vybratá“. Ak išlo o menšiu zmenu verzie a nezmenilo sa žiadne z rozhraní, potom stlačením tohto tlačidla sa automaticky nahradí stará IP novou, inak môže byť potrebné viac práce.

Krok 9: Ďalšie podrobnosti a informácie

Nasledujúce kroky poskytujú viac informácií o tom, ako syntéza HLS funguje a čo s ňou môžete robiť.

Príklad projektu používajúceho syntetizovaný blok IP HLS nájdete v tomto návode.

Krok 10: Výstup a vstup

Výstup a vstup
Výstup a vstup
Výstup a vstup
Výstup a vstup

Výstupy a vstupy do konečného bloku IP sú určené z analýzy, ktorú syntetizátor robí z toku údajov do najvyššej funkcie a von z nej.

Podobne ako vo VHDL alebo verilogu, HLS vám umožňuje špecifikovať podrobnosti o spojeniach medzi IP. Nasledujúce riadky sú toho príkladom:

neplatný obrázok_filter (AXI_STREAM & video_in, AXI_STREAM & video_out, int & x, int & y) {

#pragma HLS INTERFACE port osi = video_in balík = INPUT_STREAM #pragma HLS INTERFACE port osi = video_out bundle = OUTPUT_STREAM #pragma HLS INTERFACE s_axilite port = x bundle = CONTROL_BUS offset = 0x14 #pragma HLS INTERFACE s_axilite port = y

Môžete vidieť, ako sú tieto smernice ovplyvnené porty vystavené na bloku IP.

Krok 11: Rozhranie registra AXI

Rozhranie registra AXI
Rozhranie registra AXI

Aby ste dostali vstup/výstup do/z vášho IP bloku do PS, je to dobrý spôsob, ako to urobiť, prostredníctvom rozhrania AXI.

Môžete to zadať vo svojom kóde HLS vrátane offsetov, ktoré sa majú použiť na prístup k hodnote neskôr:

neplatný obrázok_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; }

Po správnom pripojení vo Vivado môžete k hodnotám získať prístup pomocou tohto kódu v súprave 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);

Výsledkom bude, že budete mať 42 v x a 0x mŕtvu hovädziu v y

Krok 12: Dataflow Pragma

Dataflow Pragma
Dataflow Pragma
Dataflow Pragma
Dataflow Pragma
Dataflow Pragma
Dataflow Pragma

Vo vnútri #pragma DATAFLOW sa spôsob implementácie kódu mení z normálneho C ++. Kód je prepojený tak, aby boli všetky pokyny neustále spustené v rôznych častiach údajov (Predstavte si to ako montážnu linku v továrni, každá stanica pracuje nepretržite, robí jednu funkciu a odovzdáva ju ďalšej stanici)

z obrázku vidíte, že každá zo smerníc

Napriek tomu, že sa to zdá, že sú to normálne premenné, objekty img sú v skutočnosti implementované ako malé medzipamäte medzi príkazmi. Použitie obrázka ako vstupu do funkcie ho „spotrebuje“a prestane byť použiteľné. (Preto sú potrebné duplicitné príkazy)

Odporúča: