SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA DIPLOMSKI RAD br. 1535 Implementacija algoritma očuvanja radne anvelope vjetroagregata potpomognuta programirljivim logičkim poljima Josip Kovačević Zagreb, lipanj 217.
Zahvala: Zahvala mentoru, doc. dr. sc. Mariju Vašku, za podršku bez koje ovog rada ne bi bilo. Također, zahvaljujem asistentu Nikoli Hureu, koji je strpljivo trpio moja bezbrojna pitanja i probleme. Naposljetku zahvaljujem svojim roditeljima, bratu i prijateljima na podršci kroz proteklih pet godina, napornih, ali zabavnih.
Sadržaj 1. Uvod... 1 2. Algoritam korekcije upravljačkog signala... 3 2.1. Dvodimenzionalni problem pronalaska najbliže točke na politopu... 4 3. Tehnologije... 6 3.1. Razvojna pločica... 6 3.2. System Generator... 7 3.3. MicroBlaze... 8 3.3.1. Brzina izvođenja nekih osnovnih operacija... 9 4. Aritmetika... 11 4.1. Ekstremi evaluacije... 12 4.2. Propagacija greške... 13 4.3. Predobradba... 15 5. Specijalizirano sklopovlje... 16 5.1. Izračun H reprezentacije politopskog skupa dozvoljenih upravljačkih signala.. 16 5.1.1. Brzina protoka podataka... 17 5.2. Pristup izračunatim podacima u sklopovlju... 18 5.3. Sklop za provjeru pripadnosti točke politopu... 19 5.4. Kalkulator udaljenosti točke od politopa... 2 5.4.1. Sortirajuća ćelija... 21 5.4.2. Operacijski takt sortirajuće ćelije... 23 5.5. Sklop za rješavanje jednodimenzionalnog problema najbliže točke na politopu 25 6. Programski dio... 28 6.1. Upravljački programi... 28 6.2. Skaliranje... 29 6.3. Utjecaj pogreške zaokruživanja... 29
6.4. Eksperimentalno utvrđene brzine izvođenja... 3 7. Rezultati... 31 8. Zaključak... 41 9. Literatura... 42 Sažetak... 43 Summary... 44 Privitak... 45
1. Uvod Kompleksni dinamički sustavi, svakodnevno izloženi nepredvidljivom okolišu, mogu imati vrlo stroga ograničenja nametnuta na njihove varijable, pri čemu kršenje tih ograničenja dovodi do velike tehničke ili ekonomske štete. Takve sustave potrebno je što bolje zaštititi, odnosno čuvati njihovu radnu anvelopu. Vjetroagregati pri pokretanju i zaustavljanju trpe veliko mehaničko opterećenje koje može dovesti do teških oštećenja konstrukcije. Smanjivanje učestalosti takvog pokretanja i zaustavljanja produžuje životni vijek vjetroagregata, čime rješavanje tog problema dobiva na važnosti. Iako uvijek može doći do nepredviđenih kvarova, sustav unutar granica sigurne operacije možemo održavati korekcijom upravljačkog signala dodatnim zaštitnim algoritmima. Jedan je od njih algoritam korekcije upravljačkog signala koji koristi unaprijed izračunat upravljački invarijantni skup dinamičkog sustava sa zadanim ograničenjima kako bi se odredio skup dozvoljenih upravljačkih signala regulatora. U slučaju izlaska iz navedenog skupa upravljački signal vraća se na najbližu točku u skupu čime se izbjegava procedura zaustavljanja vjetroagregata. Upravljački invarijantni skup generiran je offline računom uz pretpostavljeni robustan model vjetra, pa dodatna instrumentacija poput LIDAR-a za estimaciju nadolazećeg vjetra nije potrebna. Algoritam zaštite odnosno korekcije upravljačkog signala koji se odvija online zahtijeva mnogo jednostavnih matričnih operacija nad generiranim skupom koje su pogodne za paralelizaciju što upućuje na korištenje programirljivih logičkih polja za realizaciju istog. Programirljiva polja logičkih blokova (engl. Field programmable gate array FPGA) digitalni su sklopovi dizajnirani za konfiguraciju, nakon proizvodnje, od strane korisnika. FPGA se sastoji od niza programabilnih logičkih blokova (engl. Configurable logic block CLB) koji se pak sastoje od velikog broja jednostavnijih komponenata. Temeljni dijelovi pojedinog bloka su programirljiva pregledna tablica (engl. Lookup table - LUT) i D-bistabil. FPGA ima mnoge odlike, među ostalim brzo prototipiranje specijaliziranog sklopovlja, vrlo velika paralelizacija operacija na čipu, mogućnost implementacije mikroprocesora za kontrolnu logiku. Sve od navedenih stavki iskorištene su pri razvoju algoritma u ovom radu. 1
Cilj je rada ostvariti algoritam zaštite, odnosno korekcije upravljačkog signala korištenjem Spartan3A čipa i sekvencijalnog procesora, te usporediti performanse dobivene implementacije s idealnom implementacijom simuliranom u MATLABu. Uspoređena je performansa pri punoj double preciznosti sa 16-bitnom aritmetikom s fiksnim zarezom te je provedena analiza rezultata za različite vrijednosti tolerancije greške. Provedena je i usporedba s 15-bitnom preciznosti brojeva, ali algoritam u tom slučaju rijetko ili nikada ne daje ni približne rezultate, stoga je nije potrebno ni spominjati. U drugom poglavlju predstavljen je algoritam za očuvanje radne anvelope vjetroagregata. Korištene tehnologije predstavljene su u trećem poglavlju. U četvrtom su poglavlju opisani aritmetički problemi i njihovo rješavanje prilikom implementacije. Specifični pomoćno sklopovlje opisano je u petom poglavlju. Poglavlje 6 pokazuje programski dio rješenja, od korištenja specijaliziranog sklopovlja do skaliranja ulaznih operanada kako bi se ispravila aritmetika. U posljednjem poglavlju prikazane su grafičke usporedbe nekoliko razvijenih implementacija i idealne implementacije u MATLAB programskom okruženju. 2
2. Algoritam korekcije upravljačkog signala Radna anvelopa sustava upravljanja proizlazi iz specifikacija ili iz fizičkih i sigurnosnih svojstava upravljačkog sustava. Za skup korišten u ovom radu ograničenja su prikazana u tablicama 1 i 2. Spajanjem ograničenja dobivamo ograničenja na varijable stanja sustava i ograničenja na upravljačke varijable. Cijeli prostor je unutar zadanih ograničenja stoga definiran s iz čega možemo dobiti najveći mogući upravljački-invarijantan skup (skup stanja sustava za koje postoji upravljački signal koji će zadržati sustav unutar ograničenja u budućnosti). Konveksan skup formira politop ograničeni skup formiran presjecanjem konačnog broja poluprostora. Izračun upravljački-invarijantnog skupa rezultira skupom i pripadnim prostorom stanja, [ ] U zatvorenoj upravljačkoj petlji skup sadrži, za svaki vektor stanja sustava, skup dozvoljenih vrijednosti upravljačkog signala. Dalje u radu [ ] - predstavlja lijevu stranu ograničenja politopa, - predstavlja desnu stranu ograničenja politopa, - predstavlja lijevu stranu ograničenja politopa, - predstavlja desnu stranu ograničenja politopa dobivenu jednadžbom. Varijabla Ograničenje 9[ ] 11[ /s] 313[rpm] 353.68[Nm] 1 1 7 [Nm] 3 1 6 [Nm] Tablica 1 Ograničenja sustava donja granica varijabli je [1] Varijabla Ograničenje 11[ /s] 773.6[Nm/s] Tablica 2 Ograničenja upravljačkih varijabli [1] 3
Ovisno o broju iteracija algoritma za izračun upravljački-invarijantnog skupa možemo ostvariti različitu točnost aproksimacije istog skupa. Većim brojem iteracija postiže se bolja aproksimacija ali se usložnjava opis upravljački-invarijantnog skupa te potrebna memorija za njegovu pohranu. Stoga je za realizaciju sustava zaštite koji se zasnivaju na izračunatom upravljački-invarijantnom skupu potrebno ostvariti kompromis između točnosti algoritma zaštite i jednostavnosti realizacije algoritma. U ovom radu koristi se skup s 12 ravnine, no o tome više u poglavlju 3. Pri svakom pozivu algoritma potrebno je riješiti problem pronalaska najbliže točke u dvodimenzionalnom politopu (engl. two dimensional closest admissible point problem 2DCAPP) tj. za vektore (stanje sustava) i [ ] pronaći vektor [ ] gdje je skup upravljačkog signala za koji sustav ostaje unutar zadanih ograničenja. Metodi 2DCAPP prosljeđujemo H-K reprezentaciju politopa i točku. 2.1. Dvodimenzionalni problem pronalaska najbliže točke na politopu 2DCAPP problem možemo podijeliti u 3 slučaja kao na slici. Slika 1. Mogući odnos točke i politopa [1] a) Ovaj slučaj je trivijalan. Dovoljno je provjeriti vrijedi li. b) Ako je gornja nejednadžba prekršena računamo udaljenost upravljačkog signala i politopa. Znamo da je rješenje na onoj ravnini koja je najudaljenija od točke. 4
označava i-ti red u matričnoj reprezentaciji skupa. Tražimo projekciju točke na najudaljeniju ravninu jednadžbom označava indeks najudaljenije ravnine. c) Pronalazak najbližeg vrha može se efikasno riješiti kao 1DCAPP pomoću sljedećih jednadžbi [ ] [ ] Gdje je kao i prije, najbliža ravnina dok su ostale. Korištenjem [ ] i [ ] dobivamo Iz čega slijedi te. [ ], Ako rješenje nije pronađeno u jednoj iteraciji (zbog redundantnih ravnina), algoritam se ponavlja za sljedeću najudaljeniju ravninu. Algoritam ima i strogo vremensko ograničenje od 1 ms. 5
3. Tehnologije 3.1. Razvojna pločica Korišten je Digilent Spartan 3A Starter Kit kao na slici, koji nažalost više nije u prodaji. Na razvojnoj se pločici osim FPGA-e nalaze i SPI Flash memorija, RS232 serijski port, DDR2 SDRAM itd. Slika 2. Digilent Spartan 3A Starter Kit FPGA korištena u radu je XC3S7A, čije su specifikacije navedene na sljedećoj slici. Slika 3. Specifikacije sklopa Spartan3 [2] Iako je nekad bio FPGA srednje klase, taj čip sada bi pripadao nižoj, ili čak i niskoj klasi. U ovom radu čip je gotovo potpuno iskorišten (99 %), što se može vidjeti u privitku. 6
3.2. System Generator Xilinx system generator je alat koji se može integrirati s MATLAB-ovim Simulinkom i koji u Simulink dodaje razne Xilinxove komponente i mogućnost sinteze sklopovlja. Za korištenje tog alata potrebni su MATLAB i Xilinx ISE kompatibilan s njime. U ovom radu korišteni su MATLAB R213a i Xilinx ISE Design Suite 14.5. Sama instalacija alata nije komplicirana. Potrebno je prvo instalirati MATLAB, a zatim ISE, te prije prvog pokretanja konfigurirati System Generator, koji bi sam trebao pronaći instalaciju MATLAB-a te je ponuditi kao opciju. Slika 4. System generator pronalazi instalaciju MATLABa Ako je konfiguracija uspjela pokretanjem System Generatora te Simulinka, na popisu komponenata trebao bi se pojaviti Xilinx Blockset. Xilinx Blockset sadrži komponente napisane za FPGA-u. Popis svih komponenata moguće je otvoriti pritiskom na Index, a dokumentaciju za svaku komponentu desnim klikom na pojedinu komponentu te lijevim klikom na Help for... 7
Slika 5. Indeks svih Xilinx komponenata Osim već ostvarenih komponenti, System generator omogućava simulaciju komponenata koje su opisane VHDL kôdom. Također je moguće iz MATLAB kôda izgenerirati VHDL.[3] Nakon simulacije ostvarenog sklopovlja ono je izvezeno iz MATLAB-a i uvezeno u Xilinx XST, koji omogućava povezivanje vlastite komponente s MicroBlaze mikroprocesorom. 3.3. MicroBlaze MicroBlaze je 32-bitni mikroprocesor baziran na arhitekturi Harvard Reduced Instruction Set (RISC), što znači da ima odvojene podatkovne i instrukcijske sabirnice. Mikroprocesor je soft processor što znači da je posve implementiran na logici FPGA i iznimno podesiv. Može se dodati podrška za aritmetiku s pomičnim zarezom, dijeljenje, množenje, uspoređivanje znakova, dodatnu komunikaciju s periferijom itd. Fleksibilnost takvog dizajna omogućava prilagodbu performansi procesora namjeni za koju je on potreban. Dijelovi na Slici 6 označeni sivom bojom svi su opcionalni pri konfiguraciji procesora za rad. MicroBlaze ima paralelan cjevovod podijeljen u tri stadija Fetch, Decode i Execute. Svaki od stadija traje jedan ciklus, iz čega slijedi da instrukcijama trebaju tri ciklusa kako bi se izvršile. Iako su podatkovna i instrukcijska sabirnica odvojene, MicroBlaze periferiji pristupa jednako kao i samoj memoriji, što znači da koristi memorijsko područje za pohranu vrijednosti ulaza i izlaza (engl. memory mapped I/O). 8
Programski kôd za MicroBlaze piše se u C/C++ jeziku korištenjem alata Xilinx EDK, odnosno alata SDK IDE nakon što se dizajn sintetizira i izveze iz EDK-a. Slika 6 Arhitektura procesora MicroBlaze sa svim proširenjima [5] U ovom radu korišten je MicroBlaze podešen na takt od 5 MHz. Od ostalih stavki korištene su instrukcijska i podatkovna priručna memorija veličine 1 kb te podrška za dijeljenje i množenje 32-bitnih cjelobrojnih brojeva. Kako bi algoritam bio točno implementiran na toj konfiguraciji, imamo na raspolaganju 5 procesorskih ciklusa jer je jedan ciklus jednak 2 ns. Kroz rad pri usporedbi brzine raznih načina izvođenja kôda na procesoru i pomoćnom sklopovlju vrijednosti će biti izražene u broju ciklusa. Ovo je samo vrlo kratak uvod u MicroBlaze i njegove mogućnosti. Više se može pronaći u [5] 3.3.1. Brzina izvođenja nekih osnovnih operacija Radi lakše usporedbe dobivenog broja ciklusa izvođenja pojedinog dijela algoritma s pomoću specijaliziranog sklopovlja, u ovom potpoglavlju navedeni su iznosi trajanja (u ciklusima) osnovnih operacija potrebnih za prolazak kroz algoritam. Operacije su izvedene nad 16-bitnim short formatom podataka jer je u radu korišten 16-bitni format. Vrijednosti u tablici izmjerene su za 25 ponavljanja svake od operacija kako bi se moglo bolje ustanoviti prosječno trajanje. 9
Operacija Bez priručne memorije Sa priručnom memorijom [ ] [ ] 964 1189 [ ] [ ] 14157 13465 [ ] [ ] 524379 55224 [ ] [ ] 1214248 225548 [ ] [ ] 14157 9986 [ ] [ ] 473675 142487 [ ] [ ] [ ] 7429598 1115142 [ ] [ ] 357195 61263 Tablica 1. Trajanja 25 ponavljanja osnovnih operacija Rezultati u gornjoj tablici nisu dovoljna mjera potrebnog vremena za oko 1 ograničenja s kojima je potrebno raditi. Ovdje su samo za usporedbu jer za prelazak na više ograničenja nije dovoljno pomnožiti trajanje. Zbog promašaja priručne memorije petlje s više od četiristo ponavljanja postaju vrlo spore. Npr. za dvije petlje od 4 ponavljanja brojač u timer sklopu prijeđe 32-bitnu vrijednost. 1
4. Aritmetika Jedan od najvećih problema pri implementaciji ovog algoritma na FPGA čipu jest odabir prikladne aritmetike. O aritmetici ne ovise samo rezultati izvođenja algoritma, već i prostor na čipu potreban da bi se algoritam uopće mogao implementirati. Invarijantni skup korišten za rad algoritma može se sastojati od nekoliko tisuća ograničenja, što u svojem slučaju nikako ne bismo mogli implementirati kad bismo se htjeli držati zadane vremenske granice, stoga se koristi skup od 12 ograničenja. Usporedba potrebne memorije za različite prikaze brojeva nalazi se u tablici Broj bitova formata Potrebno memorije 14 123.3Kb 15 132.1Kb 16 141Kb 32 282Kb double 564Kb Tablica 2. Prostor potreban za pohranu skupa od 12 ograničenja sa šest varijabli stanja i dvije upravljačke varijable Iz poglavlja o Spartan3A čipu vidljivo je da na raspolaganju imamo 36 Kbit memorije. Iako je teoretski moguće spremiti 32-bitni skup u memoriju na samom čipu, potrebno je uračunati memorijske zahtjeve mikroprocesora i serijske komunikacije. Memorija je također raspoređena u 2 ugrađenih blokova čije su konfiguracije prikazane u Tablici 3. 11
Tablica 3. Moguće konfiguracije memorije čipa [2] Izaberemo li 32-bitni prikaz, potrebna su nam dva takva bloka za pohranu jednog stupca matrice, što znači da sveukupno trebamo 2 blokova (bez komunikacije i mikroprocesora), dok pri pohrani u 16-bitnom obliku implementacija zahtijeva 11 blokova (1 osnovnih i recipročna norma). Zbog navedenih ograničenja najlogičnije je izabrati 16-bitni prikaz brojeva. Točan format ovisit će o njihovu rasponu. Skup je moguće normalizirati, iz čega znamo da će interval svakog od potrebnih brojeva biti [-1,1]. Važno je napomenuti da razvojna pločica ima 4MB DDR2 RAM za programski kôd i podatke, ali zbog brzine dohvata i poziva elemenata možemo zaključiti da je važnije pohraniti podatke na čip (vidi potpoglavlje o brzini). 4.1. Ekstremi evaluacije Zaključeno je da su svi parametri ograničenja skupa u intervalu [-1,1] te da ulazne varijable možemo svesti na interval [,1], no to ne znači da će i svi međurezultati izvođenja biti unutar istih intervala. Moguće ekstreme intervala međurezultata izvođenja možemo izračunati jednostavnom analizom. Znamo da, ako konstanta kojom se množi parametar bude pozitivna, ona će gornjoj granici intervala najviše doprinositi kada je parametar 1, a donjoj kada je parametar. Za negativne konstante vrijedi obratno, one će donjoj granici najviše doprinositi kada je parametar 1, a gornjoj kada je parametar. Zbog toga možemo ekstreme prilikom računa odrediti statičkom analizom. 12
U tablici 4 nalaze se iznosi ekstrema kroz korake algoritma. Operacija Donja granica Gornja granica -1,98 1,672-1,1417 1,281-1 1-1,2135 1,1246-135,8 398,7736-219,378 595,846-381,357 847,283 Tablica 4. intervali međurezultata pri izvođenju algoritma Vidljivo je da izračun nikada neće biti izvan intervala [-1.1417, 1.281], stoga je u tom dijelu dovoljno izabrati prikaz brojeva koji će biti nešto veći od tog intervala u ovom slučaju fixed-point formata (kasnije format brojeva izražavamo pomoću <<broj bitova>>.<<decimalna_točka>> npr. za gornji oblik pisat će 16.14). Preciznost ovakvog prikaza je 2^-14. Korištena aritmetika prikazana je u sljedećoj tablici. sign 1 whole 1 decimal 14 Tablica 5. Značenje bitova pri aritmetici 16.14 4.2. Propagacija greške Ovakav odabir aritmetike dovodi do iznimno velike propagacijske greške. Zbog mnoštva zaokruživanja međurezultata kao posljedica memorijskih ograničenja, za sve vrijednosti koje su toliko male da nisu prikazive prethodno navedenim 16-bitnim prikazom sustav će smatrati da iznose. Takva vrijednost dovodi do većih problema pri izvedbi cijelog algoritma, što je vidljivo u rezultatima. Već na punjenju memorije dolazi do greške zbog samog prikaza brojeva u kojem se brojevi zaokružuju na kvant od 2^-14. Promotrimo jednu operaciju množenja. Poznato je da množenjem dvaju 16-bitnih brojeva dobivamo 32-bitan broj. Tako i ovdje množenjem dvaju brojeva u prikazu 16.14 dobivamo 13
broj 32.28, ali moramo ga pretvoriti natrag na 16.14 (znamo da s gornje strane neće doći do preljeva statičnom analizom). Međutim, u slučaju zaokruživanja zadnje decimale ovdje ponovno dolazi do greške od ½ kvanta. Daljnjim zbrajanjem takvih brojeva greška se propagira. Uočavamo da će do relativno velike pogreške doći i prije samih operacija algoritma, već kod računanja (. Računanje sastoji se od 6 množenja, sume i razlike. Svaka od tih operacija može dovesti do pogreške od ½ kvanta što znači da može biti pogrešan za 3,5 kvanta odnosno 2.13e-4. Nadalje, uzmimo u obzir izračun jednog skalarnog produkta i usporedbe s. Takva operacija koristi se kod izračuna odnosa točke i politopa. Ako je 15. bit pri izračunu jednak 1, iznos će biti zaokružen na prvu višu vrijednost (pogreška od ½ kvanta), ali pri skalarnom produktu takvo zaokruživanje obavit će se dva puta, iz čega slijede četiri slučaja. 1) zaokružen niže, zaokružen niže vidljivo je da ovdje može doći do pogreške od 1 kvanta jer je vrlo lako moguće da zbroj ovih vrijednosti ima 15. bit postavljen u 1, dok svaka zasebno ima (16. bit obje vrijednosti je 1). Dodamo li toj grešci od 1 kvanta grešku kod zaokruživanja pri usporedbi, dobivamo ½ kvanta greške, što može dovesti do netočnog rezultata usporedbe (vidi rezultate). 2) zaokružen više, zaokružen niže dobivamo grešku od ½ kvanta ( zbog zaokruživanja ) što bi pri usporedbi trebalo dati točan rezultat. U prva dva slučaja pretpostavljaju se jednaki predznaci i no to nije nužno točno jer u potproblemu b) algoritma točka koju provjeravamo ne mora imati pozitivne vrijednosti, kao što je to slučaj na početnom ulazu u algoritam. Lako je zaključiti da su preostala dva slučaja analogna prethodnim dvama slučajevima. Pogrešni rezultati koji proizlaze iz takvih numeričkih pogrešaka vidljivi su u poglavlju 6. 14
4.3. Predobradba Neke od operacija u algoritmu vrlo su složene i zahtijevaju puno procesorskog vremena npr. računanje korijena pri izračunu norme i projekcije u potproblemu b). Zbog toga ih je vrlo korisno obaviti prije nego se algoritam pokreće jer nećemo samo uštedjeti na vremenu, već možemo i manipulirati tim podacima. Ovakva manipulacija provedena je upravo na normi i recipročnoj normi. Pogledamo li jednadžbu za izračun udaljenosti, vidljivo je da se recipročna norma ne mijenja, a tako ni njezina recipročna vrijednost. Izračunamo li vrijednosti recipročne norme offline, primjećujemo da je njihov raspon vrijednosti od 1 sve do 9, što našoj 16.14 aritmetici ne odgovara. Dubljim razmatranjem cijelog pronalaska udaljenosti točke od ograničenja dolazimo do zaključka da nije potrebno izračunati udaljenosti točno jer se one ionako međusobno uspoređuju (bilo bi ih korisno imati pri računu projekcije, ali projekciju smo ostavili kao dio programskog kôda procesora). Upravo zbog toga možemo recipročnu normu skalirati s proizvoljnom vrijednosti ili normalizirati. Normalizacijom dobivamo puno pogodniji raspon vrijednost od 1.9929e-4 do.1795. Želimo li izvući što više informacije iz norme, možemo je još jednom skalirati. U tom slučaju skaliramo sa 5.5 kako ne bismo prešli ograničenja aritmetike 16.14 te dobivamo raspon od.11 do.9871. Takvo dodatno skaliranje pokazalo se vrlo važnim pri dobivanju dobrih rezultata traženja prekršenih ograničenja. Uzmimo sada drugu operaciju koja koristi normu. Iako je ovaj dio ostavljen procesoru, moguće je ostvariti ubrzanje pripremom look-up tablice (LUT) umnoška kvadrirane recipročne norme i svakog od. Za ovakve tablice dobivaju se intervali [-518.629, 1] za i [-736.6711, 1.412] za. Upravo zato što se projekcija izvodi na procesoru, ali koristi se cjelobrojni format koji koristi 32 bita, i ovaj dio bit će skaliran (ovdje 2^5) radi što više informacija te zaokružen. Novodobiveni intervali su [-16578, 32] za i [-23574, 45] za. Vrijednosti su spremljene kao polja u programskom kôdu na procesoru. 15
5. Specijalizirano sklopovlje Specijalizirano sklopovlje omogućava nam da premostimo vremenska ograničenja izvođenja programa samo na procesoru. U uvodu je već spomenuta pogodnost paralelizacije algoritma. Iz tog se razloga većina specijaliziranog sklopovlja temelji na paralelizaciji operacija potrebnih za rad algoritma. Takva izvedba ujedno i povećava propusnost, te eliminira usko grlo (engl. bottleneck) koje je posljedica pristupanja memoriji. 5.1. Izračun H reprezentacije politopskog skupa dozvoljenih upravljačkih signala Kako bi se uopće počeo izvoditi algoritam potrebno je odrediti H-K reprezentaciju politopa, stoga je prvi korak izračun K vektora iz stanja sustava. Specijalno pomoćno sklopovlje za izračun K prikazan je na slici. Sklop za izračun K (dalje u tekstu Kcalc) po pokretanju iterira kroz invarijantni skup, te množi red po red matrice i izračunava skalarni produkt trenutnog stanja sustava postavljenog u registre X1-X6 i invarijantnog skupa. Produkt se sprema u pomoćnu memoriju, no o tome više u sljedećem potpoglavlju. Slika 7. Vanjski dio Kcalca 16
Slika 8. Unutarnji dio Kcalca Blok Add5 sa Slike 8 ostvaren je Xilinx Mcode blokom System generatora. Xilinx Mcode blokovi su spremnici za m-funkciju koju želimo izvesti na sklopovlju. Sama konfiguracija sastoji se od navođenja imena funkcije u parametrima bloka te smještanja kôda te funkcije u radni direktorij gdje se nalazi i model. System generator će funkciju prevesti u ekvivalentan VHDL/Verilog kôd pri generiranju sklopovlja. Iako se može napisati, m- funkcija ne može koristiti sva MATLAB-ova svojstva, nego samo određeni podskup tih svojstava te Xilinxove konfiguracijske funkcije. 5.1.1. Brzina protoka podataka Odgovor na pitanje zbog čega nam je uopće potreban Kcalc ako imamo procesor jest upravo zbog brzine protoka podataka. Invarijantan skup u našem je slučaju matrica 12x6, što znači da bi sekvencijalnim izvođenjem skalarnog produkta bilo potrebno svaki od brojeva dohvatiti iz memorije, pomnožiti, zbrojiti te vratiti u memoriju. Radimo li to na procesoru, izračun K iz svakog reda zahtijevao bi dohvat svakog pojedinačnog operanda, što bi usporavalo proces. Uzmemo li idealan slučaj da dohvat jednog operanda traje 1 procesorski ciklus, za svaki red bilo bi nam potrebno 7 ciklusa i vrijeme potrebno za izvođenje operacija (C). Korištenjem Kcalca svaki ciklus dohvaćamo svih 7 operanada i time smanjujemo složenost sa 7(n+C) na n+c. Računamo li protok podataka, vidljivo je da procesor u ciklusu dohvaća 32 bita, što je protok od 1.9 Gbit/s. No to je idealan protok bez promašaja priručne memorije i trošenja vremena na petlje u stvarnom slučaju za petlju od 25 množenja dobivamo prosjek od 4 procesorskih ciklusa po operaciji (prema tablici iz potpoglavlja 2.3.1., no i taj broj postaje netočan skaliranjem problema). Iz svega navedenog se može zaključiti da je za izračun K sekvencijalnom metodom potrebno oko 28 procesorskih ciklusa. Koristimo li Kcalc protok nam je oko 5.6 Gbit/s jer dolazimo do memorijskih ograničenja (kao što je opisano u poglavlju o aritmetici), a K računamo u 17 ciklusa. 17
5.2. Pristup izračunatim podacima u sklopovlju Sklop za pristup izračunatiom podacima (nadalje HKBanka) je kontrolni dio pomoćnog sklopovlja koji ima dvije funkcije, služi za pristup izračunatim podacima od strane procesora (preko Addr registra) i slanje podataka drugim specijaliziranijim dijelovima cijelog sklopa. Po pokretanju HKBanka iterira kroz skup i prosljeđuje H i K vektor pomnožen s vrijednostima u registrima 'U1', 'U2' i 'KU'. Slika 9. Shema HKbanke Takva raspodjela memorije i množila zapravo je posljedica arhitekture Spartana3A gdje je memorija direktno povezana sa sklopovljem za množenje kao što je na Slika 1. Slika 1. Poveznica između memorije i ugrađenog množila na čipu [2] Sa slike se vidi da ugrađeno množilo prima dva operanda, veličine je najviše 18 bita i stoga vraća 36-bitni rezultat, ali kako je zaključeno u poglavlju o aritmetici taj rezultat se zaokružuje na aritmetiku 16.14. Testiran je i dizajn koji ostavlja 32-bitne vrijednosti no nažalost zahtjevi takvog sklopa premašuju kapacitet čipa pri sintezi cijelog sustava. Za prolazak kroz sva ograničenja potrebno je n+6 ciklusa. Usporedimo li n+6 s tablicom iz potpoglavlja 2.3.1., vidljivo je vrlo veliko ubrzanje čak i naspram 25 iteracija s korištenjem priručne memorije. 18
5.3. Sklop za provjeru pripadnosti točke politopu Sklop za provjeru pripadnosti točke politopu (od sada isinpoly) je najjednostavniji sklop koji samo uspoređuje i kako bi odredio je li točka unutar politopa ili nije, tj. rješava prvi slučaj algoritma opisanog u potpoglavlju 1.1..Važno je napomenuti da radi obrnutom logikom, te da vraća rezultat 1 ako je nejednadžba prekršena. Sklopovlje takav problem rješava za HKBank + 2 odnosno n+8 ciklusa. Slika 11. Neprošireni isinpoly s direktnom usporedbom Proširenje tog sklopa teoretski poboljšava rezultate sveukupnog rada algoritma (vidi poglavlje 6). Slika 12 isinpoly s tolerancijom AbsTol registar kontrolira apsolutnu toleranciju provjere jer su rezultati u velikoj mjeri ovisni o istoj. Zbog te ovisnosti taj je registar u 32.3 aritmetici koja omogućava puno veći raspon tolerancija za usporedbu. Sklop prima proširene rezultate množenja iz HKBanke u preciznosti 32.3 jer je vrlo bitno da takva provjera točno radi. Nažalost, nije moguće svim modulima slati proširene rezultate, a ispostavlja se da kalkulator udaljenosti vrlo dobro radi i sa 16-bitnom aritmetikom nakon skaliranja recipročne norme. 19
5.4. Kalkulator udaljenosti točke od politopa Rješenje potproblema b) zahtjeva sortiranje udaljenosti točke od ograničenja jer je potrebno naći najudaljenije ograničenje, te projicirati točku na nj. Za izračun i možemo iskoristiti HKbanku, pa je povoljno dodati logiku koja će izračunati ostatak jednadžbe. U poglavlju o pretprocesiranju uvedene su ideje o normi koje su ovdje iskorištene. HKbanci dodan je blok memorije koji sadrži normaliziranu skaliranu recipročnu normu radi lakše sinkronizacije podataka u ovom sklopu. Na ulaz u kalkulator udaljenosti dovedeni su izlazi HKbanke. Dovoljno je izračunati sumu, provjeriti pripadnost točke politopu te izračunati udaljenost točke od ograničenja. Shema sklopa koji izvršava navedenu logiku prikazana je na Slici 13. Slika 13. Obrada podataka prije prosljeđivanja na sortiranje Vidljiv je i najbitniji dio kalkulatora udaljenosti, a to je sklop za sortiranje. Sklop ne sortira sve vrijednosti koje ulaze u kalkulator udaljenosti već samo one gdje vrijedi nejednakost. Od tih vrijednosti sklop pamti indekse 1 najvećih (eksperimentalno se pokazalo da su slučajevi kada rješenje nije pronađeno u prvih 1 iteracija algoritma vrlo rijetki). Za pamćenje tih 1 vrijednosti potrebni su automati koje ćemo nazvati sortirajuće ćelije. Registar emptyflag je registar obrnute logike, koji označava postoji li uopće važeća udaljenost. 2
Važna je napomena da se udaljenosti indeksiraju s početnim indeksom 1 radi lakše programske kontrole (ako program naiđe na indeks iznosa onda je prešao sva važeća ograničenja). 5.4.1. Sortirajuća ćelija Ideja sortirajućih ćelija dolazi iz [6] i, kao što joj samo ime kaže, riječ je o ćeliji za sortiranje. Rad ćelije objašnjena je u sljedećem primjeru. Primjer. Želimo sortirati niz 4,34,23 uzlazno. Slika 14. Skup sortirajućih ćelija prije prvog koraka Prvi korak počinje brojem 4 na ulazu. Sve su ćelije prazne pa će broj otići u prvu ćeliju sortera. Slika 15. Skup sortirajućih ćelija tijekom i nakon prvog koraka Drugi broj koji dolazi je 34 njega možemo staviti na sljedeće prazno mjesto jer je veći od 4 pa je stanje nakon drugog koraka sljedeće: 21
Slika 16. Skup sortirajućih ćelija tijekom i nakon drugog koraka U posljednjem koraku na ulazu je broj 23. Njega treba smjestiti između broja 4 i 34 što znači da broj 34 treba premjestiti u sljedeću ćeliju. Slika 17. Skup sortirajućih ćelija tijekom i nakon treceg koraka Iz primjera se primjećuje nekoliko pravila. 1) ako je prva ćelija prazna u nju stavi prvi broj 2) ako je prethodna ćelija prazna => ne spremaj broj na ulazu 3) ako je broj na ulazu manji od broja trenutnog broja u ćeliji (za sortiranje silazno broj je veći od broja u ćeliji) => trenutni broj u ćeliji pošalji sljedećoj ćeliji u nizu, a broj s ulaza spremi u memoriju 4) ako ćelija koja je prije u nizu gura svoju vrijednost (znači da je usporedba uspjela prije ove ćelije) => spremi gurnut broj, a svoj pošalji sljedećoj ćeliji. Ovo pravilo ima veći prioritet od pravila broj tri. Za provedbu tih pravila potrebni su dodatni signali koji će sljedećoj ćeliji oglašavati je li prethodna ćelija puna i pomiče li svoj broj sljedećoj. Ovakav rad sortiranja zahtijeva vrlo preciznu sinkronizaciju između ćelija, inače bi vrlo lako moglo doći do grešaka. U našem 22
slučaju ne sortira se cijeli niz, već se pamti 1 najboljih vrijednosti jer je za ćelije potreban velik broj logičkih elemenata. Izgled jedne ćelije u Simulinku prikazan je na sljedećoj slici. Slika 18. Izgled jedne ćelije 5.4.2. Operacijski takt sortirajuće ćelije Razumijevanje operacijskog takta sortirajućih ćelija potrebno je da bi se uspjela ostvariti sinkronizacija pri spajanju ćelija u veće nizove. U idealnom slučaju sve bi se ćelije aktivirale u isto vrijeme i usporedile svoje stanje, no u stvarnom svijetu potrebno je sklop sinkronizirati na rad takta. Signali pri radu jedne ćelije nalaze se na Slici 19. Kada ćelija primi podatke, uspoređuje ih s podatcima koje već ima ako ih ima. Na rastući brid takta ćelija, ovisno o svojem trenutnom stanju i ulaznim signalima prethodne ćelije, određuje koje pravilo treba poštovati. Signal enable je potreban jer za tu primjenu ćelija ne prihvaća sve ulaze, već samo one koji su izvan politopa. 23
ciklus Slika 19 Vremenski graf rada jedne ćelije Ćeliji su potrebna dva takta za obradu ulaznih podataka i postavljanje signala stanja, prema kojemu druga ćelija prilagođava svoj rad. Zbog tog kašnjenja pri spajanju više ćelija jedne za drugom potrebno je zakasniti ulazne podatke za dva takta, kao što je prikazano na slici sa spajanjem dviju ćelija. Slika 2. Sinkronizacija dviju ćelija 24
5.5. Sklop za rješavanje jednodimenzionalnog problema najbliže točke na politopu Posljednji ostvaren specijalizirani sklop jest sklop za rješavanje 1DCAPP problema [7]. 1DCAPP problem sastoji se od pronalaska najmanjeg maksimuma (minmax) i najvećeg minimuma (maxmin), odnosno dopuštenog intervala vrijednosti upravljačke varijable za koji smo sigurni da će u njemu varijabla ostati u invarijantnom skupu. Iako algoritam ima dvije upravljačke varijable u koraku c), utvrđeno je da problem možemo svesti upravo na 1DCAPP, ali 1DCAPP nećemo rješavati uvijek za istu upravljačku varijablu. Odabrat ćemo onu varijablu čija je apsolutna vrijednost manja. Zbog toga je osim izračuna i potrebna dodatna logika kao na Slici 21. Slika 21. Logički dio za odabir varijable po kojoj se rješava 1DCAPP Radi boljeg razumijevanja logike pogledajmo opet nejednadžbu za 1DCAPP. [ ] Pomnožimo li obje strane sa dobivamo [ ] Takav oblik te nejednadžbe mnogo je lakše izvesti što zbog strukture Spartana3 što zbog već napravljenog sklopovlja. Rješavanje po drugoj varijabli analogno je tom obliku, pa je dovoljno multipleksirati ulaze u sklop. Odabirom oblika koji se rješava upravlja signal sel. 25
Nadalje zbog skaliranja koje će biti opisano u poglavlju o programskom dijelu, potrebno je omogućiti množenje varijable koja nije pomnožena u HKBanci iz tog razloga spojen je registar Hscale aritmetike 16.14, kao i ostalo sklopovlje. Potrebno je, također, podijeliti desnu stranu jednadžbe s lijevom jer ipak računamo interval od. Dijeljenje je opasna operacija i zahtijeva provjeru vrijednosti lijevog operanda. Zbog toga su operandi prvo spojeni u 'Control' podsustav, koji provjerava je li lijevi operand i služi za ignoriranje ograničenja po kojem trenutačno tražimo rješenje problema (indeks ograničenja koje se ignorira potrebno je spremiti u registar 'CurrRow'). Slika 22. Kontrolni dio za provjeru dijeljenja s i izbjegavanje trenutnog ograničenja Treći dio tog sklopa upravo je onaj koji od svih kvocijenata lijeve i desne strane jednadžbe pamti one koji predstavljaju minmax i maxmin signala. maxmin očito dobivamo kada je lijeva strana nejednadžbe negativna, stoga je potrebno usmjeriti signal onom dijelu podsustava koji je prikladan za tu vrijednost. Djelilo je konfigurirano da prima dva 16- bitna operanda, a vraća kvocijent u obliku 16 cjelobrojnih bitova i 16 decimalnih bitova koji se zbrajaju. Nadalje, rješenje se smatra 32-bitnim brojem aritmetike 32.16. Takva konfiguracija daje veću preciznost rješenja, koja je za algoritam i potrebna. Vrlo je važno paziti na takvu aritmetiku prilikom čitanja rezultata korištenjem procesora. 26
Slika 23. Dio za pronalazak minmax i maxmin intervala Važno je napomenuti da je registre za maxmin i minmax potrebno inicijalizirati na vrlo malu, odnosno veliku vrijednost. Reinterpret blokovi na slici posljedica su vrlo strogog sustava tipiranja System generatora koji zahtijeva da ulazi u djelilo budu cjelobrojni. Takvi blokovi ne koštaju ništa logičkih blokova čipa, već su ovdje samo zbog pretvorbe tipova podataka. 27
6. Programski dio Kao što je već navedeno, sklopovska izvedba sadrži i mikroprocesor. Programski dio rada obuhvaća kontrolu ostvarenog pomoćnog sklopovlja mikroprocesorom, te dodatne operacije koje su potrebne za pronalazak rješenja algoritma. Ukratko su opisane funkcije za pozivanje pojedine funkcionalnosti pomoćnog sklopovlja, skaliranje međurezultata pri provedbi algoritma (vidi poglavlje 3.) te usporedba izmjerenih vremena potrebnih za poziv funkcija i vremena osnovnih operacija navedenih u potpoglavlju 2.3.1.. 6.1. Upravljački programi Upravljački program uređaja (engl. driver) programski je kôd koji upravlja i omogućava pristup pojedinoj komponenti sklopovlja. Radi lakšeg korištenja napisane su funkcije za rad s vanjskim komponentama spojenima na procesor. Pozivi Kcalc i HKbank sklopova najjednostavniji su. U enable registar željenog sklopa najprije se postavlja kako bi mu se onemogućio rad. Nakon toga sklop resetiramo postavljanjem 1, pa u registar za resetiranje (Za Kcalc 'Rst', za HKbank 'BankRst'). Nakon resetiranja postavljaju se vrijednosti operanada u za to predviđene registre ('X1'- 'X6' i 'U1','U2' te 'KU'), te 1 u enable registar. Sve pomoćno sklopovlje ima registar koji se postavlja u 1 kada je sklop gotov s radom i podatci su spremni za čitanje ili u slučaju Kcalca, za daljnji rad. Preostala 3 sklopa kontroliraju se iz registra 'ctrlreg' koji je veličine 4 bita. Format riječi je pri čemu: enis endi enclo selclo - enis kontrolira je li omogućen sklop isinpoly, - endi upravlja kalkulatorom udaljenosti, - enclo omogućava sklop za 1DCAPP, - selclo određuje koja se verzija rješavanja 1DCAPP problema izvodi. Za ispravnu kontrolu prvo se omogućava željeni sklop, a zatim se poziva funkcija koja pokreće HKBank koji počinje iterirati kroz retke matrice. 28
6.2. Skaliranje U poglavlju o aritmetici utvrđeno je da pri izračunu projekcije dobivene vrijednosti za upravljački signal ne moraju biti u intervalu [-2,2] s kojim pomoćno sklopovlje računa. Javlja se potreba za skaliranjem projekcije ovisno o trenutnom rezultatu. Radi brže operacije skaliranje se provodi aritmetičkim posmakom u desno. Iz intervala je poznato da broj posmaka nikada neće biti veći od 1, ali zbog 16.14 aritmetike moguće je skaliranje sve do 2^-14. Prije nego se vrijednosti uopće mogu skalirati potrebno je odrediti broj posmaka koji će ih spustiti na interval [-1,1] (aritmetika 16.14 može prikazati interval [- 2,2] ali zbog mogućeg preljeva ovdje je dopušteno [-1,1] jer množenje s takvim brojevima neće promijeniti granice intervala). Najlakši je način određivanja tog broja s pomoću logaritma vrijednosti koje skaliramo. Algoritam za vrlo brzo izračunavanje logaritma brojeva cjelobrojnih formata opisan je u [8] 6.3. Utjecaj pogreške zaokruživanja Propagacija greške nije samo problem pomoćnog sklopovlja već je i problem programskog kôda. Već pri zapisivanju recipročne norme (vidi poglavlje 3.) unesena je greška od 2^-6 jer je norma skalirana samo sa 2^5. Dodatna greška javlja se pri nužnom skaliranju brojeva zbog operacija množenja pri računanju projekcije. Nadalje, vrijednosti za H i K dobivene su iz HKbanke što znači da su zaokružene na 16.14 pa je i tu uvedena pogreška od 2^-15. Prolaskom kroz operaciju projekcije lako se uočava gdje sve može doći do pogreške zaokruživanja. Pri izračunavanju i oba su faktora aritmetike 16.14 pa je rezultat 32.28 koji se radi kasnije operacije svodi na 16.14 (ovdje se uvodi greška od 2^-15) Druga operacija gdje dolazi do greške ispravak je aritmetike nakon izračuna projekcije upravljačkog signala jer je recipročna norma formata 16.5, a međurezultat iz prethodne operacije 16.14 dobiva se rezultat 32.19. Posljednji rezultat potrebno je svesti na format 1.14 te stoga posmak udesno za 5 uvodi grešku od 2^-5. 29
6.4. Eksperimentalno utvrđene brzine izvođenja Brzine izvođenja pojedinih funkcija su već spomenute, ali one ne znače mnogo ako poziv istih funkcija nije dovoljno brz. Bitna je i usporedba dobivenog vremena izvođenja i vremena koje bi algoritmu bilo potrebno za izvođenje da je cijeli implementiran na procesoru. Mjerenjem se ispostavlja da nije ni potrebno uspoređivati s potpunom implementacijom algoritma jer se i usporedbom samih osnovnih operacija iz potpoglavlja 2.3.1 vidi veliko ubrzanje. Prosječno trajanje poziva svake od funkcija u ciklusima i u mikrosekundama nalazi se u Tablici 6. Funkcija Ciklusa mikrosekundi Izračun K 1841.2 36.824 Isin 661.4 121.228 project 3848.21 76.96 1DCAPP 15426.38 38.53 DI 5859.3 117.186 Prosječan prolazak kroz algoritam (iz testova) 3511 61.22 Najgori prolazak kroz algoritam 261342 5226.84 1 ponavljanja traženja točke preko 1 najudaljenijih ravnina (samo najgori jer se samo tada može ponavljati) 15 ponavljanja traženja točke preko 1 najudaljenijih ravnina 3246694 64933.88 4865776 97315.52 Tablica 6. Vrijeme izvođenja funkcija poziva pomoćnog sklopovlja Potrebno je još napomenuti da se u funkcijama HKBank poziva 2 puta jer se pri duljem radu čipa znaju izmijeniti registri što dovodi do krivih rezultata. 3
7. Rezultati Provedeno je testiranje algoritma na 446 točaka, odnosno na rezultatima simulacije modela vjetroagregata snage jednog megavata dugoj 44.6 sekundi. Idealni rezultati dobiveni su simulacijom u MATLABu koja koristi dvostruku preciznost. Važno je napomenuti da je testirano nekoliko različitih izvedbi pomoćnog sklopa s promjenama većinom na dijelu provjere pripadnosti točke politopu, pokazalo se da navedena funkcija ima značajan utjecaj na rezultat. Na sljedećih par grafova oznake su kako slijedi: - Idealno označava rješenje u MATLABu, - označava provjeru gdje se direktno uspoređuju i u aritmetici 16.14, - > pozitivni kvant jest iteracija sklopa gdje se razlika - uspoređuje s najmanjim kvantom 16.14 aritmetike, odnosno 6.1e-5, čime se prostor smanjuje, - > negativni kvant je jednaka izvedba prošloj, samo je kvant -6.1e-5 ovdje se prostor proširuje 1 Idealno.5 5 1 15 2 25 3 35 4 1 Testni primjer HU > K.5 5 1 15 2 25 3 35 4 1 Testni primjer HU-K > 2-14 HU-K > -2-14.5 5 1 15 2 25 3 35 4 1 Testni primjer.5 5 1 15 2 25 3 35 4 Testni primjer Slika 24. Dobiveni signal za različite izvedbe testa pripadnosti točke politopu 31
1 Idealno.5 5 1 15 2 25 3 35 4 1.5 Testni primjer HU > K 1.5 5 1 15 2 25 3 35 4 1.5 Testni primjer HU-K > 2-14 HU-K > -2-14 1.5 5 1 15 2 25 3 35 4 2 Testni primjer -2 5 1 15 2 25 3 35 4 Testni primjer Slika 25. Dobiveni signali za različite izvedbe testa pripadnosti točke politopu Izuzev titranja trećeg signala, koje se može primijetiti na prvih 13 točaka, drugi i treći signal na prvi su pogled vrlo slični idealnom signalu, ali pri računu greške između svakog para rezultata dolazi do velikih odstupanja i greške zaokruživanja od čak 1% za neke primjere. Neki od tih primjera posljedica su upravo provjere točke i politopa, a neki su slučajevi u kojima bi algoritam trebao vratiti grešku (algoritam nije našao točku koja se programski smatra rješenjem). Nažalost, ni izbacivanje tih primjera ne rezultira boljim rezultatima i još uvijek ostaju šiljci gdje je pogreška vrlo velika. 32
Idealno vs bez tolerancije [%] -14 [%] Idealno vs tolerancija 2 Idealno vs tolerancija -2-14 [%] 1 5 5 1 15 2 25 3 35 4 Testni primjer 15 1 5 5 1 15 2 25 3 35 4 Testni primjer 6 4 2 5 1 15 2 25 3 35 4 Testni primjer Slika 26. Greška za prva 3 signala sa Slike 24. Idealno vs bez tolerancije [%] -14 [%]l Idealno vs tolerancija 2 Idealno vs tolerancija -2-14 [%] 1 5 5 1 15 2 25 3 35 4 Testni primjer 1 5 5 1 15 2 25 3 35 4 Testni primjer 1 5 5 1 15 2 25 3 35 4 Testni primjer Slika 27. Greška za prva 3 signala sa Slike 25. 33
Signal gdje se uspoređuje s negativnim kvantom ima samo tri šiljka na mjestima gdje se dogodila greška, odnosno algoritam nije uspio pronaći rješenje u prvih 1 iteracija. Uklanjanjem programskih grešaka dobiva se mnogo bolji graf, ali ostaje problem relativno velike greške zaokruživanja koja doseže i do 2 %. Idealno vs tolerancija -2-14 Bref [%] 2 15 1 5 5 1 15 2 25 3 35 4 Testni primjer Idealno vs tolerancija -2-14 Tref [%] 3 25 2 15 1 5 5 1 15 2 25 3 35 4 Testni primjer Slika 28. Negativna tolerancija bez programskih pogrešaka Kao što je navedeno u opisu sklopa za provjeru vrijedi pokušati proširiti preciznost ovog dijela algoritma. Greška zaokruživanja između proširene provjere i idealnog slučaja prikazana je na sljedećoj slici. 34
Idealni vs prosireni s korakom Bref [%] 12 1 8 6 4 2 5 1 15 2 25 3 35 4 Testni primjer Idealni vs prosireni s korakom Tref [%] 2 15 1 5 5 1 15 2 25 3 35 4 Testni primjer Slika 29. Razlika između idealnog slučaja i proširenog s malom pozitivnom tolerancijom te ponavljanjem računa s korakom Pri računu Slike 29 nije korištena samo mala pozitivna tolerancija. Iteriranje kroz najudaljenijih 1 ravnina ponavljano je 1 puta, te je u svakoj iteraciji nakon provjera umanjen iznos projekcije i ulaza u 1DCAPP za 1 % čime se obje točke pomiču prema središtu koordinatnog sustava u nadi da će ući u politop. Ta metoda ne daje dobre rezultate stoga treba odabrati prikladnije traženje smjera kretanja ako rješenje nije pronađeno u prvoj iteraciji. U sljedećoj provjeri uvedene su restrikcije kada se rješenje smatra važećim. Oba iznosa signala moraju biti pozitivna i ne veća od 2^14 jer se u idealnom slučaju vidi da dobiveni iznosi ne premašuju tu vrijednost. Takve restrikcije poboljšavaju rješenje kao što je vidljivo na Slici 3. 35
Idealni vs ograničeni Bref [%] 14 12 1 8 6 4 2 5 1 15 2 25 3 35 4 Testni primjer Ideal vs ograničeni Tref [%] 15 1 5 5 1 15 2 25 3 35 4 Testni primjer Slika 3. Ograničavanje pri provjeri pripadnosti točke i politopu Detaljnijom provjerom rezultata s restrikcijom u primjerima gdje se događa velika greška zaokruživanja (>6 %) primjećuje se da to zapravo nije greška računa već greška kalkulatora udaljenosti sklopa zbog koje se vrlo male razlike u udaljenostima od ravnina stapaju i dobiva se drugačiji poredak njihovih indeksa. Izbaci li se iz kôda provjera pripadnosti točke politopu dobivaju se bolja rješenja za te slučajeve jer algoritam forsira provjeru 1DCAPP problema, ali gora rješenja u drugim slučajevima gdje greška naraste i do 2 % u usporedbi s idealnim rezultatima. Proširenjem preciznosti kalkulatora udaljenosti i ćelija za sortiranje, te negativnom apsolutnom tolerancijom vrijednosti od jednog kvanta dobivaju se nešto bolji rezultati gdje greška zaokruživanja ne prelazi 2 %. Prikaz je bez primjera u kojima algoritam ne pronalazi rješenje, ali tih primjera ima samo 18, za razliku od rješenja s pozitivnom tolerancijom gdje je takvih slučajeva oko 8. 36
Ideal vs prosireni kalkulator udaljenosti Tref [%] Ideal vsprosireni kalkulator udaljenosti Bref [%] 14 12 1 8 6 4 2 5 1 15 2 25 3 35 4 Testni primjer 2 15 1 5 5 1 15 2 25 3 35 4 Testni primjer Slika 31. Prošireni kalkulator udaljenosti s negativnom tolerancijom jer ona daje bolje rezultate Još uvijek ostaju veliki skokovi razlike između dobivenog upravljačkog signala i idealnog signala na mjestima kao i prije, iz čega se dā zaključiti da su razlike u udaljenosti točke od ravnina toliko male da se zaokružuju na 3. bitu ili su vrijednosti u memoriji toliko slične da odmah pri izlazu uvode grešku koja onemogućava usporedbu udaljenosti. Posljednji skup mjerenja izveden je s proširenim sklopovljem za udaljenost i provjeru te bez tolerancije odnosno s malom negativnom tolerancijom i malom pozitivnom tolerancijom iznosa ±2e-6. Nažalost, sva tri rješenja gotovo su jednaka rješenju bez tolerancije kao na Slici 32. 37
Idealni vs vise prosirenja Bref [%] 1 8 6 4 2 5 1 15 2 25 3 35 4 Testni primjer Idealni vs vise prosirenja Tref [%] 12 1 8 6 4 2 5 1 15 2 25 3 35 4 Testni primjer Slika 32. Greška s proširenim kalkulatorom udaljenosti i provjerom Uvidom u dobivene rezultate možemo zaključiti sljedeće. Iako odabir tolerancije, širine kalkulatora udaljenosti i restrikcija rješenja utječe na točnost sveukupnog rezultata zbog ograničenja aritmetike slučajevi gdje bi se trebali dobiti relativno dobri rezultati često imaju vrlo velika odstupanja zbog malih razlika između udaljenosti. Takva greška mogla bi se popraviti skaliranjem ulaznih varijabli radi ostvarivanja veće preciznosti, no zbog ograničenja Spartan3A čipa takve prilagodbe ovdje nije moguće napraviti. Sva razmatranja uspoređivana su promatranjem iznosa relativne pogreške, ali dobro je i pogledati apsolutni iznos greške i izgled odokativno najboljeg dobivenog rješenja. 38
Idealno vs prosirenja s negativnom tolerancijom Bref 1.2 1.8.6.4.2.8.6.4 hardver idealni apsolutna greška.2 -.2 5 1 15 2 25 3 35 4 Testni primjer 246 2465 247 Slika 33 za proširene kalkulator udaljenosti i isinpoly s negativnom tolerancijom 1.2 1 hardver idealni greška idealni vs proširenja s negativnom tolerancijom Tref.8.6.4.2 1.8.6.4.2 -.2 5 1 15 2 25 3 35 4 Testni primjer 24 242 244 246 248 Slika 34 za proširene kalkulator udaljenosti i isinpoly s negativnom tolerancijom 39
Za vidljiva je najveća apsolutna pogreška iznosa.5 što je u tom trenutku oko 1% iznosa točnog rješenja. Tref nešto više griješi ovom metodom i dolazi se sve do apsolutne pogreške iznosa.1 koja prestavlja oko 15 % cjelokupne vrijednosti rješenja za tu varijablu. Nadalje, isprobani su kompliciraniji algoritmi pronalaska rješenja poput skaliranja dobivenih vrijednosti kružno (skaliranje za 1 % u svakom od 8 smjerova) i uzimanja samo onog rješenja koje je najbliže ulaznoj točki donosno najdalje od nje. Ni takvim traženjem ne dobivaju se greške manje od onih na Slikama 34. i 35. te ih nije ni potrebno prikazivati. 4
8. Zaključak Istražen je pristup ostvarenja algoritma koji pomaže pri nadbrzinskoj zaštiti vjetroagregata prilikom naleta vjetra ili općenito pri upravljanju procesima kod kojih je potrebno da varijable ne prelaze odgovarajuće granice. Sustav je dizajniran s ciljem samostalne operacije plug'n'play principom kako bi se mogao što lakše koristiti u praksi. Iz tog razloga korišteni mikroprocesor sintetiziran je od logičkih polja. U pogledu vremena, ostvareni sustav problem rješava za red veličine brže od potrebnog, ali zbog tehničkih ograničenja korištenog čipa javlja se relativno velika greška u usporedbi s idealnim modelom. Ta velika greška očekivana je uzmemo li u obzir da izvedeno sklopovlje na 15 bita ni jednom ne dolazi do rješenja. 16-bitni pristup apsolutni je minimum, barem na ovakav način. Implementacija pokazuje iznimnu snagu FPGA čipova pri izvođenju algoritama za koje je poželjno dizajnirati specijalizirano sklopovlje. Usporedba različitih izvedbi algoritma s idealnim modelom pokazuje koliko je bitna aritmetika pogodna za ostvarenje dobrih rezultata. Podešavanjem raznih parametara moguće je grešku ublažiti, ali ni ublažavanjem ne mogu se nadići ograničenja aritmetike. Povećavanjem preciznosti dijelova algoritma vidljivo je da prelazak na veću sveukupnu numeričku preciznost algoritma ne bi zahtijevao mnogo veći čip od Spartan3A. Dovoljan bi bio moderan čip srednje klase. Točne iznose potrebnih ćelija i drugih komponenata teško je odrediti jer moderni čipovi imaju drugačiju arhitekturu. Arhitektura, također, ovisi i o proizvođaču. 41
9. Literatura [1] Hure N. et al., Wind turbine overspeed protection based on polytopic robustly invariant sets, Wiley Online Library. Volume 19, Issue 9 September 216 Pages 1713 1731 [2] Xilinx Inc., Spartan-3A FPGA Family: Data Sheet, http://www.xilinx.com/support/documentation/data_sheets/ds529.pdf, 19.5.216 [3] Xilinx Inc., System Generator for DSP User Guide, 16.1.212, http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_7/sysgen_user.pdf, 19.5.217 [4] Xilinx Inc., System Generator for DSP Getting Started Guide, 2.12.29,http://www.xilinx.com/support/documentation/sw_manuals/xilinx11/sys gen_gs.pdf, 19.5.216 [5] Xilinx Inc., MicroBlaze Processor Reference Guide, 17.1.28, https://www.xilinx.com/support/documentation/sw_manuals/mb_ref_guide.pdf, 2.6.217 [6] Joshua Vasquez, Sort faster with FPGAs, http://hackaday.com/216/1/2/a-lineartime-sorting-algorithm-for-fpgas/, 27.6.217 [7] Vašak M., Perić N.,Robust invariant set-based protection of multi-mass electrical drives, COMPEL - The international journal for computation and mathematics in electrical and electronic engineering, 29/1, 21, str. 25-22 [8] Andrew Shapira, 1.9. 27., Find the log base 2 of an N-bit integer in O(lg(N)) operations, http://graphics.stanford.edu/~seander/bithacks.html, 25.6.217 42
Sažetak Kompleksni mehnički sustavi, svakodnevno izloženi nepredvidljivom okolišu, imaju vrlo stroge granice rada čije kršenje dovodi do velike tehničke ili ekonomske štete. Algoritmima koji upravljaju takvim sustavima dodaju se zaštitni algoritmi koji ograničavaju upravljački signal. U radu je implementiran jedan takav algoritam zasnovan na proračunanom invarijantnom skupu korištenjem procesora i specijaliziranog pomoćnog slopovlja realiziranih na programirljivim logičkim poljima. Detaljno je opisan svaki dio pomoćnog sklopovlja te način pristupanja sklopovlju programskim kodom koji se izvodi na procesoru. Na kraju su uspoređene performanse različitih konfiguracija izvedbe i idealnog modela sustava. Iako su vrijednosti dobivenih rezultata loše, rezultati su obećavajući za korištenje FPGA čipova za implementaciju tog algoritma ili sličnih algoritama temeljenih na invarijantnom skupu. Bolji rezultati izvedbe algoritma mogu se dobiti na moćnijem sklopovlju. Ključni pojmovi: Programabilna logika (FPGA) (engl. Programmable Logic Array), Sustav zaštite radne anvelope, Nadbrzinska zaštita vjetroagregata, System generator, Aritmetika s fiksnim zarezom, Kvantitativna analiza preciznosti aritmetike 43
Summary Complex mechanical systems, which are exposed to hostile environment every day, include very strict operating limits so as not to cause technical or economic damage. Control algorithms for these systems often require additional protective algorithms which limit the control signal that is applied to the plant. This paper describes the implementation of such protection algorithm. The algorithm is based on a pre-calculated control invariant set. The implementation uses both a microprocessor and a special coprocessor synthesized from logic fabric. Parts of the coprocessor and software drivers are described. Different configurations of the implementation are compared to the ideal model. Although the results are not as good as strict industrial environment may require, they paint a promising picture for the use of FPGA chips to implement this or similar invariant set-based algorithms. More accurate results of the implemented algorithm can be obtained with the more powerful hardware. Keywords: Programmable Logic Array, Operating envelope protection system, Wind turbine overspeed protection, System generator,fixed-point arithmetic, Quantitative arithmetic precision analysis 44
Privitak Sinteza sklopovlja iz MATLAB-a u EDK-u Prije nego što se pomoćno sklopovlje može spojiti na procesor potrebno ga je izvesti iz MATLAB-a. Radi inicijalizacije vrijednosti u memoriji prave se tekstualne datoteke od kojih svaka sadrži jedan stupac matrice. Put do tekstualnih datoteka stavlja se u polje Initial value vector kao na slici. Postupak se ponavlja za svaki stupac matrice. Nakon postavljanja inicijalnih vrijednosti potrebno je sinkronizirati EDK blok, koji određuje što će procesor vidjeti kao memoriju, te u kartici Implementation postaviti Bus Type kao PLB v4.6. Nakon toga otvara se System generator blok. Pod polje compilation postavlja se Export as pcore to EDK. U postavkama tog načina kompilacije potrebno je na EDK-u pokazati projekt u koji se sklop želi uvesti. Zbog toga što ovaj dizajn sadrži dodatne MCode i Black Box blokove potrebno je u direktorij gdje se nalazi model staviti sljedeću MATLAB funkciju: function sum = add5( x1,x2,x3,x4,x5,x6 ) % adds all 5 values sum=xfix({xlsigned, 16,14,xlSaturate,xlRound},x1+x2+x3+x4+x5+x6); 45
end i VHDL kod koji opisuje ćelije za sortiranje: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity cell is Port ( clk : in STD_LOGIC; ce : in STD_LOGIC; rst : in STD_LOGIC; enable : in STD_LOGIC; prev_cell_pushed : in STD_LOGIC; prev_cell_state : in STD_LOGIC; prev_cell_data : in STD_LOGIC_VECTOR (15 downto ); prev_cell_index : in STD_LOGIC_VECTOR (15 downto ); new_data : in STD_LOGIC_VECTOR(15 downto ); new_index : in STD_LOGIC_VECTOR(15 downto ); data_out : out STD_LOGIC_VECTOR (15 downto ); index_out : out STD_LOGIC_VECTOR (15 downto ); cell_pushed : out STD_LOGIC; cell_state_out : out STD_LOGIC ); end cell; architecture Behavioral of cell is type statetype is (EMPTY, OCCUPIED); signal data_valid: STD_LOGIC; signal cell_state: STD_LOGIC; signal cell_state2 : STD_LOGIC; signal state: statetype := EMPTY; signal data: STD_LOGIC_VECTOR(15 downto ) := (others => ''); signal data2: STD_LOGIC_VECTOR(15 downto ) := (others => ''); signal index: STD_LOGIC_VECTOR(15 downto ) := (others => ''); 46
signal index2: STD_LOGIC_VECTOR(15 downto ) := (others => ''); signal push: STD_LOGIC; begin process (new_data,data) begin if (new_data > data) then data_valid <= '1'; else data_valid <= ''; end if; end process; process (clk,ce) begin if ce = '1' then if(rising_edge(clk)) then if rst = '1' then state <= EMPTY; cell_state <= ''; push <= ''; data <= (others => ''); index <= (others => ''); elsif enable = '1' then case state is when EMPTY => if prev_cell_pushed = '1' then state <= OCCUPIED; cell_state <= '1'; data <= prev_cell_data; index <= prev_cell_index; push <= ''; elsif prev_cell_state = '1' then state <= OCCUPIED; cell_state <= '1'; data <= new_data; index <= new_index; push <= ''; end if; 47
when OCCUPIED => if prev_cell_pushed = '1' then push <= '1'; data <= prev_cell_data; index <= prev_cell_index; elsif data_valid = '1' then push <= '1'; data <= new_data; index <= new_index; else state <= OCCUPIED; cell_state <= '1'; push <= ''; end if; when others => state <= EMPTY; cell_state <= ''; push <= ''; data <= (others => ''); index <= (others => ''); end case; end if; end if; end if; end process; process (clk,ce) begin if ce = '1' then if rising_edge(clk) then cell_state2 <= cell_state; cell_state_out <= cell_state2; data2 <= data; index2 <= index; cell_pushed <= push; data_out <= data2; index_out <= index2; end if; end if; end process; end Behavioral; 48
Konfiguracija EDK projekta Pri kreaciji EDK projekta potrebno je odabrati PLB system te zatim stvaranje novog dizajna. Kod odabira pločice potrebno je odabrati Spartan 3A Starter Kit zatim Single- Processor System. Postavke konfiguracije procesora potrebno je ostaviti kako su zadane (kasnije će se promijeniti). Postavke periferije navedene su na sljedećoj slici: Na sljedećem prozoru potrebno je omogućiti priručnu memoriju zatim kliknuti na gumb kojim se završava dizajn. Postavke MicroBlaze procesora potrebno je promijeniti na sljedeće: 49
Koraci za povezivanje generiranog sklopovlja su sljedeći: - U kartici Ports spojiti generirano sklopovlje na clock_generator_::clkout2 - Generirati adresni prostor pritiskom na za to predviđen gumb u kartici Addresses - Nakon konfiguracije kliknuti na Project Export design to SDK - Pričekati kraj sinteze (sinteza može potrajati nekoliko desetaka minuta,ovisno o računalu) U kartici Design Summary moguće je vidjeti Device utilization, odnosno koliko je čipa zauzeo dizajn. Za dizajn u ovom radu iskorištenost čipa bila je kao na sljedećoj slici. Kada se SDK pokrene za konfiguraciju sljediti korake: - U kartici Xilinx Tools Repositories dodati put do EDK projekta - Za kreaciju novog projekta (uključujući i automatski generirane primjere aplikacija) otići na File New Application Project - Proširiti memoriju za gomilu i stog projekta, generiranjem novog linker scripta 5