• Rezultati Niso Bili Najdeni

ImplementacijanevronskemreˇzevvezjuSoCFPGA BlaˇzMarolt

N/A
N/A
Protected

Academic year: 2022

Share "ImplementacijanevronskemreˇzevvezjuSoCFPGA BlaˇzMarolt"

Copied!
108
0
0

Celotno besedilo

(1)

Univerza v Ljubljani

Fakulteta za raˇ cunalniˇ stvo in informatiko

Blaˇz Marolt

Implementacija nevronske mreˇ ze v vezju SoC FPGA

MAGISTRSKO DELO

MAGISTRSKI ˇSTUDIJSKI PROGRAM DRUGE STOPNJE RA ˇCUNALNIˇSTVO IN INFORMATIKA

Mentor : prof. dr. Branko ˇ Ster

Ljubljana, 2021

(2)
(3)

Avtorske pravice. Rezultati magistrskega dela so intelektualna lastnina avtorja in Fakultete za raˇcunalniˇstvo in informatiko Univerze v Ljubljani. Za objavljanje ali izkoriˇcanje rezultatov magistrskega dela je potrebno pisno soglasje avtorja, Fakultete za raˇcunalniˇstvo in informatiko ter mentorja.

©2021 Blaˇz Marolt

(4)
(5)

Zahvala

Zahvaljujem se ˇzeni in druˇzini za vso podporo v ˇcasu ˇstudija. Zahvaljujem se tudi mentorju prof. dr. Branku ˇSteru za nasvete in pomoˇc pri izdelave magistrske naloge.

Blaˇz Marolt, 2021

(6)
(7)

”Brez navduˇsenja se ne da doseˇci niˇc veliˇcastnega”

— Ralph Waldo Emerson

(8)
(9)

Kazalo

Povzetek Abstract

1 Uvod 1

1.1 Sorodna dela . . . 2

2 FPGA in ZYNQ 3 2.1 FPGA . . . 3

2.2 Uporabljena orodja . . . 6

2.3 Primerjava z ASIC in GPE . . . 10

2.4 ZYBO . . . 12

3 Komunikacija med procesorjem in FPGA 17 3.1 Protokoli AMBA . . . 17

3.2 Protokoli AXI . . . 19

3.3 Testiranje protokolov AXI . . . 24

3.4 Bloˇcno naˇcrtovanje . . . 28

4 Sploˇsno o nevronskih mreˇzah 33 4.1 Umetni nevron . . . 34

4.2 Uˇcenje nevronske mreˇze . . . 35

5 Implementacija 39 5.1 Arhitektura nevronske mreˇze . . . 39

(10)

5.2 Predstavitev ˇstevil . . . 44

5.3 Uteˇzi . . . 47

5.4 Aktivacijska funkcija . . . 50

5.5 Uˇcenje nevronske mreˇze . . . 52

5.6 Avtomat za izraˇcun enega primera . . . 54

5.7 Glavni avtomat . . . 57

5.8 Priprava programa . . . 59

6 Testiranje delovanja 63 6.1 Testna problema . . . 63

6.2 Poraba virov . . . 65

6.3 Hitrost uˇcenja . . . 71

6.4 Testiranje nevronske mreˇze . . . 73

6.5 Izboljˇsave VHDL-kode . . . 78

7 Sklepne ugotovitve 81

(11)

Seznam uporabljenih kratic

kratica angleˇsko slovensko FPGA Field-programmable

gate array

Vrsta programirljivih digitalnih vezij ASIC Application-specific

integrated circuit

Namensko integrirano vezje

SoC System on chip Sistem na ˇcipu

IP core Semiconductor intellectual property core

Avtorsko zaˇsˇciten opis digitalnega vezja SDK Software development kit Paket za razvoj

programske opreme

NN Neural network Nevronska mreˇza

VHDL VHSIC Hardware Description Language

Jezik za opis strojne opreme

RAM Random acess memory Bralno-pisalni pomnilnik

ROM Read-only memory Bralni pomnilnik

CPU/CPE Central processing unit Centralna procesna enota (CPE) GPU/GPE Graphics processing unit Grafiˇcna procesna enota (GPE)

LUT Lookup table Preslikovalna tabela

BRAM Block RAM Bloˇcni RAM

FIFO First-in-First-out Prvi noter, prvi ven GPGPU General-purpose GPU Sploˇsnonamenska GPE

DMA Direct memory access Neposredni pomnilniˇski dostop RTL Register Transfer Level Registrska raven opisa

(12)
(13)

Povzetek

Naslov: Implementacija nevronske mreˇze v vezju SoC FPGA

V magistrskem delu smo implementirali nevronsko mreˇzo, sposobno uˇce- nja z algoritmom vzvratnega razˇsirjanja napake v programirljivem vezju FPGA. Delovanje nevronske mreˇze smo testirali na razvojni ploˇsˇcici Zybo podjetja Digilent. Uporabljena razvojna ploˇsˇcica vsebuje integrirano vezje Zynq-7010, ki poleg FPGA-dela vsebuje tudi procesor, ki smo ga uporabili za nadzor delovanja nevronske mreˇze in prenaˇsanje podatkov uˇcne mnoˇzice.

Nevronska mreˇza lahko izkoriˇsˇca visoko stopnjo paralelnosti, saj izraˇcuna celotno plast nevronov hkrati. Analizirali smo porabo virov in hitrost delo- vanja nevronske mreˇze ter komunikacije med FPGA in procesorskim delom.

Slabost omenjenega pristopa je v relativno visoki porabi virov.

Kljuˇ cne besede

Nevronska mreˇza, FPGA, Sistem na ˇcipu

(14)
(15)

Abstract

Title: Neural network implementation in a SoC FPGA circuit

In the master’s thesis, we implemented a neural network capable of learn- ing with the backpropagation algorithm in an FPGA integrated circuit. The neural network was tested on a Zybo development board from Digilent. In addition to the FPGA part, integrated circuit Zynq-7000 also contains a pro- cessor, which we used to control the neural network and to load the training data. The neural network can take advantage of a high level of parallelism, due to processing of the entire layer of neurons simultaneously. We analyzed the resource consumption and speed of the neural network operation, as well as the communications between the FPGA and the processor part. The disadvantage of this approach is a relatively high consumption of resources.

Keywords

Neural network, FPGA, System on chip

(16)
(17)

Poglavje 1 Uvod

Umetne nevronske mreˇze so raˇcunski modeli, ki obdelujejo podatke po vzoru ˇcloveˇskih moˇzganov. Uporabljamo jih na ˇstevilnih podroˇcjih; povsod, kjer imamo na voljo zadosti podatkov, npr. v medicini, industriji, financah in na drugih podroˇcjih. Moˇzgani omogoˇcajo visoko stopnjo paralelnosti, zato so tudi umetne nevronske mreˇze raˇcunsko zelo zahtevne. Ker je izvajanje na sploˇsnonamenskem procesorju dolgotrajno, so se sˇcasom razvili strojni pospeˇsevalniki v obliki grafiˇcnih kartic in programirljivih vezij FPGA (Fi- eld programmable gate array) [1]. FPGA je raziskovalno zanimivo podroˇcje zaradi svoje zmoˇznosti visoke paralelnosti in v primerjavi z GPE (grafiˇcna procesna enota) veˇcje energijske uˇcinkovitosti [2].

V magistrski nalogi smo se osredotoˇcili na implementacijo nevronske mre- ˇze na FPGA-vezju Zynq-7010 (na razvojni ploˇsˇcici Digilent Zybo), ki je zani- mivo, saj vsebuje FPGA del in dve procesorski jedri (ARM). Implementirali smo komunikacijo med obema deloma, pri ˇcemer je procesorski del namenjen nadzoru, FPGA-del pa procesiranju. Veˇcina pospeˇsevalnikov v objavljenih ˇclankih uporablja vnaprej izraˇcunane uteˇzi, ki jih nato prenesejo na vezje.

Mi smo implementirali tudi uˇcenje nevronske mreˇze in mreˇzo uporabili na testnem problemu.

1

(18)

1.1 Sorodna dela

V diplomski nalogi [3] avtor implementira nevronsko mreˇzo, ki je sposobna tudi uˇcenja s pomoˇcjo algoritma vzvratnega razˇsirjanja napake. Avtor naj- prej naredi simulacijo delovanja nevronske mreˇze v zmanjˇsani loˇcljivosti v okolju Matlab, implementacijo pa nato prenese na razvojno ploˇsˇcico. Imple- mentirana je sploˇsna enota, ki je sposobna narediti drevesno mnoˇzenje poda- nih 32 vhodov in uteˇzi. Sploˇsna enota je nato uporabljena za vse izraˇcune, zato je poraba virov majhna. Zaradi deljenja oz. souporabe te enote se lahko raˇcuna samo en nevron hkrati, kar pomeni, da je izvajanje in uˇcenje nevronske mreˇze ne more izkoristiti paralelnosti nevronov znotraj posamezne plasti.

V magistrskem delu [4] je avtor na razvojni ploˇsˇcici, ki je vsebovala FPGA in procesorski del, implementiral algoritem YOLO za prepoznavanje in doloˇcanje predmetov na slikah. Algoritem uporablja konvolucijske nevronske mreˇze. Uporabljen je visoko-nivojski pristop programiranja z uporabo Vi- vado HLS, v katerem lahko vezje opiˇsemo v jeziku C++. Razvojna ploˇsˇcica je sposobna samo raˇcunanja izhoda iz podanih vhodov in uteˇzi, ne pa tudi uˇcenja. Uteˇzi nauˇcenega algoritma YOLO je avtor prenesel s spleta. Primer- jali so izvajanje algoritma v FPGA, na ARM procesorju razvojne ploˇsˇcice in raˇcunalniku.

V delu [5] je avtorica implementirala binarno konvolucijsko nevronsko mreˇzo, ki uporablja samo dva bita za predstavitev ˇstevil. Operaciji mnoˇzenja in seˇstevanja se poenostavita v operaciji XNOR in ˇstetje enic v vektorju rezul- tata, kar je v vezjih FPGA lahko implementirati. Vezje je opisano v jeziku Verilog v programskem okolju Vivado. Tudi ta implementacija nevronske mreˇze vsebuje samo raˇcunanje izhoda iz podanih vhodov in uteˇzi. Uˇcenje mreˇze se izvede na raˇcunalniku, uteˇzi se nato prenesejo na vezje FPGA.

(19)

Poglavje 2

FPGA in ZYNQ

V nadaljevanju bomo predstavili tehnologijo FPGA ter jo primerjali s teh- nologijo ASIC. Predstavili bomo tudi naˇcin programiranja FPGA-dela in procesorskega dela. Opisali bomo lastnosti uporabljene razvojne ploˇsˇcice, njene vhode in izhode, ter jo primerjali z ostalimi razvojnimi ploˇsˇcicami.

2.1 FPGA

Field-programmable gate array (FPGA) je tehnologija integriranih vezij, ki jih lahko konfiguriramo za specifiˇcno uporabo. Za razliko od vezij ASIC so vezja FPGA programirljiva, kar pomeni, da jih lahko uporabnik (veˇckrat) programira. Obstajajo orodja, ki omogoˇcajo reprogramiranje tudi med delo- vanjem [6].

FPGA-del uporabljene razvojne ploˇsˇcice je sestavljen iz [7]:

• Configurable Logic Block (CLB) so majhni, regularni bloki logiˇcnih ele- mentov v dvodimenzionalnem polju in povezani z drugimi podobnimi viri preko programirljivih povezav. Vsak CLB vsebuje dve rezini.

• Slice (rezina) je pod-enota v CLB, ki vsebuje elemente za implementa- cijo kombinacijskih in sekvenˇcnih logiˇcnih vezij.

• Lookup Table(LUT) oz. preslikovalna tabela je fleksibilna enota, zmoˇzna 3

(20)

implementiranja: logiˇcne funkcije s ˇsestimi vhodi, majhnega ROM, majhnega RAM ali pomikalnega registra (ˇce vsebuje ˇse dodatne ele- mente). LUT se lahko kombinirajo skupaj, da ustvarijo veˇcjo logiˇcno funkcijo, veˇcji RAM ali veˇcji pomikalni register.

• Flip-flop (FF) je sekvenˇcni element, ki implementira enobitni register s funkcijo resetiranja. V vezjih FGPA so potrebni za kratkotrajno pomnjenje podatkov.

• Switch matrix (stikalna matrika) je struktura, ki naredi povezave med bloki CLB ali med CLB in drugimi viri v FPGA.

• Carry logic(prenosna logika) implementira izraˇcunavanje vnaprejˇsnjega prenosa (carry lookahead) za hitro seˇstevanje. Razˇsirja se vertikalno navzgor po stolpcu.

• Input / Output Blocks (IOBs) oz. vhodno-izhodni bloki so vmesniki med FPGA logiko in fiziˇcnimi napravami na razvojni ploˇsˇcici.

Izgled CLB bloka, postavitev rezin ter LUT in FF enot vidimo na Sliki 2.1. Poleg teh sestavnih delov vsebuje FPGA del ˇse dva posebna dela, ki sta zaradi njune povezanosti navadno v bliˇzini:

• Block RAM (BRAM) oz. bloˇcni RAM za pomnjenje. Vsak bloˇcni BRAM lahko shrani 36Kb podatkov in je lahko konfiguriran kot en 36Kb RAM ali dva 18Kb. Privzeta velikost besede je 18 bitov, je pa lahko RAM preoblikovan tako, da vsebuje manjˇse ˇstevilo veˇcjih ele- mentov ali pa veˇcje ˇstevilo manjˇsih elementov. Za doseganje veˇcje kapacitete pomnilnika se lahko skupaj poveˇze veˇcje ˇstevilo elementov BRAM.

• DSP48E1 se uporablja za hitre aritmetiˇcne operacije. Enota vsebuje mnoˇzilnik 25×18, 48-bitni akumulator, vzporedno (SIMD) aritmetiˇcno enoto, opcijsko logiˇcno enoto, detektor vzorcev ter razliˇcne napredne funkcije [8].

(21)

2.1. FPGA 5

Slika 2.1: Primer bloka CLB. Vir slike [7]

Zadnji trend je uporaba SoC FPGA, kar pomeni, da je na razvojni ploˇsˇcici poleg FPGA integriran tudi procesor. Integracija visoko-nivojskih funkcij in uporabe procesorja ter hitro, vzporedno procesiranje FPGA v eni sami napravi prinaˇsa ˇse moˇcnejˇso platformo za procesiranje. Poleg tega zagotavlja viˇsji nivo integracije, manjˇso porabo energije in viˇsjo hitrost komunikacije med procesorjem ter FPGA. Razvojna ploˇsˇcica ima navadno tudi velik nabor vhodov in izhodov [9].

Procesorji v SoC so lahko:

• Trdi procesorji (trdo-oˇziˇceni, hard-wired), ki so implementirani fiksno v siliciju. Taka implementacija ponuja veˇcjo procesorsko moˇc kot mehki procesor. Implementirani so samo na doloˇcenih FPGA.

• Mehki procesorji so implementirani v programirljivi logiki in upora- bljajo vire samega FPGA. Lahko se jih implementira praktiˇcno na vsa- kem FPGA. ˇStevilo mehkih procesorjev na eni napravi je omejeno z viri, ki jih ima naprava. Procesorska moˇc je navadno manjˇsa od trdega procesorja.

Uporabljeni SoC Zynq-7010 vsebuje dvojedrni trdi procesor.

(22)

FPGA se uporabljajo na ˇstevilnih raznolikih podroˇcjih uporabe. Primeri podroˇcij so letala in obramba, avdio, procesiranje slik in videa, v raziskovalnih inˇstrumentih, visoko zmogljivo procesiranje itd.

2.2 Uporabljena orodja

Pri izdelavi magistrske naloge smo uporabljali naslednja orodja in programske jezike:

• Vivado Design Suite - HLx Editions. Za programiranje FPGA-dela smo uporabili Vivado IDE, ki je integrirano razvojno okolje za sintezo in analizo HDL opisov vezij. Z njim lahko razvijamo kodo tudi za sis- teme na ˇcipu (SoC), poleg tega podpira tudi visoko-nivojsko sintezo z orodjem Vivado High-Level Synthesis (HLS). HLS je prevajalnik, ki lahko kodo v C, C++ ali SystemC direktno prevede, brez roˇcnega pi- sanja, v RTL-kodo za Xilinxove naprave.

Xilinx in njegovi partnerji imajo ˇze narejeno bogato knjiˇznjico IP (In- tellectual Property) jeder. IP jedra oz. bloki so ˇze narejena logiˇcna vezja, ki jih lahko uporabimo v svojem dizajnu in nam pohitrijo razvoj kode. IP-bloki se razlikujejo po kompleksnosti - v nekaterih je imple- mentirana samo preprosta logika, v drugih pa DMA-krmilniki, BRAM, multipleksorji ipd. Orodje Vivado nam omogoˇca tudi izdelovanje svojih IP-blokov, kar smo uporabili tudi v naˇsi magistrski nalogi [10].

• Xilinx SDK je programsko okolje, osnovano na platformi Eclipse, za ra- zvoj vgrajenih programov na Xilinxovih vezjih Zynq UltraScale+ MP- SoC, Zynq-7000 SoCs in MicroBlaze. Vsebuje urejevalnik, prevajalnik, orodje za implementacijo, orodje za upravljanje bliskovnega pomnilnika in JTAG razhroˇsˇcevanje. Programiranje je mogoˇce v jezikih C in C++

[11].

• VHDL (VHSIC (Very High Speed Integrated Circuits) Hardware De- scription Language) je strojno-opisni jezik. Opisuje strukturo in de-

(23)

2.2. UPORABLJENA ORODJA 7

lovanje digitalnega vezja. Dve glavni podroˇcji uporabe jezika VHDL so vezja FPGA in ASIC. Ko je vezje opisano, se ga lahko prenese na FPGA ali pa se ga poˇslje v tovarno, kjer ga implementirajo v tehnologiji ASIC [12].

• Matlab je visoko-nivojska programska platforma za obdelavo podat- kov, razvoj algoritmov in modeliranje, s poudarkom na numeriˇcnem raˇcunanju [13]. Uporabili smo jo v zaˇcetnih implementacijah nevron- ske mreˇze ter pri testiranju pravilnega delovanja kode v FPGA.

2.2.1 System Integrated Logic Analyzer

Pri implementaciji FPGA-vezij je poleg simulacij potrebno ˇse testiranje in iskanje napak pri delovanju vezja. Za namen iskanja napak, analize in vizu- alizacije sistema je razvitih veˇc orodij. Mi smo uporabili System Integrated Logic Analyzer (System ILA), ki se ga uporablja kot IP-blok in je ˇze prisoten v Vivadu. Bloˇcni naˇcrt je skupek IP-blokov, zunanjih vhodov in izhodov ter povezav med njimi. Z ukazomCreate HDL Wrapper iz bloˇcnega naˇcrta pri- dobimo HDL datoteko, ki jo lahko sintetiziramo, naredimo implementacijo in bitno datoteko za prenos na razvojno ploˇsˇcico. Bloˇcno naˇcrtovanje smo dodatno opisali v poglavju 3.4.

IP-blok ILA dodamo v obstojeˇc bloˇcni naˇcrt in poveˇzemo signale, ki jih ˇzelimo spremljati. Signali so vzorˇceni s frekvenco ure, doloˇcen del pa se ob sproˇzenem sproˇzilcu zapiˇse v BRAM. Zapisani podatki se preko vmesnika JTAG prenesejo v Vivado, kjer jih lahko spremljamo [14]. Orodje omogoˇca ˇze konfigurirano nastavitev spremljanja prenaˇsanja podatkov po protokolu AXI, tako da IP-blok ILA samo poveˇzemo z uro in vodilom AXI, ki ga ˇzelimo spremljati. Primer povezave bloka ILA z vodilom AXI Full vidimo na Sliki 2.2.

Uporaba orodja ILA je enostavna in priroˇcna, vendar ima tudi nekaj slabosti, zaradi ˇcesar raziskovalci pripravljajo svoja uˇcinkovitejˇsa in hitrejˇsa orodja. Razvoj podobnih orodij lahko zasledimo v delih [15] in [16]. Avtorji

(24)

Slika 2.2: Uporaba bloka ILA za analizo komunikacije med procesorjem in blo- kom AXI Full, narejenim za potrebe testiranja hitrosti prenaˇsanja podatkov.

izpostavljajo slabosti statiˇcne doloˇcitve nastavitev ter signalov, ki jih ˇzelimo spremljati. Statiˇcna doloˇcitev pomeni, da je pri nastavljanju potrebno nare- diti spremembe v IP-jedru ILA, poslediˇcno pa je potrebno ponovno izvesti celotno prevajanje projekta (sinteza, postavljanje, povezovanje, ustvarjanje bitne datoteke, prenos datoteke v SDK, ponovno prevajanje C-projekta in poˇsiljanje datoteke na razvojno ploˇsˇcico). ˇCasovna potratnost postopka je odvisna od velikosti vezja, vendar je tudi pri manjˇsih vezjih znatna.

2.2.2 Primer razvoja programa

Razvoj VHDL-kode v kombinaciji s C-kodo, ki teˇce na procesorju, zahteva veˇc korakov in precej ˇcasa. Ena sama sprememba v VHDL-kodi zahteva ponovitev celotnega postopka. Primer postopka razvoja vidimo na Sliki 2.3.

2.2.3 Kompromis med pristopom RTL in HLS

RTL (Register Transfer Level) predstavlja registrski nivo predstavitve digi- talega vezja v strojno-opisnih jezikih, kot sta VHDL in Verilog. S pomoˇcjo RTL-sinteze se koda pretvori v logiˇcno vezje. Napredni algoritmi, ki se danes

(25)

2.2. UPORABLJENA ORODJA 9

VIVADO XILINX SDK

Pisanje kode v VHDL

Sinteza

Implementacija

Generiranje bitne datoteke

Funkcionalna simulacija

Časovna simulacija

Nalaganje bitne datoteke na razvojno ploščico Programiranje v C kodi

Izvoz bitne datoteke

Izvoz HW datotek Prevajanje datotek

Nalaganje in zagon C kode na razvojni ploščici

Slika 2.3: Primer postopka razvoja VHDL kode v kombinaciji s procesorjem na razvojni ploˇsˇcici ZYBO. Koraki na levi strani slike se nanaˇsajo na Vivado, kjer se naredi izvoz bitne datoteke v Xilinx SDK, kjer nato piˇsemo v C-kodi. Xilinx SDK omogoˇca prenos bitne datoteke in zagon C-kode na razvojni ploˇsˇcici.

uporabljajo v umetni inteligenci, telekomunikacijah, medicini, itd., so vedno bolj sofisticirani. Zaradi tega je njihova implementacija vedno bolj komple- ksna in ˇcasovno vedno zahtevnejˇsa. Za pohitritev razvijanja algoritmov je Xilinx razvil orodje High-Level Synthesis, ki omogoˇca programiranje v C, C++ ali SystemC in nato direktno sintezo kode v RTL. Vseeno pa razvita koda ni optimirana za delovanje na strojni opremi. Primerljiva koda, ki bi jo napisali v VHDL, bi delovala hitreje, vendar za tako programiranje po- trebujemo znanje tako o specifiˇcnem problemu, ki ga reˇsujemo, kot tudi o strojni opremi. Zanimiv primer je primerjava algoritma za gruˇcenje, ki ga implementirajo v VHDL-kodi in v Vivado HLS. Razliˇcici porabita pribliˇzno enako virov, je pa delovanje HLS-programa 30-krat poˇcasnejˇse. Z uporabo

(26)

roˇcnih popravkov so uspeli kodo izboljˇsati tako, da je delovanje ˇstirikrat poˇcasneje. Raziskovalci so bili preseneˇceni nad rezultatom, glede na vloˇzen ˇcas za programiranje obeh razliˇcic [17].

2.3 Primerjava z ASIC in GPE

Tehnologije se med sabo razlikujejo v lastnostih, ceni, porabi energije in hi- trosti procesiranja. V nadaljevanju bomo predstavili osnovne lastnosti teh- nologij ASIC in GPE ter jih primerjali s FPGA.

2.3.1 Primerjava z ASIC

Application Specific Integrated Circuit (ASIC) so integrirana vezja, name- njena za specifiˇcno uporabo. Dizajnirana so za opravljanje ene vloge celotno ˇzivljenjsko dobo. Njihova funkcija je doloˇcena s trajnimi povezavami v sili- ciju. Naˇcrtovanje vezij ASIC je podobno naˇcrtovanju vezij FPGA, uporablja se strojno-opisne jezike, kot sta Verilog in VHDL. Primerjavo lastnosti med FPGA in ASIC vidimo v Tabeli 2.1. Sodobna vezja FPGA vedno pogosteje

Tabela 2.1: Primerjava lastnosti med FPGA in ASIC.

ASIC FPGA

ASIC vezja so stalna vezja. Ko se v tovarni zapiˇse v silicij, ni veˇc sprememb.

FPGA vezja se lahko konfigurirajo veˇckrat, lahko tudi samo posamezni deli.

Je bolj energijsko uˇcinkovit in porabi

manj energije za isto funkcijo. Porabi veˇc energije kot ASIC.

Zaˇcetni stroˇski razvoja so visoki, nato je masivna proizvodnja poceni.

Cena posamezne enote je visoka, ni primerno za masovno proizvodnjo.

Deluje na veˇcjih frekvencah, saj je bolj optimiran.

Manjˇsa frekvenca delovanja zaradi poti in konfigurabilne logike.

Ni primeren za naprave, ki se bodo v prihodnosti ˇse posodabljale.

Primeren za uporabo v napravah, saj omogoˇca nadgradnje algoritmov.

vsebujejo tudi trde bloke, kot so mnoˇzilniki in bloˇcni RAM. Namen tega

(27)

2.3. PRIMERJAVA Z ASIC IN GPE 11

je optimiranje blokov, ki jih najpogosteje uporabljamo, saj jih ni potrebno sintetizirati iz ostalih virov. Zaradi tega naj bi vezja FPGA porabila manj energije ter zmanjˇsala porabljeno povrˇsino [18].

2.3.2 Primerjava z GPE

Grafiˇcne procesne enote (GPE) (Graphics Processing Unit (GPU)), so na- sledniki obiˇcajnih video adapterjev za prikazovanje grafike na zaslonu. Posa- mezna slika je sestavljena iz tisoˇcev pik, za raˇcunanje njihovih vrednosti se uporabljajo identiˇcna jedra, ki so specifiˇcno narejena za vzporedno izvajanje veˇc funkcij. Zaradi uporabe visoko uˇcinkovitih vzporednih vezij se GPE sedaj uporabljajo tudi na drugih podroˇcjih, zato jih imenujemo sploˇsno-namenske grafiˇcne procesne enote (general-purpose GPU (GPGPU)). GPGPU lahko raˇcuna vektorske in matriˇcne operacije veliko hitreje kot CPE in pri tem porabi relativno manj energije. Tipiˇcna GPGPU lahko izvede tisoˇce arit- metiˇcnih operacij naenkrat, vendar je za uporabo teh operacij potrebno najti problem in ga ustrezno prilagoditi, da lahko uˇcinkovito uporabimo to para- lelnost.

Primerjava med FPGA in GPE je teˇzavna, saj je odvisno od primera uporabe ter uporabljene metrike. Raziskovalci ugotavljajo, da so GPE na sploˇsno hitrejˇse, vendar se jim FPGA bliˇzajo. Poraba elektriˇcne energije je pri uporabi GPE bistveno veˇcja [19, 20, 21]. Pri primerjavi delovanja FPGA in GPE na podroˇcju umetnih nevronskih mreˇz se pri FPGA pogosto uporabljajo aproksimacije (npr., zmanjˇsevanje bitne ˇsirine podatkov) zaradi omejenih virov. V delu [22] so zmanjˇsali uteˇzi na samo tri bite in primerjali delovanje FPGA z GPU. Implementacija v FPGA je bila ˇstirikrat poˇcasnejˇsa, a je porabila samo 2.5% energije grafiˇcne kartice. Primerjava lastnosti FPGA in GPE [23]:

• Arhitektura. FPGA in GPE imata popolnoma drugaˇcno arhitekturo.

GPE ima mnogo paralelno delujoˇcih procesorjev, ki omogoˇcajo hitre in paralelne izraˇcune. FPGA pa je sestavljen iz mnoˇzice digitalnih gradnikov, s katerimi lahko implementiramo kakrˇsnokoli digitalno vezje.

(28)

• Elektriˇcna uˇcinkovitost. FPGA porabi bistveno manj elektriˇcne ener- gije kot GPE, vendar je tudi poˇcasnejˇsi in manj zmogljiv.

• Procesorska moˇc. FPGA ima moˇznost reprogramiranja za implemen- tacijo poljubnih digitalnih vezij. Zaradi tega ne more biti tako dobro optimiran kot GPE.

• Periferni dodatki. FPGA se lahko poveˇze z mnogo razliˇcnimi analo- gnimi in digitalnimi napravami kot so omreˇzni vmesniki, avdio/video vmesniki, razni pretvorniki, senzorji, itd. GPE ne podpirajo priklaplja- nja drugih naprav nanje.

2.3.3 Izzivi pri programiranju v FPGA

• Omejeni viri. Raˇcunski in pomnilniˇski viri v FPGA so za shranjeva- nje uteˇzi nevronskih mreˇz premajhni. Za reˇsevanje tega problema so podatki uˇcne mnoˇzice in zaˇcetne uteˇzi kvantizirani na manjˇse ˇstevilo bitov.

• Potrebno je pazljivo naˇcrtovanje in optimizacija. Zaradi omejenih virov je potrebno bloke kode uporabiti veˇckrat in jih multipleksirati.

• Primerjava FPGA s CPE ali GPE. Nevronske mreˇze se na CPE in GPE s pomoˇcjo orodij programirajo in testirajo hitro. Razvijanje nevronske mreˇze v FPGA pa kljub morebitni uporabi HLS vseeno traja dolgo.

Razvita struktura je navadno tudi toga in jo je teˇzko spremeniti. V primerjavi z FPGA, GPE ponuja viˇsje hitrosti procesiranja in manjˇsi ˇcas razvoja algoritma [24].

2.4 ZYBO

Zybo (ZYnq BOard) je razvojna ploˇsˇcica, ˇze privzeto polna funkcij, vhodov in izhodov ter pripravljena za uporabo. Osnovana je na Xilinxovi All Pro- grammable System-on-Chip (SoC) arhitekturi, ki vsebuje dvojedrni procesor

(29)

2.4. ZYBO 13

ARM Cortex-A9 in FPGA-del Xilinx serije 7 (Slika 2.4). SoC Z-7010 oz.

Slika 2.4: Arhitektura sistema na ˇcipu Zynq. Zelena barva predstavlja proce- sorski del, rumena pa FPGA del. Na sliki vidimo povezave med obema deloma:

razˇsirjeni MIO (EMIO), sploˇsno namenski AXI vhodi (GP AXI), visoko zmogljivi AXI vhod (HP AXI), 64-bitni ACP port.

XC7Z010 je vstopna naprava z manjˇsim ˇstevilom FPGA virov [25]. Fiziˇcni izgled uporabljene razvojne ploˇsˇcice lahko vidimo na Sliki 6.3. Primerjavo XC7Z010 z ostalimi ˇcipi SoC glede na vsebnost enot FPGA vidimo v Tabeli 2.2. Glavne lastnosti uporabljene razvojne ploˇsˇcice Zybo:

• dvojedrni procesor Cortex-A9 frekvence 650 MHz,

• pomnilniˇski krmilnik DDR3 z 8 DMA kanali,

• visoko-prepustni periferni krmilniki: 1G Ethernet, USB 2.0, SDIO

• nizko-prepustni periferni krmilniki: SPI, UART, CAN, I2C

(30)

• reprogramirljiva logika, podobna Artix-7 FPGA s:

– 4400 logiˇcnimi rezinami, vsaka s 6-vhodnimi preslikovalnimi tabe- lami in 8 flip-flopi

– 240KB bloˇcnega RAMa – 80 DSP rezin

– notranja ura frekvence 450 MHz

– analogno-digitalni pretvornik na ˇcipu (XADC)

• 512MB x32 DDR3 s pasovno ˇsirino 1050 Mb/s

• vhod HDMI, ki lahko sluˇzi kot izvor ali ponor

• vhod VGA s 16 biti na piko, sluˇzi samo kot izvor

• Ethernet PHY s tremi razliˇcnimi vrednostmi delovanja (1G/100Mb/10Mb)

• reˇza za kartico MicroSD (podpira Linuxov datoteˇcni sistem)

• OTG USB 2.0 PHY podpira gosta in napravo

• zunanji EEPROM

• avdio kodek s sluˇsalkami, mikrofonom in linijo

• 128Mb serijski Flash z vmesnikom QSPI

• razvojna ploˇsˇcica omogoˇca JTAG programiranje ter pretvornik med UART in USB

• 6 tipk, 4 stikala in 5 LED-luˇck,

• 6 razˇsiritvenih prikljuˇckov Pmod (1 procesorski, 1 analogno-digitalni, 3 hitri diferencialni ter 1 logiˇcni).

(31)

2.4. ZYBO 15

Tabela 2.2: Pomembnejˇsi parametri razliˇcnih razvojnih ploˇsˇcic [26]

Naprava Z-7007S Z-7010 Z-7020 Z-7030 Z-7100

Procesor 1 x 660MHz 2 x 866MHz 2 x 866MHz 2 x 1GHz 2 x 1GHz

Logiˇcne rezine 23K 28K 85K 125K 444K

LUT 14400 17600 53200 78600 277400

FF 28800 35200 106400 157200 554800

RAM 1.8Mb 2.1Mb 4.9Mb 9.3Mb 26.5Mb

DSP 66 80 220 400 2020

(32)
(33)

Poglavje 3

Komunikacija med procesorjem in FPGA

Kot smo ˇze omenili, ˇcip na uporabljeni razvojni ploˇsˇcici vsebuje dva glavna dela. Procesorski del, ki je sestavljen iz dveh jeder ARM Cortex A9 ter FPGA-dela na osnovi serije Xilinx 7. FPGA-del omogoˇca implementacijo lastne logike, ki lahko deluje poleg programske kode, ki se izvaja na proce- sorju, ali pa v kombinaciji z njo. Najbolj oˇciten primer praktiˇcne uporabe je uporaba lastnega IP-bloka s kodo in uporaba procesorja za prenos podatkov, nadzor in spremljanje izvajanja. Tako lahko izkoristimo hitro in paralelno delovanje FPGA-dela ter sekvenˇcno procesiranje in laˇzje programiranje pro- cesorskega dela. Oba dela med sabo komunicirata prek protokola AXI. V nadaljevanju bomo predstavili protokol AMBA, iz katerega izhaja protokol AXI in njegove razliˇcne izvedenke, ter jih primerjali med sabo.

3.1 Protokoli AMBA

Advanced Microcontroller Bus Architecture (AMBA) je skupek protokolov in specifikacij vodil za komunikacijo med razliˇcnimi bloki v sistemu na ˇcipu, ki ga je razvilo podjetje ARM. Sistemi na ˇcipu so sestavljeni iz veliko razliˇcnh komponent, kot so npr. en procesor ali veˇc, notranji in zunanji pomnilnik,

17

(34)

DMA, USB, UART in lastni logiˇcni bloki. Glavna motivacija uvedbe proto- kola AMBA je bila standardizirati in poenostaviti komunikacijo med bloki ter njihovo ponovno uporabo preko razliˇcnih naprav. AMBA je odprt standard, ki se danes uporablja ne samo na sistemih na ˇcipu, ampak tudi na mnogih drugih napravah [27]. AMBA se s ˇcasom spreminja in trenutno je aktu- alna razliˇcica AMBA 5. V nadaljevanju predstavljamo razvoj in nadgradnjo protokolov:

• AMBA

ARM je predstavil protokol AMBA leta 1990. Prva protokola sta bila Advanced System Bus protocol (ASB) in Advanced Peripheral Bus pro- tocol (APB). APB se ˇse vedno uporablja za poˇcasne kontrolne prenose, saj je enostaven in porabi malo virov.

• AMBA 2

Predstavijo ga leta 1999, ko dodajo AMBA High-performance Bus pro- tocol (AHB). Protokol uˇcinkovito povezuje veˇc razliˇcnih notranjih in zunanjih naprav, tudi ˇce delujejo z visoko frekvenco ure.

• AMBA 3

Leta 2003 dodajo Advanced Trace Bus protocol (ATB), namenjen raz- hroˇsˇcevanju in sledenju, ter iz AHB naredijo ˇse AHB Lite, ki poenostavi protokol. Doda se Advanced eXtensible Interface (AXI), ki cilja na viˇsjo hitrost prenosov, z viˇsjo frekvenco delovanja. AXI se od AHB loˇci po tem, da ima veˇc kanalov, v rafalnem naˇcinu (burst) je potrebno pri AHB pri vsakem podatku podati naslov, pri AXI pa samo na zaˇcetku, AXI pa porabi tudi 50% veˇc energije [28].

• AMBA 4

V ˇcetrti generaciji, leta 2010, dodajo skupek nadgradenj protokola AXI ter njegovih izvedenk (AXI Lite in AXI Stream). Nova specifikacija cilja na hitrejˇse delovanje, predvsem pa manjˇso porabo energije [29].

• AMBA 5

(35)

3.2. PROTOKOLI AXI 19

V peti generaciji predstavijo AMBA 5 Coherent Hub Interface (CHI), ki na novo dizajnira transportni nivo za viˇsje hitrosti. Posodobijo vse razliˇcice protokola AXI in AHB. Posodobitev protokolov je posledica izboljˇsanja delovanja in skalabilnosti zaradi usklajevanja in dopolnitve AMBA CHI.

3.2 Protokoli AXI

Advanced eXtensible Interface (AXI) je najveˇckrat uporabljen del AMBA specifikacij. Protokol je sinhroniziran z uro, deluje lahko na visokih frekven- cah in je namenjan predvsem komunikaciji v sistemih na ˇcipu. Specifikacija AXI opisuje komunikacijo med enim AXI-gospodarjem in AXI-suˇznjem. Go- spodar in suˇzenj se poveˇzeta preko strukture, imenovane AXI Interconnect.

Implementacija IP-bloka AXI Interconnect omogoˇca komunikacijo med enim ali veˇc AXI-gospodarji in suˇznji. Primer IP-bloka ter povezavo enega gospo- darja z veˇc suˇznji vidimo na Sliki 3.1. AXI uporablja 5 razliˇcnih kanalov, vsi

Slika 3.1: Uporaba IP-bloka AXI Interconnect v Vivadu. Na levi strani je IP-blok procesorja Zynq, v sredini AXI Interconnect, na desni strani pa trije AXI-suˇznji.

AXI Interconnect omogoˇca prikljuˇcitev 16 suˇznjev ter 64 gospodarjev.

so med sabo neodvisni in imajo svoj par signalov za rokovanje:

• Read Address channel (AR)

(36)

• Read Data channel (R)

• Write Address channel (AW)

• Write Data channel (W)

• Write Response channel (B)

Standard podpira rafalni naˇcin, kar pomeni, da se lahko prenese veˇc podatkov po eni zahtevi in sicer najveˇc 256. Poleg nujnih signalov za delovanje vodila AXI, standard definira tudi mnoˇzico opcijskih signalov, ki se jih v dizajn vkljuˇci po potrebi, kar zmanjˇsa porabo virov ter naredi protokol uporaben na ˇsirˇsem podroˇcju. [30, 31]

V ˇcetrti generaciji AMBA predstavijo izboljˇsan protokol AXI, imenovan AXI4, ki ima tri razliˇcne vmesnike. Njihove lastnosti in moˇzen namen upo- rabe vidimo v Tabeli 3.1. Vmesnike bomo v nadaljevanju podrobno predsta- vili ter naredili praktiˇcno primerjavo.

Tabela 3.1: Primerjava razliˇcnih AXI4-vmesnikov glede na lastnosti in namen uporabe.

Lastnosti Namen

AXI Full Uporablja naslov in podatke Podpira rafalni naˇcin

Kopiranje podatkov Pomnilnik

AXI Lite Uporablja naslov in podatke Ne podpira rafalnega naˇcina

Malo podatkov Kontrolni signali AXI Stream Uporablja samo podatke

Podpira rafalni naˇcin

Video

Velike koliˇcine podatkov

3.2.1 AXI Full

AXI4 Full implementira rafalni naˇcin, kar mu omogoˇca doseganje viˇsje hitro- sti prenaˇsanaja podatkov. Dolˇzina rafalnega naˇcina je lahko med 1 in 256 prenosov [32]. Podatkovno vodilo na bralnem in pisalnem kanalu je lahko

(37)

3.2. PROTOKOLI AXI 21

ˇsirine 8, 16, 32, 64, 128, 256, 512, ali 1024 bitov (pri implementaciji Xilinx AXI IP samo 32-bitni) [33]. Omogoˇca tri tipe naslavljanja:

• FIXED: piˇse vedno na isti naslov. Podpira rafalni naˇcin velikosti od 1 do 256.

• INCR (increasing): piˇse na naslov kot prej in priˇsteje velikost prenese- nih podatkov. Podpira rafalni naˇcin velikosti od 1 do 256.

• WRAP: piˇse na naslov kot prej in priˇsteje velikost prenesenih podatkov.

Ce gre naslov ˇˇ cez doloˇceno mejo, se resetira. Podpira rafalni naˇcin velikosti od 1 do 16.

Uporaba rafalnega naˇcina pri osnovnih nastavitvah ˇse ni moˇzna. Da lahko procesor na razvojni ploˇsˇcici generira rafal, je potrebno obmoˇcje pomnilnika, v katerega piˇsemo, oznaˇciti za normalen (’cacheable’) pomnilnik. V osnov- nem naˇcinu je pomnilnik oznaˇcen kot pomnilnik naprave, kar onemogoˇca uporabo rafalnega naˇcina. Pomnilnik oznaˇcimo kot ’cacheable’ s pomoˇcjo spodnje programske kode, ki jo poˇzenemo v Xilinx SDK [34, 35]:

1 / Normal w r i t eb a c k c a c h e a b l e s h a r e a b l e /

2 #d e f i n e NORM WB CACHE 0 x15DE6

3 X i l S e t T l b A t t r i b u t e s ( XPAR BRAM 0 BASEADDR , NORM WB CACHE ) ;

Primer uporabe protokola AXI za prenos podatkov vidimo na Slikah 3.2 in 3.3. Obe sliki sta nastali z uporabo istega AXI Full IP-bloka in bloka ILA, s katerim lahko spremljamo signale protokola. Na prvi sliki je primer z osnovnimi nastavitvami pomnilnika, kjer se rafalni naˇcin ne sproˇzi. Nato smo v XILINX SDK izvedli zgornjo kodo za oznaˇcitev pomnilnika, kar omogoˇca rafalni naˇcin.

3.2.2 AXI Lite

Protokol AXI4 je namenjen uporabi v razliˇcnih napravah in vsebuje razliˇcne izboljˇsave kot so: razliˇcna ˇsirina podatkov, spreminjanje dolˇzine podatkov,

(38)

Slika 3.2: Uporaba IP-bloka ILA za analizo AXI-povezave med procesorjem Zynq ter lastnim IP-blokom AXI Full. Komunikacija poteka pri osnovnih nastavitvah pomnilika, kar pomeni, da se ne sproˇzi rafalni naˇcin. Opazimo spreminjanje signa- lovwVALIDinwREADY, to je rokovanje pred vsakim prenosom podatkov. Spreminja se tudi naslov cilja.

rafalni naˇcin, napredni predpomnilnik, zaklepanje transakcij in dostopa. ˇCe- prav na ta naˇcin prispeva k fleksibilnosti, hitrosti in uporabnosti, za doloˇcene primere ne potrebujemo vseh naprednih funkcij in ˇzelimo le implementacijo, ki deluje in porabi malo raˇcunskih in pomnilniˇskih virov. Zaradi tega ra- zloga so pri podjetju ARM dodali novo AXI razliˇcico, imenovano AXI Lite.

AXI Lite je podstandard AXI Full z odstranjenimi naprednejˇsimi reˇsitvami.

Najbolj oˇcitni razliki sta:

• Vsi dostopi na podatkovnem kanalu so lahko samo 32- ali 64-bitni (pri implementaciji Xilinx AXI Lite IP samo 32-bitni).

• Ne podpira rafalnega naˇcina prenosa.

Protokol ima odstranjen tudi velik del signalov, ki jih definira AXI Full, tako da porabi kar najmanj virov. Pri implementaciji AXI Lite IP so uporabljeni 32-bitni registri, njihovo ˇstevilo pa je omejeno na doloˇcene vrednosti med 4 in 512. Registrska zasnova delovanja AXI Lite IP je odliˇcna za uporabo protokola za osnovno prenaˇsanje podatkov, iz procesorja do FPGA in nazaj, ter nadzora delovanja. Pisanje in branje podatkov izvedemo kot pisanje ali

(39)

3.2. PROTOKOLI AXI 23

Slika 3.3: Uporaba IP-bloka ILA za analizo AXI-povezave med procesorjem Zynq ter lastnim IP-blokom AXI Full. Komunikacija poteka pri spremenjenih na- stavitvah pomnilnika, kar pomeni da se sproˇzi rafalni naˇcin. Podatki se prenaˇsajo brez vmesnega rokovanja, dokler je aktiven signal wVALIDgospodarja.

branje z doloˇcenega naslova. Primer shranjevanja poslanih podatkov gospo- darja v VHDL-kodi vidimo v nadaljevanju. V sledeˇci kodi shranimo prejeti podatek v register 0:

1 l o c a d d r := a x i a w a d d r ( ADDR LSB + OPT MEM ADDR BITS

2 downto ADDR LSB ) ;

3 i f ( s l v r e g w r e n = ’ 1 ’ ) then

4 c a s e l o c a d d r i s

5 when b ” 00000 ” =>

6 f o r b y t e i n d e x i n 0 to ( C S AXI DATA WIDTH/81) l o o p

7 i f ( S AXI WSTRB ( b y t e i n d e x ) = ’ 1 ’ ) then

8 s l v r e g 0 ( b y t e i n d e x8+7 downto b y t e i n d e x8 ) <=

9 S AXI WDATA ( b y t e i n d e x8+7 downto b y t e i n d e x8 ) ;

10 end i f ;

11 end l o o p;

3.2.3 AXI Stream

Protokol AXI stream je namenjen visokim hitrostim prenosa podatkov. Ori- entiran je na podatke, tako da se ne uporablja naslovov; poslediˇcno nima naslovnega kanala. Navadno je namen vmesnika AXI Stream povezava z DMA ter prenaˇsanje veliko koliˇcine podatkov med procesorjem in FPGA.

(40)

Komunikacija je enosmerna, kar pomeni, da vedno poteka samo v smeri od gospodarja do suˇznja [36]. ˇCe ˇzelimo dvosmerno komunikacijo, je potrebno narediti dva vmesnika, eden gospodar in drugi suˇzenj. Sirina prenosa jeˇ po standardu lahko poljubna, vendar Vivado implementira fiksno 32-bitno ˇsirino.

Implementacija je teˇzja kot pri AXI Lite in Full, saj je za delovanje po- treben DMA-krmilnik. AXI Stream je namreˇc podatkovo usmerjen in se ne more povezati direktno z blokom Interconnect, zato je potreben DMA-blok.

Osnovno implementacijo bloˇcnega naˇcrta vidimo na Sliki 3.4. Tudi imple- mentacija v SDK je teˇzja in vsebuje veˇc korakov:

1. Konfiguriranje jedra DMA 2. Inicializiranje jedra DMA

3. Nastavitev kopiranja podatkov v DMA 4. Nastavitev kopiranja podatkov iz DMA 5. Preverjanje statusa registra MM2S DMASR 6. Preverjanje statusa registra S2MM DMASR

Osnovna implementacija IP bloka v Vivadu uporablja za shranjevanje podat- kov vrsto FIFO (First In, First Out). Sama implementacija je za naˇs primer nevronske mreˇze teˇzje prilagodljiva.

3.3 Testiranje protokolov AXI

Naˇsa implementacija nevronske mreˇze v FPGA predvideva sodelovanje med procesorjem in FPGA v smislu krmiljenja nevronske mreˇze, poˇsiljanja po- datkov uˇcne mnoˇzice in nastavitev. Zaradi tega smo ˇzeleli preveriti hitrost prenaˇsanja podatkov med procesorjem ter naˇso FPGA logiko. Poleg tega smo gledali tudi porabo virov, saj jih, kot smo kasneje ugotovili, FPGA-delu razvojne ploˇsˇcice primanjkuje.

(41)

3.3. TESTIRANJE PROTOKOLOV AXI 25

Slika 3.4: Primer bloˇcnega naˇcrta z narejenim AXI Stream IP. Poleg AXI Inter- connect je potrebno uporabiti ˇse AXI DMA.

3.3.1 Testni scenarij

Testiranje protokolov AXI smo razdelili v dva dela: na majhnem ˇstevilu podatkov in na veˇcjem ˇstevilu podatkov. V obeh primerih priˇcakujemo, da bo AXI Lite imel manjˇso porabo virov kot AXI Full. Predvidevamo tudi, da bo na manjˇsem ˇstevilu podatkov hitrejˇsi AXI Lite in se bo uporaba rafalnega naˇcina in veˇc funkcionalnosti AXI Full priˇcela poznati ˇsele pri veˇcjem ˇstevilu podatkov.

Z namenom preverjanja dejanskega kopiranja podatkov v FPGA in nazaj smo v FPGA-kodi izvedli ˇse preprosto operacijo nad prejetimi podatki. Nad vsakim prejetim bajtom se izvede aritmetiˇcni pomik v levo, tako da lahko na procesorju preverimo prejete podatke oziroma ˇcakamo na podatek, dokler ni pravilen. ˇCas izvedbe aritmetiˇcnega pomika je zanemarljiv v primerjavi s ˇcasom prenosa podatkov. Naˇcin testiranja vidimo na Sliki 3.5. Merjenje preteˇcenega ˇcasa se izvaja s Xilinxovo knjiˇznico XTime L. Sledi primer merje- nja ˇcasa izvajanja, izraˇcun ˇcasa v mikrosekundah ter preteˇcenih procesorskih

(42)

Procesor AXI IP

Priprava programa Začni merjenje časa

Preveri prejete podatke Izpis pretečenega časa

Naredi preprosto operacijo nad prejetimi podatki Pošlji obdelane podatke

Slika 3.5: Zasnova testiranja.

period:

1 XTime t S t a r t , tEnd ;

2 XTime GetTime(& t S t a r t ) ;

3 // IZVAJANJE PROGRAMA

4 XTime GetTime(& tEnd ) ;

5 e l a p s e d c y c l e s = 2( tEndt S t a r t ) ;

6 e l a p s e d t i m e u s = ( tEndt S t a r t ) / ( COUNTS PER SEC / 1 0 0 0 0 0 0 ) ;

Knjiˇznica ima dostop do 64-bitnega globalnega ˇstevca v PMU (Platform Management Unit). Enota je zadolˇzena za kritiˇcne funkcije upravljanja plat- forme, kot so: zagon, konfiguracija po zagonu, topel ponovni zagon in konfi- guracija FPGA dela [37]. ˇStevec se poveˇca na vsaki dve procesorski periodi, zato je potrebno pri raˇcunanju ˇcasa to upoˇstevati [38].

3.3.2 Poraba virov Zynq

FPGA-del na SoC je omejen z viri, zato je primerna uporaba komunikacije med procesorjem in lastnim IP-blokom pomembna. Testirali smo prenaˇsanje 1024 in 128 bajtov podatkov.

Porabo virov lahko vidimo v Tabelah 3.2 in 3.3. Zaradi uporabe registrov za shranjevanje preneˇsenih podatkov je poraba pri AXI Lite v sorazmerju s

(43)

3.3. TESTIRANJE PROTOKOLOV AXI 27

ˇstevilom moˇznih prenesenih vrednosti. AXI Full po drugi strani shranjuje prejete vrednosti v BRAM; zaradi tega poraba virov ni sorazmerna s ˇstevilom podatkov, ampak je fiksna. Uporaba AXI Lite je glede na porabo virov tako smiselna v primerih manjˇsega ˇstevila prenosov, kjer je poraba ˇse manjˇsa od porabe AXI Full. Priˇcakovano je najveˇc virov porabila implementacija AXI Stream, pri kateri je potrebno za delovanje dodati ˇse IP-blok DMA.

Tabela 3.2: Poraba virov za 256 registrov pri AXI Lite oziroma 1024 bajtov za AXI Full

AXI Lite AXI Full AXI Stream Enote na voljo

LUT 3581 1621 3922 17600

LUTRAM 59 248 614 6000

FF 8594 1689 5380 35200

BUFG 1 1 1 32

BRAM 0 2 2 60

Tabela 3.3: Poraba virov za 32 registrov pri AXI Lite oziroma 128 bajtov za AXI Full

AXI Lite AXI Full AXI Stream Enote na voljo

LUT 799 1578 3922 17600

LUTRAM 60 240 614 6000

FF 1535 1637 5380 35200

BUFG 1 1 1 32

BRAM 0 1 2 60

3.3.3 Testiranje hitrosti

Testiranje hitrosti smo izvajali podobno kot na Sliki 3.5. V C-kodi smo pripravili tri tabele, dve sta vsebovali vhode ter pravilne izhode, ena pa je bila ciljna tabela za shranjevanje izhodov, z namenom testiranja, ali se podatki resniˇcno prenesejo v FPGA. V FPGA smo nad prejetimi podatki naredili

(44)

aritmetiˇcni pomik v levo, kar je ˇcasovno trivialna operacija. Podatke lahko iz procesorja prenaˇsamo v FPGA z dvema razliˇcnima funkcijama:

• Xil Inter Xil Out, iz Xilinxove knjiˇznice xil io[39].

• memcpy.

Knjiˇznicamemcpyje bolj optimirana in ponuja hitrejˇsi prenos podatkov. Upo- raba rafalnega naˇcina pri AXI Full prinaˇsa najveˇcjo pohitritev. Naredili smo 1000 ponovitev testiranja ter izraˇcunali povpreˇcni ˇcas za eno prenos. Rezul- tate testiranja vidimo v Tabelah 3.4 ter 3.5 ter na Slikah 3.6 in 3.7.

AXI Lite se po hitrosti lahko primerja samo z AXI Full brez uporabe rafalnega naˇcina. Uporaba AXI Full z rafalnim naˇcinom ali AXI Stream bistveno prispeva k hitrejˇsemu prenaˇsanju podatkov, tako pri majhnem , kot tudi veˇcjem ˇstevilu podatkov. Zanimiva je primerjava med AXI Stream in AXI Full z uporabo rafalnega naˇcina. Pri manjˇsem ˇstevilu podatkov je AXI Full hitrejˇsi, ko pa ˇstevilo podatkov poveˇcamo, pa je hitrejˇsi AXI Stream.

Pri AXI Stream je potrebno upoˇstevati ˇse inicializacijo DMA-krmilnika, ki pa jo je potrebno izvesti samo na zaˇcetku, zato je v rezultatih nismo upoˇstevali. Izmerjena poraba ˇcasa za inicializacijo je:

• Poraba urinih enot: 2766

• Poraba ˇcasa: 4,26 µs

3.4 Bloˇ cno naˇ crtovanje

Ker so FPGAji vedno veˇcji in kompleksnejˇsi, je pri razvijanju nujna uporaba IP-blokov in ponovna uporaba dizajna. Pri Xilinxu so reˇsitev poimenovali Vivado IP integrator. Z uporabo tega orodja je moˇzno narediti komple- ksne sisteme z dodajanjem in povezovanjem razliˇcnih IP-blokov iz kataloga v bloˇcni naˇcrt. Naˇcrte je moˇzno delati preko grafiˇcnega vmesnika ali program- skega vmesnika TCL (Tool Command Language) [40]. TCL je skriptni jezik, integriran v Vivado. Omogoˇca izvajanje interaktivnih poizvedb in skript.

(45)

3.4. BLO ˇCNO NA ˇCRTOVANJE 29

Tabela 3.4: Primerjava porabljenega ˇcasa in urinih period pri prenaˇsanju 256 registrov pri AXI Lite ter 1024 bajtov pri AXI Full in AXI Stream. Pri AXI Stream je pred prenaˇsanjem podatkov potrebno narediti ˇse inicializacijo DMA krmilnika.

Poraba urinih period Poraba ˇcasa [µs]

AXI Full z xil 94080 144,74

AXI Full z memcpy 64486 99,21

AXI Full z memcpy in burst 15452 23,77

AXI Lite z xil 68468 105,34

AXI Lite z memcpy 63402 97,54

AXI Stream z memcpy 6500 10,00

Tabela 3.5: Primerjava porabljenega ˇcasa in urinih period pri prenaˇsanju 32 registrov pri AXI Lite ter 128 bajtov pri AXI Full in AXI Stream. Pri AXI Stream je pred prenaˇsanjem podatkov potrebno narediti ˇse inicializacijo DMA krmilnika.

Poraba urinih period Poraba ˇcasa [µs]

AXI Full z xil 17240 25,68

AXI Full z memcpy 8652 13,31

AXI Full z memcpy in burst 2048 3,15

AXI Lite z xil 8736 13,44

AXI Lite z memcpy 8074 12,42

AXI Stream z memcpy 3596 5,53

Orodje vsebuje tudi veˇc uporabnih funkcij za hitrejˇse razvijanje:

• Block Automationsamodejno ustvari osnovni sistem,

• Connection Automation pomaga samodejno povezati vmesnike in si- gnale,

• Validate design pregleda bloˇcni naˇcrt in javi morebitne napake,

• Regenerate Layout ponovno postavi bloke v vidno polje, da dobimo boljˇsi pogled na diagram,

(46)

Fullz xilFull z memcp

y Fullz rafalom

Lite z xil

Lite z memcp

y Stream 0

20 40 60 80 100 120 140

Porabljenˇcas[µs

Slika 3.6: Graf porabljenega ˇcasa za prenaˇsanje 256 registrov ali 1024 bajtov podatkov iz procesorja do FPGA in nazaj.

• Create Hierarchyomogoˇca zdruˇzitev dveh ali veˇc blokov v enega,

• Create HDL wrapper Integracija bloˇcnega naˇcrta v naˇcrt najviˇsjega nivoja (top level),

• Izdelava lastnega IP bloka, ki ga lahko nato vkljuˇcimo v knjiˇznico.

Ker smo uporabili procesor v SoC Zynq, smo zato morali uporabiti bloˇcni naˇcrt. Za uporabo procesorja smo dodali IP-blok procesorja, imenovan ZYNQ7, funkcija Block Automation pa nam z enim klikom konfigurira procesor in doda izhode, nujne za delovanje (DDR in FIXED IO). Za komunikacijo med procesorjem in FPGA-logiko smo uporabili protokol AXI Lite, za delovanje pa je potrebno dodati ˇse bloka AXI Interconnect inRst ps7 0 100M. Upora- bljen bloˇcni naˇcrt vidimo na Sliki 6.2.

(47)

3.4. BLO ˇCNO NA ˇCRTOVANJE 31

Fullz xilFull z memcp

y Fullz rafalom

Lite z xil

Lite z memcp

y Stream 5

10 15 20 25

Porabljenˇcas[µs

Slika 3.7: Graf porabljenega ˇcasa za prenaˇsanje 32 registrov ali 128 bajtov podatkov iz procesorja do FPGA in nazaj.

(48)
(49)

Poglavje 4

Sploˇ sno o nevronskih mreˇ zah

Umetna nevronska mreˇza (artificial neural network) je model za obdelavo informacij, ki deluje po principu ˇcloveˇskih moˇzganov. Moˇzgani so sesta- vljeni iz mnoˇzice osnovnih gradnikov, ki jih imenujemo nevroni, ter povezav med njimi, ki jih imenujemo sinapse. Nevroni med seboj komunicirajo s poˇsiljanjem elektriˇcnih impulzov. ˇCe je vsota vseh signalov, ki prispejo kot vhod v nevron, veˇcja od doloˇcenega praga, pride do vˇziga nevrona, kar po- meni, da nevron na svoj izhod da signal, ki se nato poˇslje v druge nevrone, s katerimi je povezan.

Sinapse se med seboj razlikujejo v elektriˇcni prevodnosti, ki se med uˇcenjem spreminja; tako je v njih shranjeno znanje. Proces spreminjanja prevodnosti poteka od ˇzivljenja do smrti. Skrivnosti ˇcloveˇskih moˇzganov ostajajo, saj je njihovo raziskovanje za testne osebke nevarno, primerne aparature pa zelo drage [41].

Podobno kot moˇzgani so tudi nevronske mreˇze sestavljene iz velikega ˇstevila med seboj povezanih umetnih nevronov in delujejo po podobnem principu. Nevronske mreˇze so namenjene reˇsevanju toˇcno doloˇcene naloge in jih zaenkrat ˇse ne moremo primerjati z moˇzgani in vsem, ˇcesar so moˇzgani sposobni. Na doloˇcenih problemih je umetna inteligenca ˇze moˇcnejˇsa od ˇcloveka, npr. razne igre, prepoznavanje vzorcev v podatkih, prepoznavanje doloˇcenih vrst objektov, analiza velike koliˇcine podatkov, ipd. [42, 43].

33

(50)

4.1 Umetni nevron

Preprost umetni nevron ima veˇc vhodov ter izhod, s katerimi se prek povezav poveˇze z ostalimi nevroni. Vsaka povezava ima svojo uteˇz, s katero okrepi signal, ki pride na vhod nevrona. Funkcijo uˇcenja predstavljajo, podobno kot v ˇcloveˇskih moˇzganih, uteˇzi, ki okrepijo signale, preden vstopijo v nevron.

V nevronu se vse vstopne vrednosti seˇstejejo, pred zapisom na izhod pa jih poˇsljemo ˇse v aktivacijsko funkcijo, ki doloˇca konˇcni odziv nevrona na te vhodne podatke. Primer arhitekture umetnega nevrona vidimo na Sliki 4.1.

Vhodna W1 vrednost 1

Vhodna W2 vrednost 2

Vhodna WN vrednost N

SUM F Izhod nevrona

Nevron

Slika 4.1: Osnovna zgradba umetnega nevrona.

Linearno preslikovanje dobljene vsote na izhod nevrona ni najboljˇsa reˇsitev.

Nevronska mreˇza, ki uporablja preprosto linearno preslikavo, se ni zmoˇzna nauˇciti teˇzjih (nelinearnih) primerov. Navadno se sedaj za preslikovanje vsote na izhod uporabljajo funkcije kot so sigmoidna oz. logistiˇcna, tanh, ReLu, GeLu, SoftPlus, itd. Vsem funkcijam je skupna nelinearnost ter dovolj pre- prost izraˇcun odvoda, kar je bistvenega pomena pri uˇcenju [44]. Primere pogosteje uporabljenih aktivacijskih funkcij vidimo na Sliki 4.2.

Nevrone povezujemo v strukture, ki jih imenujemo nevronske mreˇze. Pri- mer arhitekture take mreˇze vidimo na Sliki 4.3. Arhitektura oz. topologija opisuje organizacijo nevronov in njihovo ˇstevilo v nevronski mreˇzi. Raˇcunanje izhoda nevronske mreˇze imenujemo inferenca, popravljanje uteˇzi pa uˇcenje.

(51)

4.2. U ˇCENJE NEVRONSKE MRE ˇZE 35

−2 −1 0 1 2

−2

−1 0 1 2

Sigmoid

−2 −1 0 1 2

−2

−1 0 1 2

ReLu

−2 −1 0 1 2

−2

−1 0 1 2

Tanh

−2 −1 0 1 2

−2

−1 0 1 2

SoftPlus

Slika 4.2: Primerjava razliˇcnih aktivacijskih funkcij.

4.2 Uˇ cenje nevronske mreˇ ze

Uˇcenje nevronske mreˇze je postopek, ki vhodom v nevrone postopoma spre- minja uteˇzi. Uteˇzi se morajo med uˇcenjem nastaviti tako, da se izhodi ne- vronske mreˇze ˇcimbolj pribliˇzajo ˇzelenim izhodom. Mreˇza se uˇci na mnoˇzici vnaprej oznaˇcenih primerov, med uˇcenjem pa posploˇsuje problem in je po tem sposobna predvideti ne samo izhode za tiste vzorce, na katerih smo jo uˇcili, temveˇc tudi vzorce, ki jih mreˇza vidi prviˇc. Kvaliteta uˇcne mnoˇzice ter ˇstevilo primerov sta za dobro napovedovanje na novih primerih kljuˇcna. Pri- pravljanje uˇcnih primerov ter njihovo oznaˇcevanje oz. anotacija je zamudno in vkljuˇcuje veliko ˇcloveˇskega dela.

Uˇcenje nevronske mreˇze je bilo zaradi kompleksnosti pogosto krivo za potisk te metode na rob raziskovanja in uporabe. Enoplastni perceptron na-

(52)

Vhodna plast Skrita plast Izhodna plast

Slika 4.3: Osnovna zgradba nevronske mreˇze z eno skrito plastjo.

mreˇc ni bil zmoˇzen reˇsiti teˇzjih (nelinearnih) problemov, kot je npr. problem uˇcenja na logiˇcno funkcijo Ekskluzivni-ALI oz. XOR. Za veˇcplastni percep- tron pa ni bilo dovolj enostavne in hitre metode uˇcenja. Najveˇcji premik pri uporabi se je zgodil v 80. letih, ko so odkrili metodo vzvratnega uˇcenja [45] in nevronske mreˇze so se nato zaˇcele mnoˇziˇcno uporabljati. Danes na ˇstevilnih podroˇcjih nevronske mreˇze presegajo ostale metode.

4.2.1 Algoritem vzvratnega razˇ sirjanja napake

Algoritem vzvratnega razˇsirjanja napake je verjetno najpomembnejˇsi del ne- vronskih mreˇz. Uporabljamo ga za uˇcinkovito uˇcenje z metodo, imenovano veriˇzno pravilo. Po vsaki fazi raˇcunanja izhoda na osnovi razlike do ˇzelenega izhoda izraˇcunamo napako ter naredimo ˇse fazo vzvratnega popravljanja uteˇzi. Mreˇza najprej popravi uteˇzi v izhodni plasti, nato pa z upoˇstevanjem ˇze izraˇcunanih delov gradienta napake po uteˇzeh v viˇsji plasti mreˇza po- pravi uteˇzi v skriti plasti oz. veˇc skritih plasteh. Algoritem popravlja uteˇzi od izhoda proti vhodu, zato mu pravimo vzvratni algoritem [46]. Princip

(53)

4.2. U ˇCENJE NEVRONSKE MRE ˇZE 37

delovanja algoritma vzvratnega razˇsirjanja vidimo na Sliki 4.4.

Izhodni

nevron 1 Izhodni

nevron2

Skriti nevron 1 Skriti nevron 2 Skriti nevron 3

Izračun napake

Popravljanje uteži na tem nivoju

Izračun napake

Popravljanje uteži na tem nivoju

Vhod 1 Vhod 2

Izhod 1 Izhod 2

Slika 4.4: Potek delovanja algoritma vzvratnega razˇsirjanja.

(54)
(55)

Poglavje 5

Implementacija

Cilj izdelave nevronske mreˇze je bil predvsem v ˇcimbolj sploˇsni arhitekturi, oziroma, da bi lahko s ˇcimmanj popravki spremenili arhitekturo nevronske mreˇze. Pri uporabi je zaˇzeleno, da se nadzor delovanja nevronske mreˇze, doloˇcanje vhodov in ˇzelenih izhodov mreˇze, izbira uˇcenja ali testiranja iz- vaja na procesorju. Kajti vsaka sprememba v VHDL-kodi zahteva ponovno prevajanje VHDL-kode, ki je ˇcasovno zahtevno.

V tem poglavju bomo predstavili razliˇcne moˇznosti arhitekture nevronske mreˇze v FPGA ter njihove prednosti in slabosti. Predstavili bomo tudi ostale dele nevronske mreˇze in njihovo implementacijo.

5.1 Arhitektura nevronske mreˇ ze

Implementacija nevronske mreˇze v FPGA terja razmislek o porabi virov in uporabi paralelnosti. Arhitektura nevronske mreˇze pri tem igra bistveno vlogo, zato v nadaljevanju predstavimo razliˇcne moˇznosti implementacije [47].

5.1.1 Uporaba fiksne mreˇ ze

Uporaba fiksne topologije mreˇze je prvi poskus implementacije nevronske mreˇze. Ideja je narediti fiksno mreˇzo, kjer naredimo strukturo nevrona kot

39

(56)

svojo entiteto ter mu dodelimo fiksno velikost vhodov in izhodov. Nevron ima svojo logiko za mnoˇzenje in seˇstevanje ter preslikovalno tabelo za aktivacijsko funkcijo. Entiteto nato z uporabo konstrukta GENERATE v VHDL-kodi ustrezno namnoˇzimo ter poveˇzemo v fiksno nevronsko mreˇzo. Skico take nevronske mreˇze vidimo na Sliki 5.1.

Vhodi Izhodi

Vhodi

Slika 5.1: Implementacija fiksne nevronske mreˇze.

Fiksna nevronska mreˇza je enostavna za implementacijo, saj poleg entitete nevrona ne vsebuje dodatne logike. Izvajanje je hitro, celotna plast nevronov se izraˇcuna paralelno. Takoj ko se raˇcunanje plasti zakljuˇci, se lahko priˇcne raˇcunanje naslednje, saj ne vsebuje nobenih multipleksorjev ali avtomatov za preklop stanja.

Implementacija je zaradi koliˇcine entitet nevrona, ki vsebuje lastno logiko za mnoˇzenje in seˇstevanje ter preslikovalno tabelo, potratna pri porabi virov.

Na uporabljeni razvojni ploˇsˇcici je moˇzno narediti samo majhno nevronsko mreˇzo brez uˇcenja, samo inferenco. Izgled strukture take implementacije nevronske mreˇze v VHDL vidimo na Sliki 5.2.

(57)

5.1. ARHITEKTURA NEVRONSKE MRE ˇZE 41

Slika 5.2: Implementacija fiksne nevronske mreˇze v programskem okolju Vivado.

5.1.2 Uporaba sploˇ snega nevrona

Naslednja moˇzna implementacija nevronske mreˇze uporablja sploˇsno entiteto nevrona. Podobno kot prej naredimo entiteto nevrona, ki ima fiksno doloˇceno ˇstevilo vhodov in izhodov, svojo logiko za mnoˇzenje in seˇstevanje vhodov ter lastno preslikovalno tabelo za aktivacijsko funkcijo. V nasprotju s prejˇsnjim pristopom tukaj ne naredimo veˇcjega ˇstevila kopij te entitete, ampak imamo samo eno instanco. Entiteti nato z multipleksorji in uporabo avtomatov doloˇcamo vhode in uteˇzi, s katerimi naj raˇcuna. Primer take arhitekture vidimo na Sliki 5.3.

Slabost take implementacije je neuporaba paralelnosti, ki jo ponuja FPGA.

Ko se mnoˇzenje in seˇstevanje vhodov in uteˇzi za en nevron zakljuˇci, je po- trebno rezultat shraniti ter zamenjati vhode in uteˇzi za naslednji nevron.

Pri programiranju je potrebno narediti veˇc logike. Prednost tega pristopa je majhna poraba virov, hiba pa poˇcasnost.

Podoben pristop uporabijo v [3]. V delu implementirajo eno enoto, ime- novano ALE, ki predstavlja entiteto nevrona. Z uporabo multipleksorjev dodelijo enoti vhode in uteˇzi. Izraˇcun izhoda enega nevrona se izvede v dveh urinih periodah. V prvi se izraˇcuna novo stanje nevrona, v drugi pa se izvede shranjevanje rezultata. Nevronska mreˇza, ki vsebuje 8 nevronov na skriti plasti ter 10 izhodnih nevronov, izraˇcuna izhod mreˇze v 36 urinih periodah. Najviˇsja frekvenca delovanja je zaradi velikega ˇstevila mnoˇzenj in seˇstevanj v eni urini periodi omejena na 23MHz.

(58)

Splošni nevron

Vhodi

MUX

Splošna plast

Vhodi Izhodi

Slika 5.3: Implementacija sploˇsnega nevrona.

5.1.3 Uporaba sploˇ sne plasti

Pristop uporabe sploˇsne plasti zdruˇzuje ideje obeh prejˇsnjih naˇcinov. Naredi se entiteta plasti, ki vsebuje najveˇcje ˇstevilo nevronov, le-to pa se fiksno im- plementira v FPGA. Ta plast je nato uporabljena za vsako plast v nevronski mreˇzi z uporabo avtomatov in multipleksorjev, ki poskrbijo za pravilne vhode in uteˇzi za celotno plast. Po doloˇcenem ˇcasu na izhodu dobimo izraˇcunane izhode nevronov celotne plasti. Arhitekturo vidimo na Sliki 5.4. Primer arhitekture entitet v FPGA pa vidimo na Sliki 5.5.

Prednost uporabe tega pristopa je izraba paralelizma, saj se celotna plast nevronov izraˇcuna istoˇcasno. Slabost je viˇsja poraba virov, kar nam one- mogoˇca implementacijo veˇcjega ˇstevila nevronov v posamezni plasti; poraba je v najveˇcji meri odvisna od ˇstevila nevronov v plasti in ne od ˇstevila plasti.

ˇStevilo plasti je lahko pri tem primeru veliko.

(59)

5.1. ARHITEKTURA NEVRONSKE MRE ˇZE 43

Nevron 1

Vhodi

MUX

Splošna plast

Vhodi Izhodi

Nevron 2

Nevron 3

Nevron N

Slika 5.4: Implementacija nevronske mreˇze z uporabo sploˇsne plasti.

Implementacija je podobna kot v delu [48]. Uspeli so implementirati sploˇsno plast, ki je vsebovala 40 nevronov, vendar so imeli na razpolago bolj zmogljiv FPGA, ki je vseboval ˇstirikrat veˇc virov. Implementirali so inferenco, uˇcenje pa je potekalo na raˇcunalniku.

5.1.4 Implementacija sploˇ sne plasti

V magistrskem delu smo se odloˇcili za uporabo arhitekture sploˇsne plasti za implementacijo nevronske mreˇze. Entiteto, ki izraˇcuna inferenco mreˇze, vidimo na Sliki 5.6. ˇStevilo vhodov v entiteto se spreminja sorazmerno s ˇstevilom plasti mreˇze, bitna ˇsirina pa se spreminja sorazmerno z maksimalnim ˇstevilom nevronov v plasti in bitne ˇsirine ˇstevil. Izhod entitete je rezultat izraˇcuna vseh nevronov. Vhodi v entiteto so:

(60)

Slika 5.5: Arhitektura nevronske mreˇze v FPGA z uporabo sploˇsne plasti. Mreˇza vsebuje 5 plasti in 2 nevrona v posamezni plasti.

• Clk; urin signal.

• Enable; sproˇzi raˇcunanje izhodov.

• Sel; kontrolni signal v multipleksorju. Izbere plast, ki jo trenutno raˇcunamo.

• st nevronov v nivoju [0-7]; tabela vektorjev, kjer je shranjeno de- jansko ˇstevilo nevronov v doloˇceni plasti.

• W; vektor uteˇzi za trenutno plast, ˇsirina vhoda je odvisna od ˇstevila nevronov v plasti ter ˇzelene bitne ˇsirine uteˇzi.

• X [0-2]tabela vektorjev, ki vsebuje vhodne vrednosti. ˇStevilo vektor- jev je odvisno od ˇstevila plasti, ˇsirina je odvisna od ˇstevila nevronov v plasti ter ˇzelene bitne ˇsirine.

ˇStevilo in ˇsirina vhodov je v vseh entitah vezana na generiˇcne parametre (GENERIC), ki jih nastavljamo v glavni datoteki. ˇCasovna zahtevnost izaˇcuna plasti ni odvisna od ˇstevila nevronov v plasti, ampak je fiksna. Po signalu za zaˇcetek raˇcunanja se po ˇstirih urinih periodah na izhodu pojavijo rezultati za celotno plast, zdruˇzeni v en vektor.

5.2 Predstavitev ˇ stevil

Zmanjˇsevanje ˇstevila bitov je potrebno zaradi omejitve virov in hitrejˇsega procesiranja, zato so uteˇzi in vhodi v nevrone kvantizirani. Raziskovalci v veˇc

(61)

5.2. PREDSTAVITEV ˇSTEVIL 45

Slika 5.6: Entiteta sploˇsne plasti v Vivadu, ki poskrbi za izraˇcun izbrane plasti.

Implementacija na sliki omogoˇca uporabo ene skrite plasti ter dveh nevronov v plasti z uporabo 16-bitne natanˇcnosti.

delih ugotavljajo, da z zmanjˇsevanjem bitne ˇsirine ˇse vedno dobimo solidne rezultate pri nevronskih mreˇzah [49, 50], poraba virov, hitrost procesiranja in poraba elektriˇcne energije pa se izboljˇsajo.

Stevila so v naˇsem primeru predstavljena kot [Bˇ −F, F], pri ˇcimer je F ˇstevilo bitov desno od vejice, B pa je ˇstevilo vseh bitov ali bitna ˇsirina.

Implementacija nevronske mreˇze omogoˇca enostavno spreminjanje obeh pa- rametrov z uporabo generiˇcnih parametrov. Potrebna je nova sinteza, imple- mentacija in prenos bitne datoteke v ˇcip.

V nadaljevanju vidimo algoritem za pretvorbo ˇstevil med dvojiˇsko kodo v zmanjˇsani natanˇcnosti in desetiˇsko kodo, zapisan v okolju Matlab. Pretvar- janje ˇstevil se v programu Matlab uporablja z namenom testiranja pravilnega delovanja.

1 t o b i n ( f )

2 f s = f b i t s h i f t ( 1 , F ) ; % pomik v l e v o z a F

3 b = i n t 3 2 ( f s ) ;

4

(62)

5 t o d e c ( b )

6 f = d o u b l e ( b ) / b i t s h i f t ( 1 , F ) ;

Npr., pri F = 8 zapiˇsemo 1,0 kot 256, 3,24 pa kot 829.

Pri mnoˇzenju v fiksni vejici je potrebno produkt pomakniti za F bitov v desno. Ker s tem izgubimo najniˇzjih F bitov, preverimo, ali je najviˇsji izpadli bit sluˇcajno 1 - v tem primeru zaokroˇzimo navzgor, da ne izgubimo prehitro gradienta:

1 prod = b i t s h i f t ( ab , F ) ;

2

3 i f prod == 0

4 i f b i t s h i f t ( ab , F+1) == 1

5 prod = 1 ;

6 end

7 end

Npr., pri F = 4 mnoˇzimo 0,0010 (1/8) in 0,0100 (1/4). V desno pomaknjen produkt je 0,00001 (1/32), vendar je enica ˇze izven natanˇcnosti F = 4.

Zaokroˇzimo navzgor na 0,0001 (1/16).

Podobno storimo v primeru, ˇce je produkt zelo majhen negativen in po pomiku v desno dobimo same enice, kar pomeni −1 v dvojiˇskem komple- mentu. Tudi v tem primeru preverimo, ali je najviˇsji izpadli bit enica, kar pomeni, da je negativno ˇstevilo vsaj pol manjˇse od zadnjega mesta in ga v tem primeru zaokroˇzimo na 0. V Matlabovi kodi sicer preverimo niˇcle namesto enic, saj gledamo komplement produkta (−a∗b):

1 i f prod == 1 && ab < 0

2 i f b i t s h i f t ( ab , F ) == 0

3 i f b i t s h i f t ( ab , F+1) == 0

4 prod = 0 ;

5 end

6 end

7 end

Npr., pri F = 4 produkt ...1,11111 zaokroˇzimo na 0.

(63)

5.3. UTE ˇZI 47

5.3 Uteˇ zi

Uteˇzi in vhodi v nevrone v implementaciji nevronske mreˇze so kvantizirani in uporabljajo manjˇse ˇstevilo bitov, da je implementacija v FPGA sploh moˇzna. Za njihovo shranjevanje smo uporabili bloˇcni RAM (BRAM), vendar je zaradi izbrane arhitekture sploˇsne plasti ˇsirina posameznega zapisa dolga.

Implementacijo vidimo na Sliki 5.7. ˇStevilo vnosov v RAM je enako ˇstevilu plasti nevronske mreˇze. Maksimalno ˇstevilo uteˇzi v posamezni plasti je enako:

NW,max =Nmax·(Nmax+ 1), (5.1) kjer je Nmax maksimalno ˇstevilo nevronov v plasti. Bitna ˇsirina bloˇcnega RAMa je enaka

NW,max·B . (5.2)

Primer shranjenih uteˇzi vidimo na Sliki 5.8. Nevronska mreˇza, ki uporablja tak primer shranjevanja, je arhitekture 2-4-2. Maksimalno ˇstevilo nevronov v plasti za ta primer je 4, kvadratki, ki so prazni, pa predstavljajo manjkajoˇce povezave. Z uporabo take arhitekture shranjevanja je lahko implementirati tudi mreˇzo, ki ni polno povezana.

Slika 5.7: Implementacija BRAMa za shranjevanje uteˇzi.

Reference

POVEZANI DOKUMENTI

Na osnovi pred- postavke, da je odstotek razpada tanke plasti v tem obmo~ju enak kot pri kserogelu (34,5 %), lahko izra~unamo za~etno maso tanke plasti, masno raz- merje med podlago

Kot lahko vidimo AES- -NI izvaja šifriranje in dešifriranje skoraj brez razlike da so izboljšave med hitrostjo delovanja programske pri dešifriranju.. - fikona lahko razberemo

Med izvajanjem moje implementacije sistema za dostavo odmerka pro- tonskega ˇ zarka, lahko pride do ˇstirih glavnih dogodkov: sistem lahko prejme recept o pacientu, pripeti se

ˇ Ce upoˇstevamo samo njegovo projekcijo na mreˇ znico oziroma zorni kot pod katerim vidimo avtomobil, to ˇse ni dovolj, da ga zaznamo kot konstanten, nespreminjajoˇ c objekt, saj

Iz trditve, ki je analizirana v Tabeli 15: Zaradi obveznosti ki jih imam, otrok pogosto sam gleda televizijo, lahko vidimo, da je krivec za redkeje

Definicijo OBK kot razlike med kratkoročnimi sredstvi in kratkoročnimi obveznostmi do virov sredstev zavrnejo kot manj primerno, saj definicija vključuje elemente poslovnega

V Tabeli 6, ki prikazuje razporeditev prispevkov glede na to, kako avtor posredno ali neposredno vrednoti brezdomstvo, vidimo, da avtorji v časopisu Kralji ulice

Religiozno zavest lahko razumemo kot posebno obliko družbene zavesti, ki zahteva svojevrsten odnos do sveta kot celote, zato domnevamo, da je popolna potopitev nosilca take zavesti