Talaan ng mga Nilalaman:

Vivado HLS Video IP Block Synthesis: 12 Hakbang
Vivado HLS Video IP Block Synthesis: 12 Hakbang

Video: Vivado HLS Video IP Block Synthesis: 12 Hakbang

Video: Vivado HLS Video IP Block Synthesis: 12 Hakbang
Video: Introduction to Vitis High-Level Synthesis (HLS) 2024, Nobyembre
Anonim
Vivado HLS Video IP Block Synthesis
Vivado HLS Video IP Block Synthesis

Nais mo na bang magproseso ng real-time na video nang hindi nagdaragdag ng labis na latency o sa isang naka-embed na system? Ang mga FPGA (Field Programmable Gate Arrays) ay minsan ginagamit upang gawin ito; gayunpaman, ang pagsulat ng mga algorithm sa pagproseso ng video sa mga wika ng pagtutukoy ng hardware tulad ng VHDL o Verilog ay nakakabigo sa pinakamainam. Ipasok ang Vivado HLS, ang tool na Xilinx na nagpapahintulot sa iyo na mag-program sa isang kapaligiran na C ++ at makabuo ng code ng wika ng detalye ng hardware mula dito.

Mga kinakailangang software:

  • Vivado HLS
  • Vivado
  • (Kung gagamitin mo ang mga rehistro ng AXI) Vivado SDK

(Opsyonal) I-download ang mga halimbawa ng ginawang Xilinx dito:

Mga halimbawa ng video ng Xilinx HLS

Hakbang 1: Ano ang Vivado HLS?

Ang Vivado HLS ay isang tool na ginamit upang buksan ang c ++ tulad ng code sa mga istraktura ng hardware na maaaring ipatupad sa isang FPGA. Nagsasama ito ng isang IDE para sa paggawa ng pag-unlad na ito. Kapag nakumpleto mo ang iyong pag-unlad ng code para sa HLS maaari mong i-export ang iyong nabuong IP sa isang format para magamit sa Vivado.

I-download ang mga nakalakip na file at ilagay ang mga ito malapit sa kung saan mo lilikha ng iyong proyekto. (palitan ang pangalan ng mga ito pabalik sa "top.cpp" at "top.h" kung mayroon silang isang na-random na pangalan)

Hakbang 2: HLS Video Library

HLS Video Library
HLS Video Library
HLS Video Library
HLS Video Library

Ang HLS Video Library ay may dokumentasyon na may mga sanggunian na disenyo sa papel na ito: XAPP1167 Isa pang mahusay na mapagkukunan ay ang pahina ng Xilinx Wiki tungkol dito.

Simulan ang Vivado HLS.

Lumikha ng isang bagong proyekto.

Dalhin ang mga file na na-download mo sa nakaraang hakbang at idagdag ang mga ito bilang mga mapagkukunang file. (Tandaan: ang mga file ay hindi nakopya sa proyekto, ngunit sa halip ay manatili kung nasaan sila)

Pagkatapos ay gamitin ang pindutang Mag-browse upang piliin ang nangungunang pag-andar.

Sa susunod na pahina, piliin ang bahagi ng Xilinx na iyong ginagamit.

Hakbang 3: Synthesizing

Pagbubuo ng synthesizing
Pagbubuo ng synthesizing

Solusyon => Patakbuhin ang C Synthesis => Aktibong Solusyon

Pagkatapos ng ~ 227.218 segundo, dapat itong gawin. (Tandaan: ang iyong tunay na oras ng pagbubuo ay mag-iiba batay sa maraming mga kadahilanan)

Hakbang 4: Pag-bersyon at Iba Pang Impormasyon para sa Pag-export

Bersyon at Iba Pang Impormasyon para sa Pag-export
Bersyon at Iba Pang Impormasyon para sa Pag-export

Ang mga numero ng bersyon ay nakikipag-ugnay sa Vivado upang magawa mong ma-update ang IP sa isang disenyo. Kung ito ay isang maliit na pagbabago ng bersyon maaari itong gawin sa lugar habang ang mga pangunahing pagbabago ng bersyon ay nangangailangan ng iyong manu-manong idagdag sa bagong bloke at alisin ang dating. Kung ang iyong mga interface ay hindi nagbago at ang pag-update ng bersyon ay isang menor de edad ang pag-update ay maaaring tapos na ganap na awtomatiko sa pamamagitan ng pagpindot sa pindutang IP update. Maaari mong patakbuhin ang "report_ip_status" sa Vivado tcl console upang makita ang katayuan ng iyong IP.

Itakda ang mga numero ng bersyon at iba pang impormasyon sa Solusyon => Mga Setting ng Solusyon …

Bilang kahalili, ang mga setting na ito ay maaaring itakda sa panahon ng pag-export.

Hakbang 5: Pag-export sa isang Vivado IP Library

Pag-export sa isang Vivado IP Library
Pag-export sa isang Vivado IP Library
Pag-export sa isang Vivado IP Library
Pag-export sa isang Vivado IP Library

Solusyon => I-export ang RTL

Kung hindi mo itinakda ang mga detalye ng IP library sa nakaraang hakbang, magagawa mo ito ngayon.

Hakbang 6: Pagsusuri sa Syntesis at Pag-export

Sintesis at Pagsusuri sa Pag-export
Sintesis at Pagsusuri sa Pag-export
Sintesis at Pagsusuri sa Pag-export
Sintesis at Pagsusuri sa Pag-export
Sintesis at Pagsusuri sa Pag-export
Sintesis at Pagsusuri sa Pag-export

Sa screen na ito maaari naming makita ang mga istatistika tungkol sa aming na-export na module, ipinapakita na natutugunan nito ang aming oras ng orasan na 10ns (100MHz) at kung magkano sa bawat mapagkukunan na ginagamit nito.

Sa isang kombinasyon nito, ang aming Synthesis Report, at ang aming pag-aaral ng Dataflow, maaari naming makita na tumatagal ng 317338 cycle ng orasan * 10ns na orasan * 14 yugto ng pipeline = 0.04442732 segundo. Nangangahulugan na ang kabuuang latency na idinagdag ng aming pagproseso ng imahe ay mas mababa sa isang dalawampu't isang segundo (kapag naorasan sa naka-target na 100MHz).

Hakbang 7: Pagdaragdag ng IP Library sa Vivado

Pagdaragdag ng IP Library sa Vivado
Pagdaragdag ng IP Library sa Vivado
Pagdaragdag ng IP Library sa Vivado
Pagdaragdag ng IP Library sa Vivado
Pagdaragdag ng IP Library sa Vivado
Pagdaragdag ng IP Library sa Vivado
Pagdaragdag ng IP Library sa Vivado
Pagdaragdag ng IP Library sa Vivado

Upang magamit ang iyong synthesized IP block kakailanganin mong idagdag ito sa Vivado.

Sa Vivado magdagdag ng isang IP repository sa iyong proyekto sa pamamagitan ng pagpunta sa IP catalog at i-right click ang pagpili ng "Add Repository…"

Mag-navigate sa iyong direktoryo ng proyekto ng Vivado HLS at piliin ang iyong direktoryo ng solusyon.

Dapat itong iulat ang IP na nahanap nito.

Hakbang 8: Gumagawa ng isang Pag-upgrade

Gumagawa ng isang Pag-upgrade
Gumagawa ng isang Pag-upgrade
Gumagawa ng isang Pag-upgrade
Gumagawa ng isang Pag-upgrade
Gumagawa ng isang Pag-upgrade
Gumagawa ng isang Pag-upgrade

Minsan kailangan mong gumawa ng mga pagbabago sa iyong HLS block pagkatapos isama ito sa isang disenyo ng Vivado.

Upang magawa ito, maaari mong gawin ang mga pagbabago at muling baguhin ang laki at i-export ang IP na may mas mataas na numero ng bersyon (tingnan ang mga detalye sa naunang hakbang tungkol sa mga pangunahing / menor de edad na mga pagbabago sa numero).

Matapos baguhin ang pag-export ng bagong bersyon, i-refresh ang iyong mga IP repository sa Vivado. Maaari itong magawa kapag napansin ng Vivado na ang IP ay nagbago sa lalagyan, o manu-manong naaktibo. (Tandaan, kung i-refresh mo ang iyong mga repository ng IP pagkatapos magsimula, ngunit bago makumpleto ang pag-export sa HLS, pansamantalang wala ang IP, hintayin itong matapos at i-refresh muli.)

Sa puntong ito dapat lumitaw ang isang window na may impormasyon na ang isang IP ay binago sa disk at bibigyan ka ng pagpipilian na i-update ito sa isang pindutang "I-upgrade ang Napili". Kung ang pagbabago ay isang menor de edad na pagbabago at wala sa mga interface ang nagbago, pagkatapos ang pagpindot sa pindutang iyon ay awtomatikong papalitan ang dating IP ng bago, kung hindi man ay maaaring mangailangan ng mas maraming trabaho.

Hakbang 9: Karagdagang Mga Detalye at Impormasyon

Ang mga sumusunod na hakbang ay nagbibigay ng karagdagang impormasyon tungkol sa kung paano gumagana ang HLS synthesis at kung ano ang maaari mong gawin dito.

Para sa isang halimbawa ng isang proyekto na gumagamit ng isang HLS synthesized IP block, tingnan ang itinuturo na ito.

Hakbang 10: Output at Input

Output at Input
Output at Input
Output at Input
Output at Input

Ang mga output at Input sa pangwakas na bloke ng IP ay natutukoy mula sa isang pagtatasa na ginagawa ng synthesizer ng daloy ng data papasok at palabas ng nangungunang pag-andar.

Katulad ng sa VHDL o verilog, pinapayagan ka ng HLS na tukuyin ang mga detalye tungkol sa mga koneksyon sa pagitan ng IP. Ang mga linyang ito ay mga halimbawa nito:

walang bisa ang image_filter (AXI_STREAM at 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 bundle = OUTPUT_STREAM #pragma HLS INTERFACE s_axilite port = x bundle = CONTROL_BUS offset = 0x14 # pragma HLS INTERFACE

Maaari mong makita kung paano ang mga port na ipinakita sa IP block ay naiimpluwensyahan ng mga direktibong ito.

Hakbang 11: Pagrehistro ng AXI Interfacing

Pagrehistro ng AXI Interfacing
Pagrehistro ng AXI Interfacing

Upang makakuha ng input / output sa / mula sa iyong IP block sa PS isang mahusay na paraan upang gawin ito ay sa pamamagitan ng isang AXI interface.

Maaari mong tukuyin ito sa iyong HLS code, kasama ang mga offset na gagamitin upang ma-access ang halaga sa paglaon tulad nito:

walang bisa ang image_filter (AXI_STREAM at 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; }

Kapag nakakonekta nang maayos sa Vivado, maaari mong ma-access ang mga halaga gamit ang code na ito sa Vivado SDK:

# isama ang "mga parameter.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);

Magagawa mong mapunta ka sa 42 sa x at 0xdeadbeef sa y

Hakbang 12: Dataflow Pragma

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

Sa loob ng #pragma DATAFLOW ang paraan na ipinatupad ang code ay nagbabago mula sa normal na C ++. Ang code ay pipelined upang ang lahat ng mga tagubilin ay tumatakbo sa lahat ng oras sa iba't ibang bahagi ng data (Isipin ito tulad ng isang linya ng pagpupulong sa isang pabrika, ang bawat istasyon ay patuloy na nagtatrabaho ng isang pag-andar at ipinapasa ito sa susunod na istasyon)

mula sa imahe maaari mong makita na ang bawat isa sa mga direktiba

Sa kabila ng paglitaw na normal na mga variable, ang mga bagay na img ay talagang ipinatupad bilang maliit na buffer sa pagitan ng mga utos. Ang paggamit ng isang imahe bilang isang input sa isang pagpapaandar na "kumonsumo" nito at ginagawa itong hindi na magagamit. (Samakatuwid ang pangangailangan para sa mga duplicate na utos)

Inirerekumendang: