Turinys:
- 1 žingsnis: Kas yra „Vivado HLS“?
- 2 žingsnis: HLS vaizdo įrašų biblioteka
- 3 žingsnis: sintezė
- 4 veiksmas: versijos ir kita eksportui skirta informacija
- 5 veiksmas: eksportavimas į „Vivado“IP biblioteką
- 6 žingsnis: sintezė ir eksporto analizė
- 7 veiksmas: pridėkite IP biblioteką „Vivado“
- 8 žingsnis: Atnaujinkite
- 9 veiksmas: papildoma informacija ir informacija
- 10 veiksmas: išvestis ir įvestis
- 11 veiksmas: AXI registro sąsaja
- 12 veiksmas: duomenų srauto pragma
Video: Vivado HLS vaizdo IP blokų sintezė: 12 žingsnių
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:49
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
Š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ė
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 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ą
Sprendimas => Eksportuoti RTL
Jei ankstesniame veiksme nenustatėte išsamios IP bibliotekos informacijos, tai galite padaryti dabar.
6 žingsnis: 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“
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
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
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
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
#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:
Garso lenkimo sintezė: 14 žingsnių (su nuotraukomis)
Garso lenkimo sintezė: Aš jau anksčiau sukūriau keletą garso lenkimo mašinų (peržiūrėkite žemiau esančias nuorodas į „ibles“). Šį kartą pridėjau reverbą ir stiprintuvo modulį, kuris tikrai suteikia jums visiškai naują garsų spektrą. Be to, diktofono modulis, naudojamas
Cigarų dėžės sintezė: 14 žingsnių (su nuotraukomis)
Cigar Box Synth: Štai mano naujausias sintezatorius, pagamintas iš 555 ir 556 laikmačio kartu su 4017 ic. Prieš kelis mėnesius tokia konstrukcija būtų buvusi mano įgūdžių lygio išeitis. Tačiau per pastaruosius kelis mėnesius aš sukūriau keletą paprastų sintezatorių, kad pagerėčiau
Retro kalbos sintezė. Dalis: 12 daiktų internetas, namų automatika: 12 žingsnių (su paveikslėliais)
Retro kalbos sintezė. Dalis: 12 daiktų internetas, namų automatika: Šis straipsnis yra 12 -asis iš namų automatikos instrukcijų serijos, dokumentuojančių, kaip sukurti ir integruoti „IoT Retro Speech Synthesis Device“į esamą namų automatikos sistemą, įskaitant visas būtinas programinės įrangos funkcijas, leidžiančias
Paprastas vaizdo kameros vaizdo ieškiklio įsilaužimas: 11 žingsnių (su nuotraukomis)
Paprastas vaizdo kameros vaizdo ieškiklio įsilaužimas: šiandien aš jus išmokysiu nulaužti vaizdo kameros vaizdo ieškiklį! (Čia aš turiu savo vaizdo ieškiklį šalia Raspberry Pi) Tai yra pagrindinis I/O bandymų ekranas. Jį galite naudoti viskam, kas skleidžia sudėtinį vaizdo signalą, pvz., „Raspberry Pi“(Nuostabiam
Analoginio garso sintezė jūsų kompiuteryje: 10 žingsnių (su paveikslėliais)
Analoginio garso sintezė jūsų kompiuteryje: kaip tų senų analoginių sintezatorių garsas? Norite žaisti su vienu savo laiku, savo vietoje, tiek laiko, kiek norite, NEMOKAMAI? Čia išsipildo jūsų drąsiausios „Moog“svajonės. Galite tapti elektroninių įrašų atlikėju ar