Sisällysluettelo:

Vivado HLS Video IP Block Synteesi: 12 vaihetta
Vivado HLS Video IP Block Synteesi: 12 vaihetta

Video: Vivado HLS Video IP Block Synteesi: 12 vaihetta

Video: Vivado HLS Video IP Block Synteesi: 12 vaihetta
Video: Introduction to Vitis High-Level Synthesis (HLS) 2024, Marraskuu
Anonim
Vivado HLS Video IP Block Synthesis
Vivado HLS Video IP Block Synthesis

Oletko koskaan halunnut käsitellä videota reaaliajassa lisäämättä paljon latenssia tai sulautetussa järjestelmässä? FPGA: ita (Field Programmable Gate Arrays) käytetään joskus tähän; videonkäsittelyalgoritmien kirjoittaminen laitteistomäärityskielillä, kuten VHDL tai Verilog, on kuitenkin parhaimmillaan turhauttavaa. Anna Vivado HLS, Xilinx -työkalu, jonka avulla voit ohjelmoida C ++ -ympäristössä ja luoda siitä laitteistomääritysten kielikoodin.

Tarvittavat ohjelmistot:

  • Vivado HLS
  • Vivado
  • (Jos käytät AXI -rekistereitä) Vivado SDK

(Valinnainen) Lataa Xilinxin tekemät esimerkit täältä:

Esimerkkejä Xilinx HLS -videoista

Vaihe 1: Mikä on Vivado HLS?

Vivado HLS on työkalu, jolla c ++: n kaltainen koodi muutetaan laitteistorakenteiksi, jotka voidaan toteuttaa FPGA: lla. käytettäväksi Vivadon kanssa.

Lataa liitetiedostot ja aseta ne lähelle projektin luomista. (nimeä ne takaisin "top.cpp" ja "top.h", jos niillä on satunnaistettu nimi)

Vaihe 2: HLS -videokirjasto

HLS -videokirjasto
HLS -videokirjasto
HLS -videokirjasto
HLS -videokirjasto

HLS -videokirjastossa on tässä asiakirjassa viitteellisiä asiakirjoja: XAPP1167 Toinen hyvä resurssi on Xilinx Wiki -sivu.

Käynnistä Vivado HLS.

Luo uusi projekti.

Ota edellisessä vaiheessa lataamasi tiedostot ja lisää ne lähdetiedostoiksi. (Huomaa: tiedostoja ei kopioida projektiin, vaan ne pysyvät siellä missä ne ovat)

Valitse sitten ylätoiminto Selaa -painikkeella.

Valitse seuraavalla sivulla käyttämäsi Xilinx -osa.

Vaihe 3: Syntetisointi

Syntetisointi
Syntetisointi

Ratkaisu => Suorita C -synteesi => Aktiivinen ratkaisu

~ 227,218 sekunnin kuluttua se on tehtävä. (Huomaa: todellinen synteesiaikasi vaihtelee monien tekijöiden perusteella)

Vaihe 4: Versiointi ja muut tiedot vientiä varten

Versiointi ja muut tiedot vientiä varten
Versiointi ja muut tiedot vientiä varten

Versionumerot ovat vuorovaikutuksessa Vivadon kanssa, jolloin voit päivittää mallin IP -osoitteen. Jos kyseessä on vähäinen version muutos, se voidaan tehdä, kun suuret versiomuutokset edellyttävät uuden lohkon manuaalista lisäämistä ja vanhan poistamista. Jos käyttöliittymänne eivät ole muuttuneet ja versiopäivitys on vähäinen, päivitys voidaan tehdään automaattisesti automaattisesti painamalla IP -päivitys -painiketta. Voit ajaa "report_ip_status" Vivado tcl -konsolissa nähdäksesi IP -osoitteesi tilan.

Aseta versionumerot ja muut tiedot kohdasta Ratkaisu => Ratkaisuasetukset…

Vaihtoehtoisesti nämä asetukset voidaan määrittää viennin aikana.

Vaihe 5: Vienti Vivado IP -kirjastoon

Vienti Vivadon IP -kirjastoon
Vienti Vivadon IP -kirjastoon
Vienti Vivadon IP -kirjastoon
Vienti Vivadon IP -kirjastoon

Ratkaisu => Vie RTL

Jos et määrittänyt IP -kirjaston tietoja edellisessä vaiheessa, voit tehdä sen nyt.

Vaihe 6: Synteesi ja vienti -analyysi

Synteesi ja vienti -analyysi
Synteesi ja vienti -analyysi
Synteesi ja vienti -analyysi
Synteesi ja vienti -analyysi
Synteesi ja vienti -analyysi
Synteesi ja vienti -analyysi

Tällä näytöllä näemme vientimoduulimme tilastot, jotka osoittavat, että se täyttää kellon ajan 10ns (100MHz) ja kuinka paljon kustakin resurssista se käyttää.

Tämän, yhteenvetoraporttimme ja datavirta -analyysimme yhdistelmän avulla voimme nähdä, että se kestää 317338 kellojaksoa * 10ns kellojakso * 14 putkilinjan vaihetta = 0,04442732 sekuntia. Tämä tarkoittaa sitä, että kuvankäsittelymme lisäämä kokonaisviive on alle kahdeskymmenesosa sekunnista (kun kellotaajuus on 100 MHz).

Vaihe 7: IP -kirjaston lisääminen Vivadoon

IP -kirjaston lisääminen Vivadoon
IP -kirjaston lisääminen Vivadoon
IP -kirjaston lisääminen Vivadoon
IP -kirjaston lisääminen Vivadoon
IP -kirjaston lisääminen Vivadoon
IP -kirjaston lisääminen Vivadoon
IP -kirjaston lisääminen Vivadoon
IP -kirjaston lisääminen Vivadoon

Jotta voit käyttää syntetisoitua IP -lohkoa, sinun on lisättävä se Vivadoon.

Lisää Vivadossa projektisi IP-arkisto siirtymällä IP-luetteloon ja napsauttamalla hiiren kakkospainikkeella "Lisää arkisto …"

Siirry Vivado HLS -projektihakemistoosi ja valitse ratkaisuhakemisto.

Sen pitäisi ilmoittaa löytämänsä IP.

Vaihe 8: Päivityksen tekeminen

Päivityksen tekeminen
Päivityksen tekeminen
Päivityksen tekeminen
Päivityksen tekeminen
Päivityksen tekeminen
Päivityksen tekeminen

Joskus sinun on tehtävä muutoksia HLS -lohkoosi sen jälkeen, kun olet sisällyttänyt sen Vivado -suunnitteluun.

Voit tehdä tämän tekemällä muutokset ja uudelleensyntetisoimalla ja viemällä IP -osoitteen korkeammalla versionumerolla (katso yksityiskohdat edellisessä vaiheessa tärkeiden/vähäisten versioiden muutoksista).

Kun olet muuttanut uuden version vientiä, päivitä IP -tietovarastosi Vivadossa. Tämä voidaan tehdä joko silloin, kun Vivado huomaa, että IP -osoite on muuttunut arkistossa, tai aktivoitava manuaalisesti. (Huomaa, jos päivität IP -tietovarastosi aloittamisen jälkeen, mutta ennen kuin vienti on valmis HLS: ssä, IP -osoite ei ole tilapäisesti siellä, odota sen päättymistä ja päivitä uudelleen.)

Tässä vaiheessa pitäisi ilmestyä ikkuna, jossa on tiedot siitä, että IP -levyä on muutettu levyllä, ja antaa sinulle mahdollisuuden päivittää se "Päivitä valitut" -painikkeella. Jos muutos oli vähäinen version muutos eikä mikään käyttöliittymä muuttunut, sen jälkeen tämän painikkeen painaminen korvaa automaattisesti vanhan IP -osoitteen uudella, muuten työ voi vaatia enemmän työtä.

Vaihe 9: Lisätietoja ja tietoja

Seuraavat vaiheet tarjoavat lisätietoja siitä, miten HLS -synteesi toimii ja mitä voit tehdä sen kanssa.

Esimerkki projektista, jossa käytetään HLS -syntetisoitua IP -lohkoa, on tässä ohjeessa.

Vaihe 10: Lähtö ja tulo

Lähtö ja tulo
Lähtö ja tulo
Lähtö ja tulo
Lähtö ja tulo

Lopullisen IP -lohkon lähdöt ja tulot määritetään analyysistä, jonka syntetisaattori tekee datavirrasta ylä- ja ulos -toiminnosta.

Kuten VHDL: ssä tai verilogissa, HLS: n avulla voit määrittää IP -yhteyksien tiedot. Nämä rivit ovat esimerkkejä tästä:

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

#pragma HLS INTERFACE -akselin portti = video_in nippu = INPUT_STREAM #pragma HLS INTERFACE -akselin portti = video_out -nippu = OUTPUT_STREAM #pragma HLS INTERFACE s_axilite port = x nippu = CONTROL_BUS offset = 0x14 #pragma h_xbite

Näet, kuinka nämä direktiivit vaikuttavat IP -lohkossa näytettyihin portteihin.

Vaihe 11: AXI -rekisterin liitäntä

AXI -rekisterin rajapinta
AXI -rekisterin rajapinta

Saadaksesi tulon/lähdön IP -lohkostasi PS: lle/siitä, hyvä tapa tehdä tämä on AXI -liitännän kautta.

Voit määrittää tämän HLS -koodissasi, mukaan lukien siirtymät, joita käytetään arvon käyttämiseen myöhemmin seuraavasti:

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

#pragma HLS INTERFACE s_axilite port = x nippu = CONTROL_BUS offset = 0x14

#pragma HLS INTERFACE s_axilite port = y nippu = CONTROL_BUS offset = 0x1C #pragma HLS dataflow

x = 42;

y = 0xDEADBEEF; }

Kun yhteys on muodostettu oikein Vivadossa, voit käyttää arvoja käyttämällä tätä koodia Vivado SDK: ssa:

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

Tämä johtaa siihen, että x: ssä on 42 ja y: ssä 0xdeadbeef

Vaihe 12: Dataflow Pragma

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

#Pragma DATAFLOW: n sisällä tapa, jolla koodi toteutetaan, muuttuu normaalista C ++: sta. Koodi on yhdistetty niin, että kaikki ohjeet ovat aina käynnissä datan eri osissa (ajattele sitä kuin tehtaan kokoonpanolinjaa, jokainen asema tekee jatkuvasti yhtä toimintoa ja välittää sen seuraavalle asemalle)

kuvasta näet, että jokainen direktiivi

Huolimatta siitä, että ne näyttävät olevan normaaleja muuttujia, img -objektit toteutetaan itse asiassa pieninä puskureina komentojen välillä. Kuvan käyttäminen toiminnon tulona "kuluttaa" sen eikä tee sitä enää käyttökelpoiseksi. (Siksi kaksoiskappaleiden tarve)

Suositeltava: