Orodha ya maudhui:

Vivado HLS Video IP Usanganishaji: Hatua 12
Vivado HLS Video IP Usanganishaji: Hatua 12

Video: Vivado HLS Video IP Usanganishaji: Hatua 12

Video: Vivado HLS Video IP Usanganishaji: Hatua 12
Video: Generating custom AXI4-Stream IP core using Xilinx Vivado 2024, Novemba
Anonim
Vivado HLS Video IP Usanisi
Vivado HLS Video IP Usanisi

Je! Umewahi kutaka kusindika wakati halisi kwenye video bila kuongeza ucheleweshaji mwingi au kwenye mfumo uliopachikwa? FPGAs (Mpangilio wa Lango linalopangwa kwa Shamba) wakati mwingine hutumiwa kufanya hivi; Walakini, kuandika algorithms za usindikaji wa video katika lugha za vipimo vya vifaa kama VHDL au Verilog inakatisha tamaa kabisa. Ingiza Vivado HLS, zana ya Xilinx inayokuruhusu kupanga programu katika mazingira ya C ++ na utengeneze nambari ya lugha ya uainishaji wa vifaa kutoka kwake.

Vipuli vinavyohitajika:

  • Vivado HLS
  • Vivado
  • (Ikiwa unatumia sajili za AXI) Vivado SDK

(Hiari) Pakua Xilinx ilifanya mifano hapa:

Mifano ya video ya Xilinx HLS

Hatua ya 1: Vivado HLS ni nini?

Vivado HLS ni zana inayotumika kugeuza c ++ kama nambari kuwa muundo wa vifaa ambavyo vinaweza kutekelezwa kwenye FPGA, na ni pamoja na IDE ya kufanya maendeleo haya. kwa matumizi na Vivado.

Pakua faili zilizoambatishwa na uziweke karibu na mahali utakapokuwa unaunda mradi wako. (wape jina tena kwa "top.cpp" na "top.h" ikiwa wana jina lililobadilishwa)

Hatua ya 2: Maktaba ya Video ya HLS

Maktaba ya Video ya HLS
Maktaba ya Video ya HLS
Maktaba ya Video ya HLS
Maktaba ya Video ya HLS

Maktaba ya Video ya HLS ina nyaraka na miundo ya kumbukumbu katika karatasi hii: XAPP1167Rasilimali nyingine nzuri ni ukurasa wa Xilinx Wiki kuhusu hilo.

Anza Vivado HLS.

Unda mradi mpya.

Chukua faili ambazo umepakua katika hatua ya awali na uziongeze kama faili za chanzo. (Kumbuka: faili hazinakiliwi kwenye mradi, lakini badala yake baki hapo zilipo)

Kisha tumia kitufe cha Vinjari kuchagua chaguo za juu.

Kwenye ukurasa unaofuata, chagua sehemu ya Xilinx unayotumia.

Hatua ya 3: Kuunganisha

Inatengeneza
Inatengeneza

Suluhisho => Run C synthesis => Solution inayotumika

Baada ya sekunde ~ 227.218, inapaswa kufanywa. (Kumbuka: wakati wako halisi wa usanisi utatofautiana kulingana na sababu nyingi)

Hatua ya 4: Toleo na Maelezo mengine ya Usafirishaji

Toleo na Maelezo mengine ya Usafirishaji
Toleo na Maelezo mengine ya Usafirishaji

Nambari za toleo huingiliana na Vivado ili kukufanya uweze kusasisha IP katika muundo. Ikiwa ni mabadiliko madogo ya toleo inaweza kufanywa wakati mabadiliko makubwa ya toleo yanahitaji kuongeza mikono yako kwenye kizuizi kipya na uondoe ya zamani. Ikiwa miunganisho yako haijabadilika na sasisho la toleo ni dogo sasisho linaweza kuwa imefanywa kiatomati kabisa kwa kubonyeza kitufe cha kusasisha IP. Unaweza kukimbia "report_ip_status" katika kontena ya Vivado tcl ili kuona hali ya IP yako.

Weka nambari za toleo na maelezo mengine katika Solution => Mipangilio ya Ufumbuzi …

Vinginevyo, mipangilio hii inaweza kuwekwa wakati wa usafirishaji.

Hatua ya 5: Kuhamisha kwa Maktaba ya IP ya Vivado

Kusafirisha kwa Maktaba ya IP ya Vivado
Kusafirisha kwa Maktaba ya IP ya Vivado
Kusafirisha kwa Maktaba ya IP ya Vivado
Kusafirisha kwa Maktaba ya IP ya Vivado

Suluhisho => Hamisha RTL

Ikiwa haukuweka maelezo ya maktaba ya IP katika hatua ya awali, unaweza kufanya hivyo sasa.

Hatua ya 6: Uchanganuzi wa Usanisi na Usafirishaji

Uchanganuzi wa awali na Usafirishaji
Uchanganuzi wa awali na Usafirishaji
Uchanganuzi wa awali na Usafirishaji
Uchanganuzi wa awali na Usafirishaji
Uchanganuzi wa awali na Usafirishaji
Uchanganuzi wa awali na Usafirishaji

Kwenye skrini hii tunaweza kuona takwimu kuhusu moduli yetu iliyosafirishwa, ikionyesha kwamba inakidhi kipindi chetu cha saa 10ns (100MHz) na ni kiasi gani cha rasilimali inayotumia.

Pamoja na mchanganyiko wa hii, Ripoti yetu ya Mchanganyiko, na uchanganuzi wetu wa Takwimu, tunaweza kuona kwamba inachukua mizunguko ya saa 317338 * Kipindi cha saa 10ns * hatua 14 za bomba = sekunde 0.04442732. Inamaanisha kuwa jumla ya latency iliyoongezwa na usindikaji wetu wa picha ni chini ya ishirini ya sekunde (wakati imefungwa kwa 100MHz iliyolengwa).

Hatua ya 7: Kuongeza Maktaba ya IP huko Vivado

Kuongeza Maktaba ya IP huko Vivado
Kuongeza Maktaba ya IP huko Vivado
Kuongeza Maktaba ya IP huko Vivado
Kuongeza Maktaba ya IP huko Vivado
Kuongeza Maktaba ya IP huko Vivado
Kuongeza Maktaba ya IP huko Vivado
Kuongeza Maktaba ya IP huko Vivado
Kuongeza Maktaba ya IP huko Vivado

Kutumia kizuizi chako cha IP kilichojumuishwa utahitaji kuiongeza kwa Vivado.

Katika Vivado ongeza hazina ya IP kwenye mradi wako kwa kwenda kwenye orodha ya IP na bonyeza-kulia ukichagua "Ongeza Hifadhi …"

Nenda kwenye saraka yako ya mradi wa Vivado HLS na uchague saraka yako ya suluhisho.

Inapaswa kuripoti IP ambayo imepata.

Hatua ya 8: Kufanya Kuboresha

Kufanya Kuboresha
Kufanya Kuboresha
Kufanya Kuboresha
Kufanya Kuboresha
Kufanya Kuboresha
Kufanya Kuboresha

Wakati mwingine unahitaji kufanya mabadiliko kwenye kizuizi chako cha HLS baada ya kuijumuisha katika muundo wa Vivado.

Ili kufanya hivyo, unaweza kufanya mabadiliko na kusanikisha tena na kusafirisha IP na nambari ya toleo la juu (angalia maelezo katika hatua ya mapema juu ya mabadiliko makubwa / madogo ya nambari ya toleo).

Baada ya kubadilisha kusafirisha toleo jipya, furahisha hazina zako za IP huko Vivado. Hii inaweza kufanywa wakati Vivado inagundua IP imebadilika kwenye hazina, au imeamilishwa kwa mikono. (Kumbuka, ukiburudisha hazina zako za IP baada ya kuanza, lakini kabla ya usafirishaji kukamilika katika HLS, IP haitakuwapo kwa muda, subiri imalize na iburudishe tena.)

Kwa wakati huu dirisha inapaswa kuonekana na habari kwamba IP imebadilishwa kwenye diski na inakupa fursa ya kuisasisha na kitufe cha "Sasisha Iliyochaguliwa". Ikiwa mabadiliko yalikuwa mabadiliko madogo ya toleo na hakuna kiolesura kilichobadilishwa, kisha kubonyeza kitufe hicho kitabadilisha kiotomatiki IP ya zamani na mpya, vinginevyo kazi zaidi inaweza kuhitajika.

Hatua ya 9: Maelezo ya ziada na Maelezo

Hatua zifuatazo hutoa habari zaidi juu ya jinsi usanifu wa HLS unafanya kazi na nini unaweza kufanya nayo.

Kwa mfano wa mradi unaotumia kizuizi cha IP kilichotengenezwa na HLS, angalia hii inaweza kufundishwa.

Hatua ya 10: Pato na Ingizo

Pato na Pembejeo
Pato na Pembejeo
Pato na Pembejeo
Pato na Pembejeo

Matokeo na pembejeo kwenye kizuizi cha mwisho cha IP imedhamiriwa kutoka kwa uchambuzi ambayo synthesizer hufanya ya mtiririko wa data ndani na nje ya kazi ya juu.

Sawa na VHDL au verilog, HLS hukuruhusu kutaja maelezo juu ya unganisho kati ya IP. Mistari hii ni mifano ya hii:

picha batili ya picha (AXI_STREAM & video_in, AXI_STREAM & video_out, int & x, int & y) {

#pragma HLS INTERFACE axis port = video_in bundle = INPUT_STREAM #pragma HLS INTERFACE axis port = video_out kifungu = OUTPUT_STREAM #pragma HLS INTERFACE s_axilite port = x kifungu = CONTROL_BUS offset = 0x14 # pragma HLS INTERFACE s_axle set 0

Unaweza kuona jinsi bandari zilizoonyeshwa kwenye kizuizi cha IP zinaathiriwa na maagizo haya.

Hatua ya 11: Kujiandikisha kwa AXI

Usajili wa AXI
Usajili wa AXI

Ili kupata pembejeo / pato kwenda / kutoka kwa kizuizi chako cha IP hadi PS njia nzuri ya kufanya hivyo ni kupitia kiunga cha AXI.

Unaweza kutaja hii katika nambari yako ya HLS, pamoja na pesa ambazo zitatumiwa kufikia dhamana baadaye kama hii:

picha batili ya picha (AXI_STREAM & video_in, AXI_STREAM & video_out, int & x, int & y) {

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

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

x = 42;

y = 0xDEADBEEF; }

Mara tu ukiunganishwa vizuri katika Vivado, unaweza kupata maadili ukitumia nambari hii katika Vivado SDK:

# pamoja na "vigezo.h"

#fafanua xregoff 0x14 #fafanua 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);

Hii itakuwa na wewe kuishia na 42 katika x na 0xdeadbeef katika y

Hatua ya 12: Pragma ya data

Pragma ya data
Pragma ya data
Pragma ya data
Pragma ya data
Pragma ya data
Pragma ya data

Ndani ya #pragma DATAFLOW njia ambayo nambari inatekelezwa inabadilika kutoka kwa C ++ ya kawaida. Nambari imewekwa bomba ili maagizo yote yatekelezwe kila wakati katika sehemu tofauti za data (Fikiria kama laini ya kusanyiko katika kiwanda, kila kituo kinafanya kazi kwa kuendelea kufanya kazi moja na kuipeleka kituo cha pili)

kutoka kwa picha unaweza kuona kwamba kila maagizo

Licha ya kuonekana kuwa vigeuzi vya kawaida, vitu vya img vinatekelezwa kama bafa ndogo kati ya amri. Kutumia picha kama pembejeo kwa kazi "hutumia" na kuifanya isitumike tena. (Kwa hivyo hitaji la amri za dufu)

Ilipendekeza: