Turinys:

Vivado HLS vaizdo IP blokų sintezė: 12 žingsnių
Vivado HLS vaizdo IP blokų sintezė: 12 žingsnių

Video: Vivado HLS vaizdo IP blokų sintezė: 12 žingsnių

Video: Vivado HLS vaizdo IP blokų sintezė: 12 žingsnių
Video: Vivado HLS: Introduction 2024, Lapkritis
Anonim
Vivado HLS vaizdo IP blokų sintezė
Vivado HLS vaizdo IP blokų sintezė

Ar kada nors norėjote apdoroti vaizdo įrašus realiuoju laiku, nepridedant daug delsos ar įterptinėje sistemoje? Tam kartais naudojami FPGA (lauko programuojami vartų masyvai); tačiau vaizdo įrašų apdorojimo algoritmų rašymas aparatinės įrangos specifikacijų kalbomis, tokiomis kaip VHDL ar „Verilog“, geriausiu atveju yra varginantis. Įveskite „Vivado HLS“, „Xilinx“įrankį, kuris leidžia programuoti C ++ aplinkoje ir iš jos generuoti aparatūros specifikacijos kalbos kodą.

Reikalinga programinė įranga:

  • Vivado HLS
  • Vivado
  • (Jei naudojate AXI registrus) Vivado SDK

(Neprivaloma) Atsisiųskite „Xilinx“pateiktus pavyzdžius čia:

„Xilinx HLS“vaizdo įrašų pavyzdžiai

1 žingsnis: Kas yra „Vivado HLS“?

„Vivado HLS“yra įrankis, naudojamas paversti c ++ panašų kodą į aparatūros struktūras, kurias galima įdiegti naudojant FPGA. Jame yra IDE, skirtas šiam kūrimui. Baigę kurti HLS kodą, galite eksportuoti sukurtą IP formatu skirtas naudoti su Vivado.

Atsisiųskite pridėtus failus ir padėkite juos šalia to, kur kuriate savo projektą. (jei jie turi atsitiktinių imčių pavadinimus, pervardykite juos į „top.cpp“ir „top.h“)

2 žingsnis: HLS vaizdo įrašų biblioteka

HLS vaizdo įrašų biblioteka
HLS vaizdo įrašų biblioteka
HLS vaizdo įrašų biblioteka
HLS vaizdo įrašų biblioteka

Šiame dokumente HLS vaizdo įrašų biblioteka turi dokumentaciją su nuorodų dizainu: XAPP1167 Kitas geras šaltinis yra „Xilinx Wiki“puslapis apie tai.

Paleiskite „Vivado HLS“.

Sukurkite naują projektą.

Paimkite ankstesniame žingsnyje atsisiųstus failus ir pridėkite juos kaip šaltinio failus. (Pastaba: failai nekopijuojami į projektą, bet lieka ten, kur yra)

Tada naudokite naršymo mygtuką, kad pasirinktumėte viršutinę funkciją.

Kitame puslapyje pasirinkite naudojamą „Xilinx“dalį.

3 žingsnis: sintezė

Sintezuoja
Sintezuoja

Sprendimas => Vykdyti C sintezę => Aktyvus sprendimas

Po ~ 227,218 sekundžių tai turėtų būti padaryta. (Pastaba: faktinis sintezės laikas skirsis dėl daugelio veiksnių)

4 veiksmas: versijos ir kita eksportui skirta informacija

Versijos ir kita informacija eksportui
Versijos ir kita informacija eksportui

Versijos numeriai sąveikauja su „Vivado“, todėl galėsite atnaujinti dizaino IP. Jei tai yra nedidelis versijos pakeitimas, tai galima padaryti vietoje, o norint atlikti pagrindinius versijos pakeitimus, rankiniu būdu turite pridėti naują bloką ir pašalinti seną. Jei jūsų sąsajos nepasikeitė ir versijos atnaujinimas yra nedidelis, atnaujinimas gali būti Tai atliekama visiškai automatiškai, paspaudus atnaujinimo IP mygtuką. Galite paleisti „report_ip_status“„Vivado tcl“konsolėje, kad pamatytumėte savo IP būseną.

Nustatykite versijos numerius ir kitą informaciją skiltyje Sprendimas => Sprendimo nustatymai …

Arba šiuos nustatymus galima nustatyti eksportuojant.

5 veiksmas: eksportavimas į „Vivado“IP biblioteką

Eksportuojama į „Vivado“IP biblioteką
Eksportuojama į „Vivado“IP biblioteką
Eksportuojama į „Vivado“IP biblioteką
Eksportuojama į „Vivado“IP biblioteką

Sprendimas => Eksportuoti RTL

Jei ankstesniame veiksme nenustatėte išsamios IP bibliotekos informacijos, tai galite padaryti dabar.

6 žingsnis: sintezė ir eksporto analizė

Sintezė ir eksporto analizė
Sintezė ir eksporto analizė
Sintezė ir eksporto analizė
Sintezė ir eksporto analizė
Sintezė ir eksporto analizė
Sintezė ir eksporto analizė

Šiame ekrane matome mūsų eksportuoto modulio statistiką, rodančią, kad jis atitinka mūsų 10 n (100 MHz) laikrodžio laikotarpį ir kiek jis naudoja kiekvieną išteklių.

Suderinus tai, mūsų suvestinę ataskaitą ir duomenų srauto analizę, matome, kad tai užtrunka 317338 laikrodžio ciklus * 10ns laikrodžio laikotarpį * 14 dujotiekio etapų = 0,04442732 sekundes. Tai reiškia, kad bendras mūsų vaizdo apdorojimo delsas yra mažesnis nei viena dvidešimtoji sekundės dalis (kai laikrodis pasiekia 100 MHz dažnį).

7 veiksmas: pridėkite IP biblioteką „Vivado“

IP bibliotekos pridėjimas „Vivado“
IP bibliotekos pridėjimas „Vivado“
IP bibliotekos pridėjimas „Vivado“
IP bibliotekos pridėjimas „Vivado“
IP bibliotekos pridėjimas „Vivado“
IP bibliotekos pridėjimas „Vivado“
IP bibliotekos pridėjimas „Vivado“
IP bibliotekos pridėjimas „Vivado“

Norėdami naudoti sintezuotą IP bloką, turėsite jį pridėti prie „Vivado“.

„Vivado“pridėkite IP saugyklą prie savo projekto, eidami į IP katalogą ir dešiniuoju pelės mygtuku spustelėdami „Pridėti saugyklą …“

Eikite į savo „Vivado HLS“projektų katalogą ir pasirinkite sprendimų katalogą.

Ji turėtų pranešti apie rastą IP.

8 žingsnis: Atnaujinkite

Atliekamas atnaujinimas
Atliekamas atnaujinimas
Atliekamas atnaujinimas
Atliekamas atnaujinimas
Atliekamas atnaujinimas
Atliekamas atnaujinimas

Kartais jums reikia pakeisti savo HLS bloką, įtraukus jį į „Vivado“dizainą.

Norėdami tai padaryti, galite atlikti pakeitimus ir iš naujo sintezuoti bei eksportuoti IP su didesniu versijos numeriu (žr. Ankstesnio žingsnio informaciją apie pagrindinius/nedidelius versijos numerio pakeitimus).

Pakeitę naujos versijos eksportavimą, atnaujinkite savo IP saugyklas „Vivado“. Tai galima padaryti, kai „Vivado“pastebi, kad saugykloje pasikeitė IP, arba suaktyvinti rankiniu būdu. (Atminkite, kad jei atnaujinsite savo IP saugyklas pradėję, bet kol eksportas nebus baigtas HLS, IP laikinai nebus, palaukite, kol jis bus baigtas, ir atnaujinkite dar kartą.)

Šiuo metu turėtų pasirodyti langas su informacija, kad diske buvo pakeistas IP, ir suteikiama galimybė jį atnaujinti mygtuku „Atnaujinti pasirinktą“. Jei pakeitimas buvo nedidelis versijos pakeitimas ir nė viena sąsaja nepasikeitė, tada paspaudus šį mygtuką, senas IP bus automatiškai pakeistas nauju, kitaip gali tekti dirbti daugiau.

9 veiksmas: papildoma informacija ir informacija

Šie veiksmai suteikia daugiau informacijos apie tai, kaip veikia HLS sintezė ir ką su ja galite padaryti.

Projekto, kuriame naudojamas HLS sintezuotas IP blokas, pavyzdys pateiktas šioje instrukcijoje.

10 veiksmas: išvestis ir įvestis

Išėjimas ir įvestis
Išėjimas ir įvestis
Išėjimas ir įvestis
Išėjimas ir įvestis

Galutinio IP bloko išėjimai ir įėjimai nustatomi remiantis sintezatoriaus atlikta duomenų srauto į viršutinę funkciją ir iš jos analize.

Panašiai kaip VHDL ar verilog, HLS leidžia nurodyti išsamią informaciją apie ryšius tarp IP. Šios eilutės yra to pavyzdžiai:

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

#pragma HLS INTERFACE ašies prievadas = video_in paketas = INPUT_STREAM #pragma HLS INTERFACE ašies prievadas = video_out paketas = OUTPUT_STREAM #pragma HLS INTERFACE s_axilite port = x paketas = CONTROL_BUS ofset = 0x14 #pragma y_xbite

Galite pamatyti, kaip šios direktyvos daro įtaką IP bloke rodomiems prievadams.

11 veiksmas: AXI registro sąsaja

AXI registro sąsaja
AXI registro sąsaja

Norint įvesti/išvesti į/iš savo IP bloko į PS, geras būdas tai padaryti yra per AXI sąsają.

Tai galite nurodyti savo HLS kode, įskaitant poslinkius, kurie vėliau bus naudojami norint pasiekti vertę taip:

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

#pragma HLS INTERFACE s_axilite prievadas = x paketas = CONTROL_BUS poslinkis = 0x14

#pragma HLS INTERFACE s_axilite port = y paketas = CONTROL_BUS poslinkis = 0x1C #pragma HLS duomenų srautas

x = 42;

y = 0xDEADBEEF; }

Tinkamai prijungę „Vivado“, galite pasiekti vertes naudodami šį „Vivado SDK“kodą:

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

Galų gale turėsite 42 x ir 0xdeadbeef y

12 veiksmas: duomenų srauto pragma

Duomenų srauto pragma
Duomenų srauto pragma
Duomenų srauto pragma
Duomenų srauto pragma
Duomenų srauto pragma
Duomenų srauto pragma

#Pragma DATAFLOW viduje kodo įgyvendinimo būdas keičiasi nuo įprasto C ++. Kodas suprojektuotas taip, kad visos instrukcijos visada būtų vykdomos skirtingose duomenų dalyse (pagalvokite apie tai kaip apie surinkimo liniją gamykloje, kiekviena stotis nuolat dirba atlikdama vieną funkciją ir perduoda ją kitai stotiui)

iš paveikslėlio matosi, kad kiekviena iš direktyvų

Nepaisant to, kad img objektai yra normalūs kintamieji, jie iš tikrųjų yra įgyvendinami kaip maži buferiai tarp komandų. Naudojant vaizdą kaip funkcijos įvestį, jis „sunaudojamas“ir tampa nebegalimas. (Taigi reikia pasikartojančių komandų)

Rekomenduojamas: