Aplikace s využitím syntézy na systémové úrovni pro

Transkript

Aplikace s využitím syntézy na systémové úrovni pro
2015
http://excel.fit.vutbr.cz
Aplikace s využitı́m syntézy na systémové úrovni
pro platformu Xilinx ZYNQ
Jiřı́ Husák*
Abstrakt
Počı́tačové systémy se stávajı́ stále složitějšı́. V oblasti zpracovánı́ videa jsou potřeba stále
vyššı́ nároky na výpočetnı́ výkon. K těmto účelům lze použı́t technologii FPGA, která přinášı́
možnost akcelerace v hardwaru. Vyššı́ nároky jsou však kladeny i na vývojáře. Proto vzniká
snaha popisovat chovánı́ hardwaru pomocı́ vyššı́ch programovacı́ch jazyků. Cı́lem této práce je
navrhnout a implementovat aplikaci pro zpracovánı́ videa akcelerovanou v FPGA pomocı́ jazyka C++
a zhodnotit přı́nos tohoto přı́stupu pro vývojáře. Aplikace je určena pro platformu Xilinx ZYNQ a pro
implementaci je použito vývojové prostředı́ Xilinx Vivado. V architektuře jsou použı́vány komponenty
vytvořené pomocı́ syntézy na systémové úrovni (High-Level Synthesis). Výsledkem práce je
demonstračnı́ aplikace, která ukazuje, že může být výhodné použı́vat syntézu na systémové úrovni.
Hlavnı́mi důvody je úspora času při vývoji a možnost snadněji provádět změny chovánı́ komponenty.
Tato práce je užitečná pro vývojáře FPGA a předkládá jim možnost zvýšenı́ produktivity.
Klı́čová slova: High-Level Synthesis — Xilinx ZYNQ — Xilinx Vivado — zpracovánı́ obrazu
Přiložené materiály: Demonstračnı́ video — Staženı́ zdrojových kódů
*[email protected], Faculty of Information Technology, Brno University of Technology
1. Úvod
[Motivace] S rozvojem elektroniky na trhu rostou
rovněž nároky na vývojáře. Velikost integrovaných
obvodů u nových produktů se stále zvětšuje a také se
zvyšuje celková složitost systému. Tato práce ukazuje
možnost urychlenı́ vývoje aplikacı́ pro zpracovánı́ videa
v FPGA za pomoci vyššı́ho programovacı́ho jazyka.
Požadavkem na aplikaci je, aby bylo zpracováno video
v reálném čase a aby vývoj nebyl časově náročný.
[Definice problému] Cı́lem práce je navrhnout
a implementovat aplikaci pro zpracovánı́ videa. V průmyslu je často potřeba v reálném čase zpracovávat
video s velkým rozlišenı́m. Vhodnou platformou pro
řešenı́ těchto problémů je systém na čipu Xilinx ZYNQ.
ZYNQ obsahuje dvoujádrový procesor ARM Cortex
A9 a programovatelnou logiku FPGA. Výhodnou je
možnost rozdělenı́ aplikace na softwarovou a hardwarovou část. Aplikace bude zpracovávat video v HD
rozlišenı́ s frekvencı́ 60 snı́mků/s. Vstupnı́ obraz bude
filtrován (detekce hran, odstraněnı́ šumu, vyhlazenı́
obrazu) nebo bude spuštěna detekce objektu v reálném
čase. Výsledek bude zobrazován na HDMI monitoru.
[Existujı́cı́ řešenı́] V dnešnı́ době se pro zpracovánı́ videa často použı́vá softwarové řešenı́ na běžném
CPU. Nevýhodou může být velký přı́kon a nedostatečná
rychlost zpracovánı́. Rychlost zpracovánı́ lze akcelerovat na GPU. Nicméně problém s přı́konem roste. Vhodným řešenı́m může být technologie FPGA. Tento přı́stup
řešı́ jak výkonnost, tak přı́kon. Pro akceleraci zpracovánı́ videa v reálném čase na FPGA existujı́ různá
řešenı́ [1, 2]. Rovněž platforma Xilinx ZYNQ se
použı́vá pro akceleraci zpracovánı́ videa v dopravnı́ch
aplikacı́ch [3, 4].
FPGA se v současnosti typicky programujı́ v HDL
jazycı́ch, což ovšem přinášı́ nevýhodu - časovou náročnost při vývoji. Proto se v poslednı́ch letech začı́ná
uplatňovat přı́stup, kdy je chovánı́ obvodu popsáno
pomocı́ vyššı́ch programovacı́ch jazyků [5].
[Navržené řešenı́] Hlavnı́ změnou oproti běžné
implementaci pomocı́ HDL jazyků bude použitı́ syntézy
na systémové úrovni při implementaci komponent v
FPGA. Komponenty jsou psány v jazyce C++ a syntetizovány pomocı́ vývojového prostředı́ Xilinx Vivado
HLS. V FPGA budou použity i části psané ve VHDL
a vestavěné IP-Cores od výrobce, se kterými budou
komponenty propojeny.
[Přı́nos] Tato práce ukazuje praktické využitı́ syntézy na systémové úrovni v reálné aplikaci. Práce má za
cı́l vyzkoušet a zhodnotit nový přı́stup k programovánı́
FPGA, který přispı́vá k zvýšenı́ produktivity.
Obrázek 1. Vývojový diagram při navrhovánı́ FPGA
za použitı́ syntézy na systémové úrovni.
[Platforma Xilinx ZYNQ] Systém na čipu ZYNQ
od firmy Xilinx obsahuje aplikačnı́ procesor ARM Cortex A9 a také programovatelné hradlové pole. K procesoru ARM jsou připojeny periferie Ethernet, USB,
UART, SD karta a dalšı́. Můžeme zde také spustit
operačnı́ systém Linux [7].
Programovatelné hradlové pole se skládá z matice CLB (Configurable Logic Blocks), z bloků DSP a
BRAM a I/O rozhranı́. Každá CLB se skládá z několika
prvků LUT (Lookup Table) a prvků FF (Flip-flop).
LUT lze použı́t jako logickou funkci, jako posuvný registr nebo jako paměť. FF se použı́vá jako jednobitový
registr. BRAM sloužı́ jako paměť pro většı́ bloky, jedna
BRAM má velikosti 36Kb a disponuje dvěma porty.
BRAM se použı́vá k implementaci pamětı́ FIFO, RAM
a ROM. Komponenta DSP48 sloužı́ pro rychlé aritmetické operace, kde operandy majı́ většı́ datovou šı́řku.
Po provedenı́ syntézy nám nástroj sdělı́, kolik prvků
2. Teorie
jednotlivých komponent algoritmus potřebuje k im[Syntéza na systémové úrovni] Cı́lem syntézy na plementaci obvodu. Napřı́klad varianta čipu ZYNQ
systémové úrovni (High-Level Sysnthesis) je nalez- Z-7020 obsahuje 106 400 FF, 53 200 LUT, 140 BRAM
nout RTL realizaci čı́slicového obvodu, který je popsán a 220 DSP48.
Komunikace uvnitř systému na čipu ZYNQ použı́vá
ve vysokoúrovňovém jazyce (C/C++, SystemC, . . . ).
standard
AXI. Pro vysokorychlostnı́ch přenos streamoObecně výsledných realizacı́ může existovat vı́ce. Synvaných
dat
se použı́vá protokol AXI4-Stream. Pro
téza však hledá optimálnı́ realizaci vzhledem ke vstupnı́m omezenı́m (frekvence, latence, množstvı́ zdrojů). mapovánı́ proměnných do paměti lze použı́t protokol
Syntéza pracuje v několika krocı́ch. Nejdřı́ve se vs- AXI4-Lite. K proměnné má přı́stup jak aplikačnı́ protupnı́ algoritmus převede na Control / Data Flow Graph. cesor, tak FPGA.
[Vývojové prostředı́ Vivado] Prostředı́ Vivado
Následně se alokujı́ zdroje, které jsou potřeba. Poté
probı́há plánovánı́ operacı́ do jednotlivých taktů. Dalšı́ Design Suite obsahuje několik aplikacı́. V této práci
fázı́ je přiřazenı́ funkčnı́ch jednotek k jednotlivým op- se budeme soustředit na aplikaci Vivado HLS, která
eracı́m. Poslednı́ fázı́ je vygenerovánı́ RTL a vytvořenı́ z jazyka C/C++/SystemC syntetizuje algoritmus do
konečného automatu obvodu. Výsledek může být HDL popisu obvodu v jazyce Verilog nebo VHDL.
napřı́klad v jazyce VHDL nebo Verilog [6]. Na obrázku Sloužı́ pro vytvářenı́ komponent (IP jader), které lze
1 můžeme vidět, že z RTL specifikace lze pomocı́ logic- vkládat do celkového návrhu v aplikaci Vivado. Komké syntézy a Place & Route vygenerovat výslednou ponenty lze propojovat s vestavěnými IP jádry od
výrobce nebo s vlastnı́mi jádry popsanými v HDL
konfiguraci FPGA čipu (Layout).
Hlavnı́ optimalizace, které se použı́vajı́ při návrhu jazyce [8].
obvodu pomocı́ syntézy na systémové úrovni se týkajı́
Při projenı́ komponent je třeba správně definovat
proměnných, smyček a funkcı́. U proměnných lze nas- jejı́ rozhranı́. Lze použı́t klasického drátového rozhranı́
tavovat bitovou délku, smyčky lze rozbalovat, slučovat nebo využı́t komunikačnı́ho protokolu. U drátového
a nebo zřetězit.
spojenı́ lze použı́t valid signál nebo použı́t signály
pro handshake protokol. Dalšı́ možnostı́ je vytvořit
rozhranı́ typu FIFO, memory, bram, AXI4-Stream
nebo AXI4-Lite.
Pro optimalizaci kódu v prostředı́ Vivado HLS se
použı́vajı́ TCL skripty nebo se mohou psát direktivy
pro syntézu do zdrojového kódu (#pragma HLS). Vivado HLS obsahuje debugger kódu. Po dokončenı́
syntézy lze analyzovat, jaké operace jsou naplánovány
do jednotlivých taktů. Zobrazı́ se informace o latenci,
propustnosti a odhad použitých zdrojů.
Při implementaci komponent lze využı́t vestavěné
knihovny (HLS C Libraries), která rozšiřuje jazyk
C++ o datové typy a třı́dy usnadňujı́cı́ popis hardwaru. V knihovně jsou třı́dy pro bitové datové typy,
matematické funkce s různou přesnostı́ upravené pro
hardware, podpora práce s posuvnými registry nebo
streamovanými daty.
3. Návrh aplikace
Aplikace bude přijı́mat obraz z kamery nebo ze statického obrázku a bude jej zpracovávat v FPGA. Výsledek bude zobrazen na HDMI monitoru. V FPGA budou implementovány obrazové filtry. Sobelův filtr pro
detekci hran, mediánový filtr pro odstraněnı́ šumu a bilaterálnı́ filtr pro vyhlazenı́ obrazu. Kromě filtrů bude
aplikace obsahovat AdaBoost detektor SPZ.
[Hardware k aplikaci] Aplikace bude spuštěna
na vývojové desce Xilinx ZC702, která obsahuje čip
ZYNQ Z-7020. Deska obsahuje 1 GB paměti RAM.
Ke kitu bude připojena přes rozhranı́ Ethernet kamera
Unicam M621 z firmy CAMEA. Kamera pracuje v 8bit režimu ve stupnı́ch šedi. Rozlišenı́ kamery je 752
* 478 pixelů a frekvence 60 snı́mků/s a použı́vá UDP
protokol [9]. Aplikace bude pracovat s HD rozlišenı́m
(1280 * 720) a takový obraz se bude zobrazovat na
připojeném HDMI monitoru.
[Převzaté části] V rámci vytvářenı́ této aplikace
jsem spolupracoval s Ing. Petrem Musilem a Ing. Martinem Musilem, od kterých jsem obdržel zprovozněný
kit s nainstalovaným systémem Linux. Rovněž již bylo
vyřešeno zı́skávánı́ obrazu z paměti RAM a obsluha
HDMI monitoru. Při implementaci bilaterálnı́ho filtru jsem také obdržel SW řešenı́ algoritmu pro běžné
CPU.
Při implementaci detektoru AdaBoost jsem spolupracoval s Ing. Filipem Kadlčkem z firmy CAMEA.
Zı́skal jsem natrénovaný klasifikátor AdaBoost na SPZ
[10]. Také jsem obdržel popis architektury, která bude
implementována pomocı́ prostředı́ Vivado HLS.
[Návrh řešenı́ aplikace] Aplikace je rozdělena na
část spuštěnou v operačnı́m systému Linux na procesoru ARM a část v FPGA. Jelikož je rozhranı́ Ethernet
připojeno k procesoru ARM, bude zde spuštěna ap-
likace pro zpracovánı́ dat z kamery. Přijı́má se UDP
protokol s daty a kontrolnı́mi informacemi. Aplikace
má dvě vlákna. Prvnı́ přijı́má data z rozhranı́, druhé
vlákno hodnoty rozšiřuje na 18b a ukládá do definované oblasti v paměti RAM. Aplikace umožňuje také
načı́st do paměti statický obrázek.
V FPGA je umı́stěna DMA komponenta, která
vyčı́tá z paměti RAM data a převádı́ je na video AXIStream. K datům jsou také přidány signály značı́cı́
začátek snı́mku (Start Of Frame) a signál konce řádku.
Nynı́ budou popsány jednotlivé komponenty, které budou implementovány v prostředı́ Vivado HLS. Jedná
se celkem o 12 komponent s různou složitostı́.
[Komponenty řı́zenı́ videa] Proud videa z DMA
je přiveden do komponenty AxiMultiplexor. Tato komponenta přepı́ná mezi jednotlivými filtry. Je řı́zena pomocı́ AXI-Lite protokolu. Filtry lze přepı́nat pomocı́
skriptu v prostředı́ Linux. Analogickou komponentou
je AxiDemultiplexor, která je umı́stěna v návrhu po
aplikovánı́ filtru a předává video signál pro zobrazenı́.
Komponenta AxiVideoBrightness nastavuje jas
videa, hodnota jasu je opět řı́zena pomocı́ protokolu
AXI-Lite skriptem z OS Linux. Před výstupem do
HDMI jádra se upravuje bitová šı́řka dat z 18b na 10b
a také se provádı́ ořez krajnı́ch hodnot, kde jsou řı́dicı́
data HDMI. To provádı́ komponenta AxiVideo2HDMI.
[Komponenty obrazových filtrů] Sobelův filtr
použı́vá okno 3x3 pixelů a počı́tá s detekčnı́ maskou
v ose x a y. Poté je hodnota zprůměrována. Filtr také
ošetřuje okrajové hodnoty a použı́vá nejbližšı́ platnou
hodnotu.
Mediánový filtr, který odstraňuje šum v obraze
pracuje s oknem 5x5 pixelů. Porovnávajı́ se sousednı́
hodnoty a medián se spočı́tá po 24 krocı́ch.
Bilaterálnı́ filtr vyhlazuje obraz a nechává ostré
přechody. Pracuje s oknem 11x11 pixelů. Pokud je
velký rozdı́l mezi pixely, tak hranu zanechá. Postupně
pro menšı́ změny v obraze výsledný obraz vyhlazuje.
[Komponenty architektury klasifikátoru] Architektura klasifikátoru je určena pro nalezenı́ jedné SPZ
v obraze. Kvůli ušetřenı́ zdrojů je použit algoritmus
AdaBoost s 50 slabými klasifikátory (LBP). Jelikož
samotný klasifikátor použı́vá rozhranı́ datových signálů,
je nejprve video AXI-Stream převedeno na signály
pomocı́ komponenty Axis2Wire. Poté následuje jednotka měnı́cı́ rozlišenı́ obrazu o pětinu. Komponenta
se jmenuje ImageScale. Změna rozlišenı́ se provádı́
metodou nejbližšı́ho souseda. Z této komponenty vstupuje video do klasifikátoru.
Na výstupu klasifikátoru je komponenta AdaBoostOut, která počı́tá aktuálnı́ řádek a sloupec. Také provádı́
prahovánı́ výstupu z klasifikátoru. Pokud je hodnota
většı́ jak práh, posı́lá ji do komponenty MaxAdaBoost.
Zde se hledá maximálnı́ odezva z celého snı́mku. Jednou za snı́mek se pošle maximum do komponenty,
která vykreslı́ rámeček na daných souřadnicı́ch - komponenta DrawBorder. Aby se nemusel ukládat celý
snı́mek do kterého se kreslı́ rámeček, tak se kreslı́ do
následujı́cı́ho snı́mku. U videa toto opatřenı́ nevadı́ a
zároveň dojde k ušetřenı́ zdrojů.
nimi výpočet. Tento způsob implementace je použit
v Sobelově, mediánovém i bilaterálnı́m filtru.
[Rozhranı́ AXI] V prostředı́ Vivado je mnoho
komponent od výrobce s rozhranı́m AXI, rovněž předávánı́ dat mezi ARM procesorem a FPGA je pomocı́
AXI protokolu. Proto je výhodné jej použı́t při tvorbě
komponent. V prostředı́ Vivado HLS stačı́ deklarovat
strukturu a přidat ji do parametrů top funkce a poté
direktivou pro rozhranı́ nastavit jako AXI-Stream. Vi4. Implementace
vado HLS automaticky přidá valid a ack signál a zaPro implementaci komponent v prostředı́ Vivado HLS jistı́ handshake protokol. V C++ kódu se programátor
lze zvolit jazyk C++. Pro nastavovánı́ chovánı́ syntézy už nemusı́ starat o řı́zenı́ sběrnice, stačı́ jen zapsat
se do jazyka C++ vkládajı́ direktivy (#pragma HLS). nebo čı́st z proměnné. Podobně také funguje protokol
Oproti návrhu na běžném CPU je třeba patřičně upravit AXI-Lite, který přidělı́ proměnné adresu v paměti a
zdrojový kód, aby byly dosaženy požadované cı́le na je možné k této proměnné přistupovat z FPGA komponenty, i z ARMu. V aplikaci je AXI-Steam použit
hardwaru:
pro video signál, AXI-Lite je použit napřı́klad při nas• Upravit bitovou šı́řku u proměnných (možnost tavovánı́ jasu ve videu, kdy jej uživatel může měnit za
běhu.
pevné řádové čárky).
• Definovat typ rozhranı́ u I/O (signály, protokol,
[Převod AXI-Stream na signály] V některých
AXI standard).
přı́padech můžeme potřebovat připojit do návrhu kom• Definovat mı́sto a způsob uloženı́ dat (BRAM, ponentu třetı́ strany, která nepoužı́vá standard AXI,
registry, LUT, rozdělit dlouhá pole, . . . )
ale běžné signály s různou bitovou šı́řkou. Toho lze
• Optimalizovat smyčky a funkce (zřetězenı́, rozba- dosáhnou vytvořenı́m jednoduché komponenty. Na
lenı́, . . . ).
vstupu je AXI-Stream a na výstupu datové signály
s valid signálem. Valid signál se nastavuje automatDále budou představeny jednotlivé optimalizace, icky na jeden takt, když se do proměnné zapı́še. Tato
které byly provedeny při implementaci aplikace.
komponenta je použita při připojenı́ AdaBoost klasi[BRAM jako FIFO u filtrů obrazu] Obrazový fikátoru.
filtr v FPGA pracuje s proudem pixelů. Typicky každý
[Zřetězenı́ funkce] Častou optimalizacı́ kompotakt přicházı́ do linky jeden pixel a zároveň každý
nent je zřetězenı́ operacı́ (pipelining). Funkce přijı́má
takt jeden pixel vystupuje. Filtr obrazu při počı́tánı́
a produkuje každý takt výsledek. Latence ale může
pixelu potřebuje mı́t přı́stup k okolnı́m bodům. Na
být několik taktů a funkce má několik hodnot rozpraběžném CPU nenı́ problém mı́t v paměti celý snı́mek
covaných. Při návrhu v HDL jazycı́ch je potřeba ručně
a libovolně přistupovat ke všem bodům. Na FPGA
naplánovat operace do jednotlivých taktů. Což sice
je však limitovaná paměť. Proto se ukládá jen ta část,
přinášı́ kontrolu nad plánem operacı́, nicméně je to
která je nezbytně nutná pro výpočet filtru.
časově náročné při návrhu a nebo při aplikaci změn.
Ve Vivadu HLS lze provést zřetězenı́ pomocı́ jedné
direktivy. Aplikace automaticky hledá plán operacı́,
aby byl splněn požadovaný interval. V praxi je často
Obrázek 2. Filtrace obrazu v FPGA. Počı́tá se
nutné ještě upravovat kód, aby bylo provedeno požadočervený pixel, potřebuje k tomu okolı́ 3x3 pixelů.
vaného zřetězenı́. Nesmı́ se napřı́klad přistupovat ke
Žlutý bod je nový v lince, oranžový se zahazuje po
statické proměnné nebo k rozhranı́m několikrát během
skončenı́ výpočtu. Maska 3x3 je v registrech, modrý
výpočtu. Pokud je při zřetězenı́ problém, syntéza
zbytek řádku je v paměti BRAM.
napı́še informace a snažı́ se najı́t nejnižšı́ možný interval
zřetězenı́. Zřetězenı́ je použito v aplikaci v každé
Na obrázku 2 je potřeba modré řádky uložit do
komponentě,
jelikož se zpracovává proudové video.
BRAM a v jednom taktu přečı́st a také zapsat jeden
pixel. BRAM má 2 porty, takže tuto operaci lze provést.
[Dělenı́ s tabulkou] Po syntéze na systémové úrovJe nutné ručně vypnout datovou závislost, protože je ni lze výsledný plán analyzovat. V něm vidı́me, kolik
zajištěna podmı́nka čtenı́ a zápisu z rozdı́lných mı́st. taktů potřebujı́ jednotlivé operace. Dělenı́ je náročná
Maska filtru je uložena v registrech, protože je potřeba operace na zdroje. Napřı́klad u bilaterálnı́ho filtru bylo
čı́st všechny hodnoty v jednom taktu a provést nad potřeba provést dělenı́ dvou čı́sel, kdy dělitel bylo de-
setinné čı́slo v pevné řádové čárce. Samotná operace
trvala 31 taktů.
Možnost, jak urychlit latenci je předpočı́tat si tabulku pro dělenı́. Dělitel v tomto přı́padě je 10b čı́slo,
takže celkově se jedná o 1023 možnostı́ (bez 0). Do
tabulky se uložı́ převrácená a posunutá hodnota všech
možných dělitelů. Při dělenı́ pak stačı́ načı́st hodnotu z tabulky, vynásobit dělenec a hodnotu posunout.
Výsledná operace trvá 5 taktů - jedná se o násobenı́ na
DSP. Tabulka předpočı́taných hodnot zabı́rá 1 BRAM.
Tento výpočet by šel ještě optimalizovat a použı́t i
menšı́ přesnost hodnot v tabulce.
[Pevná řádová čárka] Vivado HLS podporuje i
počı́tánı́ v plovoucı́ řádové čárce (float, double). Operace s takovými čı́sly zabı́rá ale mnoho zdrojů. Proto se
často volı́ způsob uloženı́ čı́sel do pevné řádové čárky
(fixed point). Pomocı́ bitových posunů lze provádět operace s desetinnými čı́sly velmi efektivnı́m způsobem.
[Simulace kódu v C/C++] Vivado HLS přinášı́
možnost simulovat kód na CPU pomocı́ test-bench
aplikace. Tento přı́stup přinášı́ rychlejšı́ testovánı́
navrhované komponenty. V test-bench lze využı́t i knihovnu OpenCV. Napřı́klad je možné si načı́st obrázek
a spustit referenčnı́ filtr obrazu a poté upravený algoritmus pro hardware. Vizuálně lze porovnat výsledky
obou implementacı́. Této možnosti jsem využı́val
u testovánı́ komponent pracujı́cı́ch s obrazem.
vývoje zkušeného vývojáře ve VHDL, je asi 14 dnı́
práce. Jelikož jsem s prostředı́m Vivado HLS začı́nal,
tak implementace mi zabrala vı́ce času. Odhaduji však,
že kdybych nynı́ řešil podobný problém se současnými
znalostmi, tak implementace může být do týdne hotová.
Úspora času při vývoji se zejména projevila u jednoduššı́ch komponent pro řı́zenı́ videa. V prostředı́
Vivado HLS šlo velmi efektivně vytvořit rozhranı́ AXIStream a AXI-Lite. Poté stačilo zapsat chovánı́ komponenty a syntéza automaticky provedla obsluhu těchto
protokolů.
Dalšı́ výhodou je rychlý průzkum mikroarchitektur. Vývojář si může snadno analyzovat řešenı́ a optimalizovat ho na potřebná omezenı́. Napřı́klad lze
snadno zjistit počet zdrojů v závislosti na frekvenci
u zřetězeného kódu bez modifikace vstupnı́ho algoritmu. Tabulka 2 ukazuje, že s rostoucı́ frekvencı́ obvodu roste také latence a počet zdrojů.
Tabulka 2. Závislost množstvı́ zdrojů na frekvenci
u Sobelova filtru
f [MHz] latence perioda [ns] FF
LUT BRAM
50
100
150
200
250
280
1204
1224
1228
1228
1265
1379
2
4
5
9
12
16
17.36
8.61
5.79
4.16
3.58
3.53
374
457
569
767
988
1166
4
4
4
4
4
4
5. Vyhodnocenı́ výsledků
V této kapitole jsou diskutovány výsledky implementace. Jsou zde také popsány výhody a úskalı́ použitı́
syntézy na systémové úrovni.
Jednou z hlavnı́ch výhod syntézy na systémové
úrovni je úspora času při implementaci komponent.
Napřı́klad jednoduché komponenty, které jsou použity
pro řı́zenı́ video signálu, jsou popsány v jazyce C++
velmi efektivně. Firma Xilinx prezentuje na svých
stránkách dosaženı́ až čtyřnásobné úspory času při
vytvářenı́ komponent [11].
Jelikož bilaterálnı́ filtr implementoval Ing. Martin
Musil v jazyce VHDL, měl jsem možnost porovnat
toto řešenı́ s implementacı́ ve Vivadu HLS.
Tabulka 1. Porovnánı́ Bilaterálnı́ho filtru - VHDL
implementace a HLS
FF
LUT Mem LUT BRAM DSP
VHDL 7810 7480 111
HLS 10617 9817 1158
9
10
1
2
Přesto, že se implementace mı́rně lišily (napřı́klad
v HLS bylo použito přesnějšı́ho dělenı́ s tabulkou),
tak podle tabulky je vidět, že VHDL implementace je
efektivnějšı́, co se týče spotřeby zdrojů. Odhad času
Nevýhodou použitı́ syntézy na systémové úrovni
je nemožnost mı́t návrh plně pod kontrolou. Nelze explicitně přistupovat k času při popisu v jazyce C. Nelze
také určit, které operace se provedou v daném taktu.
Rovněž může být v některých přı́padech omezujı́cı́, že
je potřeba vı́ce zdrojů.
6. Závěr
[Shrnutı́ článku] Tato práce se věnuje využitı́ syntézy
na systémové úrovni v reálné aplikaci. Čtenář se
v teoretickém úvodu dozvı́ o problematice syntézy na
systémové úrovni při návrhu a implementaci FPGA na
platformě Xilinx ZYNQ. V dalšı́ kapitole jsou popsány
jednotlivé části aplikace. V kapitole implementace
jsou popsány optimalizace, které byly použity. Při
zhodnocenı́ výsledků jsou popsány klady a nedostatky
při použitı́ syntézy na systémové úrovni.
[Výsledek práce] Cı́lem práce bylo vytvořit aplikaci v prostředı́ Xilinx Vivado. Tento úkol se mi
podařilo splnit, chovánı́ aplikace lze vidět v demonstračnı́m videu. Ukázal jsem tak na demonstračnı́ aplikaci, že lze použı́vat syntézu na systémové úrovni
v reálných aplikacı́ch a že pomáhá k efektivnějšı́mu
způsobu programovánı́ FPGA.
[Přı́nos článku] Hlavnı́m přı́nosem článku je zı́skánı́ zkušenostı́ s vývojovým prostředı́m Xilinx Vivado
HLS. Článek tak ukazuje vývojářům FPGA možnost
využitı́ jednoduššı́ho a rychlejšı́ho vývoje.
[Možnost pokračovánı́] V budoucnu lze navázat
na tuto práci a použı́t zkušenosti s prostředı́m Xilinx
Vivado HLS při implementaci dalšı́ch aplikacı́. Kromě
oblasti zpracovánı́ obrazu lze pracovat i v oblasti sı́ťového provozu nebo zpracovánı́ signálů. Zajı́mavou pracı́
by mohlo být komplexnějšı́ porovnánı́ využitých zdrojů
a času vývoje oproti klasické implementaci pomocı́
HDL jazyků nebo porovnánı́ s technologiı́ GPU.
Literatura
[1] Zemcik Pavel. Hardware acceleration of graphics
and imaging algorithms using fpgas. ACM, 2002.
[2] C. Claus, W. Stechele, M. Kovatsch, J. Angermeier, and J. Teich. A comparison of embedded
reconfigurable video-processing architectures. In
Field Programmable Logic and Applications,
2008. FPL 2008. International Conference on,
pages 587–590, 2008.
[3] Yan Han and E. Oruklu. Real-time traffic sign
recognition based on zynq fpga and arm socs.
In Electro/Information Technology (EIT), 2014
IEEE International Conference on, pages 373–
376, June 2014.
[4] J.M. Borrmann, F. Haxel, D. Nienhuser, A. Viehl,
J.M. Zollner, O. Bringmann, and W. Rosenstiel.
Stellar - a case-study on systematically embedding a traffic light recognition. In Intelligent
Transportation Systems (ITSC), 2014 IEEE 17th
International Conference on, pages 1258–1265,
Oct 2014.
[5] Sol Pedre, Tomáš Krajnı́k, Elı́as Todorovich, and
Patricia Borensztejn. Accelerating embedded image processing for real time: a case study. Journal of Real-Time Image Processing, pages 1–26,
2013.
[6] Elliott John P. Understanding Behavioral Synthesis. Kluwer Academic Publishers, 1999. ISBN:07923-8542-X.
[7] L.H. Crockett, R. Elliot, and M. Enderwitz. The
Zynq Book: Embedded Processing with the Arm
Cortex-A9 on the Xilinx Zynq-7000 All Programmable Soc. Strathclyde Academic Media,
2014. ISBN:099297870X.
[8] Xilinxt. Vivado design suite user guide highlevel synthesis, 2014. http://www.xilinx.
com/support/documentation/
sw_manuals/xilinx2014_4/
ug902-vivado-high-level-synthesis.
pdf.
[9] Musil Martin. Přenosy rastrových dat v fpga.
Master’s thesis, VUT Brno FIT, 2012.
[10] Kadlček Filip. Implementace obrazových klasifikátorů v fpga. Master’s thesis, VUT Brno FIT,
2010.
[11] Xilinx.
Accelerating
integration.
http://www.xilinx.com/products/
design-tools/vivado/integration.
html.

Podobné dokumenty

MIPS datové linky

MIPS datové linky • V tomto rozšíření mohou registry o velikosti 128 bitů uchovávat několik čísel FP, na kterých se provádějí paralelní operace FP ve stylu SIMD. • Cenou za toto další rozšíření je navýšení plochy pr...

Více

matlab Efektivní vývoj algoritmů pro platformu Xilinx Zynq v prostředí

matlab Efektivní vývoj algoritmů pro platformu Xilinx Zynq v prostředí modelů. Uživatel je tak oproštěn od manuálního zápisu algoritmů ve dvou rozdílných jazycích (jazyk C, HDL kód). Postup nasazení algoritmů je znázorněn na obr.2. Návrh hardwarové a softwarové implem...

Více

Tomas Krajnik - Research outputs Journals and Magazines Books

Tomas Krajnik - Research outputs Journals and Magazines Books • S. Pedre, T. Krajnı́k, E. Todorovich, and P. Borensztejn. Accelerating embedded image processing for real time: a case study. Journal of Real Time Image Processing, 2013.

Více

Prostředí pro spolupráci

Prostředí pro spolupráci Komunita, uživatelská podpora, http://www.ultragrid.cz CESNET Day UK 26. 5. 2016

Více

Odborná zpráva 2015

Odborná zpráva 2015 Souběžně probíhaly práce na realizaci hardwarového modulu pro konverzi signálů inkrementálního snímače na unifikovanou sběrnici. Z důvodu zvolené architektury měniče postavené na SoC Zynq bylo upuš...

Více

služby a kvalita služeb

služby a kvalita služeb BASH (Bourne-Again Shell). Pro n¥které ukázky byly vytvo°eny aplikace v jazyce C. Tyto aplikace byly stav¥ny tak, aby byly jednoduché a pokud moºno, aby kaºdá realizovala pouze ºádanou £innost. Tím...

Více