INHOUDSOPGAWE:

Vivado HLS Video IP -bloksintese: 12 stappe
Vivado HLS Video IP -bloksintese: 12 stappe

Video: Vivado HLS Video IP -bloksintese: 12 stappe

Video: Vivado HLS Video IP -bloksintese: 12 stappe
Video: FPGA Twitch 04 - Vivado HLS - С-тестбенчи и Назначение интерфейсов (часть 1 из 2) 2024, November
Anonim
Vivado HLS Video IP -bloksintese
Vivado HLS Video IP -bloksintese

Wou u ooit real-time verwerking op video verwerk sonder om veel latensie of in 'n ingeboude stelsel by te voeg? FPGA's (veldprogrammeerbare hekskikkings) word soms gebruik om dit te doen; Om videoverwerkingsalgoritmes in hardeware -spesifikasietale soos VHDL of Verilog te skryf, is egter op sy beste frustrerend. Voer Vivado HLS in, die Xilinx -instrument waarmee u in 'n C ++ - omgewing kan programmeer en daaruit hardeware spesifikasies taalkode kan genereer.

Vereiste sagteware:

  • Vivado HLS
  • Vivado
  • (As u die AXI -registers gebruik) Vivado SDK

(Opsioneel) Laai die Xilinx -voorbeelde hier af:

Xilinx HLS video voorbeelde

Stap 1: Wat is Vivado HLS?

Vivado HLS is 'n instrument wat gebruik word om c ++ kode in hardeware strukture te omskep wat op 'n FPGA geïmplementeer kan word. Dit bevat 'n IDE om hierdie ontwikkeling te doen. Sodra u die ontwikkeling van die kode vir HLS voltooi het, kan u u gegenereerde IP in 'n formaat uitvoer vir gebruik met Vivado.

Laai die aangehegte lêers af en plaas dit naby die plek waar u u projek gaan skep. (hernoem hulle terug na "top.cpp" en "top.h" as hulle 'n gerandomiseerde naam het)

Stap 2: HLS -videobiblioteek

HLS videobiblioteek
HLS videobiblioteek
HLS videobiblioteek
HLS videobiblioteek

Die HLS -videobiblioteek bevat dokumentasie met verwysingsontwerpe in hierdie vraestel: XAPP1167 'n Ander goeie bron is die Xilinx Wiki -bladsy daaroor.

Begin Vivado HLS.

Skep 'n nuwe projek.

Neem die lêers wat u in die vorige stap afgelaai het, en voeg dit as bronlêers by. (Let wel: die lêers word nie na die projek gekopieer nie, maar bly eerder waar dit is)

Gebruik dan die blaai -knoppie om die topfunksie te kies.

Kies die Xilinx -deel wat u gebruik op die volgende bladsy.

Stap 3: Sintetiseer

Sintetiseer
Sintetiseer

Oplossing => Begin C -sintese => Aktiewe oplossing

Na ~ 227.218 sekondes moet dit gedoen word. (Let wel: u werklike sintetietyd sal afhang van baie faktore)

Stap 4: Weergawe en ander inligting vir uitvoer

Weergawe en ander inligting vir uitvoer
Weergawe en ander inligting vir uitvoer

Weergawegetalle is in wisselwerking met Vivado, sodat u die IP in 'n ontwerp kan opdateer. As dit 'n geringe weergawe is, kan dit in plek wees, terwyl groot weergawes verander moet word om die nuwe blok handmatig in te voeg en die ou te verwyder. heeltemal outomaties gedoen deur op die update -knoppie te druk. U kan 'report_ip_status' in die Vivado tcl -konsole uitvoer om die status van u IP te sien.

Stel die weergawenommers en ander inligting in Oplossing => Oplossingsinstellings …

Alternatiewelik kan hierdie instellings tydens die uitvoer ingestel word.

Stap 5: Uitvoer na 'n Vivado IP -biblioteek

Uitvoer na 'n Vivado IP -biblioteek
Uitvoer na 'n Vivado IP -biblioteek
Uitvoer na 'n Vivado IP -biblioteek
Uitvoer na 'n Vivado IP -biblioteek

Oplossing => Voer RTL uit

As u nie die IP -biblioteekbesonderhede in die vorige stap gestel het nie, kan u dit nou doen.

Stap 6: Sintese en uitvoer analise

Sintese en uitvoer analise
Sintese en uitvoer analise
Sintese en uitvoer analise
Sintese en uitvoer analise
Sintese en uitvoer analise
Sintese en uitvoer analise

Op hierdie skerm kan ons die statistieke oor ons uitgevoerde module sien, wat toon dat dit aan ons kloktyd van 10ns (100MHz) voldoen en hoeveel van elke bron dit gebruik.

Met 'n kombinasie hiervan, ons sinteseverslag en ons dataflow -analise, kan ons sien dat dit 317338 kloksiklusse * 10ns klokperiode * 14 pypleidingfases = 0,04442732 sekondes neem. Dit beteken dat die totale latensie wat deur ons beeldverwerking bygevoeg word, minder as een twintigste sekonde is (as dit op die geteikende 100MHz geklok word).

Stap 7: Voeg die IP -biblioteek in Vivado by

Voeg die IP -biblioteek in Vivado by
Voeg die IP -biblioteek in Vivado by
Voeg die IP -biblioteek in Vivado by
Voeg die IP -biblioteek in Vivado by
Voeg die IP -biblioteek in Vivado by
Voeg die IP -biblioteek in Vivado by
Voeg die IP -biblioteek in Vivado by
Voeg die IP -biblioteek in Vivado by

Om u gesintetiseerde IP -blok te gebruik, moet u dit by Vivado voeg.

Voeg in Vivado 'n IP-bewaarplek by u projek deur na die IP-katalogus te gaan en met die rechtermuisknop "Add Repository …" te kies.

Gaan na u Vivado HLS -projekgids en kies u oplossingsgids.

Dit moet die IP wat dit gevind het, rapporteer.

Stap 8: Opgradeer

'N Opgradering doen
'N Opgradering doen
'N Opgradering doen
'N Opgradering doen
'N Opgradering doen
'N Opgradering doen

Soms moet u veranderinge aan u HLS -blok aanbring nadat u dit in 'n Vivado -ontwerp ingesluit het.

Om dit te kan doen, kan u die veranderings aanbring en die IP weer met 'n hoër weergawenommer herontwerp en uitvoer (sien besonderhede in die vorige stap oor groot/geringe weergawe -nommerveranderings).

Nadat u die nuwe weergawe uitgevoer het, verander u u IP -bewaarplekke in Vivado. Dit kan gedoen word as Vivado agterkom dat die IP in die bewaarplek verander het, of as dit handmatig geaktiveer word. (Let op: as u u IP -bewaarplekke herlaai nadat u begin het, maar voordat die uitvoer in HLS voltooi is, sal die IP tydelik nie daar wees nie, wag totdat dit klaar is en weer verfris.)

Op hierdie stadium moet 'n venster verskyn met die inligting dat 'n IP op die skyf verander is en u die opsie gee om dit op te dateer met 'n 'Upgrade Selected' knoppie. deur op die knoppie te druk, word die ou IP outomaties deur die nuwe vervang, anders kan meer werk nodig wees.

Stap 9: Bykomende besonderhede en inligting

Die volgende stappe bied meer inligting oor hoe HLS -sintese werk en wat u daarmee kan doen.

Sien hierdie instruksies vir 'n voorbeeld van 'n projek met 'n HLS -gesintetiseerde IP -blok.

Stap 10: Uitset en invoer

Uitset en insette
Uitset en insette
Uitset en insette
Uitset en insette

Uitsette en insette na die finale IP -blok word bepaal uit 'n analise wat die sintetiseerder doen van die vloei van data in en uit die topfunksie.

Net soos in VHDL of verilog, kan HLS u besonderhede spesifiseer oor die verbindings tussen IP. Hierdie reëls is voorbeelde hiervan:

leegte beeldfilter (AXI_STREAM & video_in, AXI_STREAM & video_out, int & x, int & y) {

#pragma HLS INTERFACE aspoort = video_in bundel = INPUT_STREAM #pragma HLS INTERFACE aspoort = video_uit bundel = OUTPUT_STREAM #pragma HLS INTERFACE s_axilite poort = x bundel = CONTROL_BUS offset = 0x14 #pragma HLS INTERCONT = y

U kan sien hoe die hawens wat op die IP -blok vertoon word, beïnvloed word deur hierdie riglyne.

Stap 11: AXI Register Interfacing

AXI Register Interfacing
AXI Register Interfacing

Om die invoer/uitset van/na u IP -blok na die PS te kry, is 'n goeie manier om dit te doen deur middel van 'n AXI -koppelvlak.

U kan dit in u HLS -kode spesifiseer, insluitend die verrekenings wat gebruik moet word om later toegang tot die waarde te kry:

leegte beeldfilter (AXI_STREAM & video_in, AXI_STREAM & video_out, int & x, int & y) {

#pragma HLS INTERFACE s_axilite poort = x bundel = CONTROL_BUS offset = 0x14

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

x = 42;

y = 0xDEADBEEF; }

As u eers behoorlik in Vivado gekoppel is, het u toegang tot die waardes met behulp van hierdie kode in Vivado SDK:

#sluit "parameters.h" in

#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);

Hiermee eindig u met 42 in x en 0xdeadbeef in y

Stap 12: Dataflow Pragma

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

Binne die #pragma DATAFLOW verander die manier waarop die kode geïmplementeer word van normale C ++. Die kode word in die pyplyn geplaas sodat alle instruksies te alle tye in verskillende dele van die data uitgevoer word (dink aan dit soos 'n monteerbaan in 'n fabriek, elke stasie werk voortdurend met een funksie en stuur dit na die volgende stasie)

uit die beeld kan u sien dat elkeen van die voorskrifte

Alhoewel dit normale veranderlikes blyk te wees, word img -voorwerpe eintlik as klein buffers tussen die opdragte geïmplementeer. Deur 'n beeld as 'n invoer vir 'n funksie te gebruik, 'verbruik' dit en word dit nie meer bruikbaar nie. (Vandaar die behoefte aan die dubbele opdragte)

Aanbeveel: