Realizacja w układach FPGA jednostek - kik
Transkrypt
Realizacja w układach FPGA jednostek - kik
Oleg Maslennikow Natalia Maslennikowa Piotr Pawłowski Włodzimierz Khadzhynov Anatoli Sergyienko Politechnika Koszalińska Wydział Elektroniki i Informatyki ul. JJ Śniadeckich 2, 75-453 Koszalin email: [email protected] National Technical University of Ukraine, pr. Pobedy 37, Kiev, Ukraine email: [email protected] Realizacja w układach FPGA jednostek operacyjnych działających w arytmetyce ułamkowej Słowa kluczowe: układy i platformy reprogramowalne FPGA, jednostki operacyjne ALU stało- i zmiennoprzecinkowe, arytmetyka ułamkowa RFA, układy mnoŜące, bloki normalizacji wyników, algorytmy algebry liniowej STRESZCZENIE In this paper, use of the rational fraction arithmetic in the system-on-chip processing units destined for implementation in modern FPGA devices is proposed. This allows to reduce the hardware complexity of the arithmetic-logic units in comparison with similar arithmetic units operating with fixed-point or float-point numbers with the same precision. As the example, in this paper, the project of the 35-bit rational fraction arithmetic unit is proposed, which is destined to performing of addition, multiplication, division, multiplication with addition and division with addition operations. The architecture of the proposed arithmetic unit is adapted to the internal structure of the Xilinx reconfigurable platforms (like to Virtex II or Virtex 4), therefore its hardware complexity is up to 4,5 times less in comparison with similar float-point arithmetic units. 1. WPROWADZENIE Nowoczesna technologia VLSI pozwala na umieszczenie w pojedynczym układzie scalonym ASIC całego złoŜonego systemu cyfrowego zawierającego ponad 200 mln bramek, tzw. systemu jednoukładowego SoC (ang. system-on-chip). Jednak w przypadku małoseryjnej produkcji systemu SoC jest on realizowany w oparciu o inne, znacznie tańsze niŜ ASIC platformy sprzętowe, np. nowoczesne platformy reprogramowalne FPGA [1], jak np. układy VirtexIIPro [2] i Virtex4 firmy Xilinx [3, 4], które poza ogromnym polem komórek z architekturą FPGA, zawierają kilka set stałoprzecinkowych bloków mnoŜących z sumatorami-akumulatorami i blokami pamięci dwuportowej RAM, a nawet jądra 32-bitowych mikroprocesorów RISC (bez jednostek zmiennoprzecinkowych). W przypadku realizacji w platformach reprogramowalnych algorytmów regularnych, wymagających wykonania duŜej liczby operacji mnoŜenia i dodawania (jak np. większość algorytmów cyfrowego przetwarzania sygnałów [4, 5]), platformy reprogramowalne pozwalają uzyskać wysoką wydajność systemu przy niskiej cenie i poborze mocy [4]. Jednak VI Krajowa Konferencja Elektroniki —1— realizacja algorytmów innych grup, np. algebry liniowej [5, 6], moŜe wymagać dodatkowo wykonania operacji dzielenia, przy czym czas wykonania w/w operacji powinien być porównywalny z czasem wykonania operacji mnoŜenia (szczególnie waŜnym to ograniczenie jest w przypadku równoległej realizacji algorytmu). Ponadto, wymagane jest przeprowadzenie obliczeń na liczbach zmiennoprzecinkowych, czasami o podwójnej dokładności. Wymaga to wprowadzenie do jednostki przetwarzającej SoC bloków dzielenia oraz bloków operacyjnych działających w arytmetyce zmiennoprzecinkowej lub stałoprzecinkowej o podwójnej dokładności. Niestety, do realizacji bloków dzielenia w platformach reprogramowalnych nie da się wykorzystać wbudowane bloki mnoŜące. Ponadto, realizacja szybkich bloków dzielenia, jak równieŜ jednostek zmiennoprzecinkowych wymaga ogromnych zasobów układu reprogramowalnego: np. w pracy [7] podliczono, Ŝe złoŜoność sprzętowa bloku dzielenia zmiennoprzecinkowego jest około 10 razy większa od złoŜoności bloku mnoŜenia zmiennoprzecinkowego (pod względem liczby wykorzystanych bloków CLB), a autorzy podliczyli, Ŝe złoŜoność bloku mnoŜenia zmiennoprzecinkowego z akumulatorem jest 4-5 razy większa od złoŜoności bloku mnoŜenia stałoprzecinkowego (równieŜ pod względem liczby wykorzystanych bloków CLB). Z tego powodu celem niniejszej pracy jest optymalizacja jednostek operacyjnych SoC przeznaczonych do realizacji w obszarach lub platformach reprogramowalnych pod względem złoŜoności sprzętowej oraz wydajności poprzez zastosowanie w nich arytmetyki ułamkowej RFA [8] (ang. rational fraction arithmetic). W blokach operacyjnych działających w arytmetyce ułamkowej kaŜda liczba l jest przedstawiona w postaci ułamku wymiernego a/b, gdzie a i b są n-bitowe liczby całkowite. Jednak, dokładność takiej 2n-bitowej liczby l jest nie mniejsza od dokładności zapisu tejŜe liczby w 2n-bitowym formacie stałoprzecinkowym (jak i zmiennoprzecinkowym). Ale mnoŜenie dwóch ułamków a/b i c/d w RFA sprowadza się do wykonania dwóch operacji mnoŜenia liczb n-bitowych, zamiast jednego mnoŜenia dwóch liczb 2n-bitowych w formacie stałoprzecinkowym. Dlatego złoŜoność sprzętowa kombinacyjnego bloku mnoŜącego RFA i jego opóźnienie są około 2 razy mniejsze w porównaniu do kombinacyjnego bloku mnoŜącego dwie 2n-bitowe liczby w formacie stałoprzecinkowym. Porównanie złoŜoności sprzętowej bloku dzielenia RFA z blokiem dzielenia dwóch 2n-bitowych liczb w formacie stałoprzecinkowym wypada jeszcze lepiej, poniewaŜ dzielenie w RFA sprowadza się do wykonania dwóch operacji mnoŜenia liczb n-bitowych. W związku z tym, w niniejszej pracy opracowano potokową jednostkę arytmetyczną RFA, która jest przeznaczona do realizacji w platformach reprogramowalnych i wykonuje operację mnoŜenia, dodawania, dzielenia, mnoŜenia z dodawaniem oraz dzielenia z dodawaniem. Porównanie parametrów opracowanej jednostki ze znanymi, podobnymi jednostkami potokowymi działającymi w arytmetyce zmiennoprzecinkowej świadczy o ponad trzykrotnej przewadze jednostki RFA pod względem liczby wykorzystanych bloków CLB przy porównywalnej maksymalnej częstotliwości zegara systemowego. 2. ZARYS ARYTMETYKI UŁAMKOWEJ RFA W poprzednim rozdziale było zaznaczono, ze w blokach operacyjnych działających w arytmetyce ułamkowej kaŜda liczba l jest przedstawiona w postaci ułamku wymiernego a/b, gdzie a i b są n-bitowe liczby całkowite, b ≠ 0. Z tego powodu dla przechowania liczb potrzebne są 2n-bitowe komórki pamięci i rejestry. Jednak, dokładność takiej 2n-bitowej liczby l jest nie mniejsza (a często jest większa) od dokładności zapisu tejŜe liczby w 2nbitowym formacie stałoprzecinkowym (jak i zmiennoprzecinkowym). Na przykład, liczba π z dokładnością do siedmiu cyfr dziesiętnych moŜe być przedstawiona ułamkiem 355/113, zawierającym razem (w liczniku i mianowniku) tylko 6 cyfr dziesiętnych. Format ułamkowy —2— pozwala na dokładniejsze przedstawienie liczb, w porównaniu do formatów stałoprzecinkowego i zmiennoprzecinkowego, jeszcze i dlatego, Ŝe liczby dziesiętne są przedstawione w tych formatach z pewnymi błędami zaokrągleń, których wielkość zaleŜy od liczby bitów w reprezentacji liczby. Dzięki temu, np. (1/9)*9 zawsze będzie równe 1 w arytmetyce ułamkowej, ale nie zawsze będzie równe 1 w arytmetyce stałoprzecinkowej lub zmiennoprzecinkowej. RóŜnica liczby 1/9 i jej reprezentacji 16-bitowej w formacie stałoprzecinkowym wynosi ok. 0,0000187, a (1/9)*9 w tym przypadku będzie równe 0,9998932. śeby porównać dokładność arytmetyki ułamkowej i stałoprzecinkowej, autorzy opracowali dwa modele VHDL generatora funkcji sinx i cosx, zakładając, Ŝe okres sinusoidy mieści N = 256 próbek, tj. kąta obrotu θ wynosi θ = 2π/N = 2π/256. Dla takiej wartości kąta obliczone zostały współczynniki sinθ = 652/26573 i cosθ = 26565/26573, które uczestniczyły w obrocie wektora (x, y) o początkowych wartościach współrzędnych (x, y) = (1,0) w oparciu o wyraŜenia iteracyjne (1) x* = x ⋅ cos θ − y ⋅ sin θ i y * = x ⋅ sin θ + y ⋅ cos θ . (1) Pierwszy generator działał na 32-bitowych danych stałoprzecinkowych i generował sinusoidę na wyjściu z okresem 256,1 taktów, której amplituda jednak ciągle się zmniejszała z powodu błędów zaokrągleń, i po 47 tys. iteracji okazała się równa zero (zamiast 1). Drugi generator działał na 20-bitowych ułamkach w arytmetyce RFA, i generował sinusoidę na wyjściu z okresem 256,054 taktów, której amplituda po 256 tys. iteracji wyniosła 1,029 (zamiast 1). Kilka dodatkowych wiadomości teoretycznych i właściwości arytmetyki ułamkowej przedstawiono poniŜej: 1. ułamki a/b i c/d są równe wtedy i tylko wtedy, gdy ad = bc; 2. ułamek a/b, w którym a i b są liczbami całkowitymi, b ≠ 0, przedstawia liczbę wymierną; 3. liczby wymierne moŜna przedstawić za pomocą ułamka dziesiętnego skończonego, np. 7/5 = 1,4, lub ułamka dziesiętnego nieskończonego, ale okresowego; np. ułamek 0,444... = 0,(4) przedstawia liczbę 4/9; 4. ułamki dziesiętne nieskończone nieokresowe przedstawiają liczby rzeczywiste niewymierne, np. 2,7182818285... = e, 3,1415926536... = π ; 5. jeśli y – a/b = r1 > 0 oraz y – c/d = r2 < 0, to dla medianty (a+c)/(b+d) będzie sprawiedliwym wyraŜenie |y – (a+c)/(b+d)| < r1 lub 6. |y – (a+c)/(b+d)| < r2; Stad wynika, Ŝe konstruując medianty, moŜna przedstawiać w postaci ułamków a/b dowolne liczby niewymierne y z zadaną dokładnością; podstawowe operacje arytmetyczne na ułamkach: • dodawanie (odejmowanie): a/b ± c/d = (a⋅d ± b⋅c)/(b⋅d); (2) • wymaga 3 operacji mnoŜenia i 1 dodawanie (odejmowanie); • porównanie a/b i c/d: a⋅d – b⋅c; – 2 operacji mnoŜenia i odejmowanie (3) • mnoŜenie: (a/b) * (c/d) = a⋅c / (b⋅d); – 2 operacji mnoŜenia (4) • dzielenie: (a/b) / (c/d) = (a⋅d) / (b⋅c) – 2 operacji mnoŜenia (5) Z przedstawionego wyŜej zarysu arytmetyki ułamkowej wynika m.in., Ŝe mnoŜenie ułamków a/b i c/d sprowadza się w RFA do wykonania dwóch operacji mnoŜenia liczb nbitowych, zamiast jednego mnoŜenia dwóch liczb 2n-bitowych w formacie stałoprzecinkowym. Biorąc pod uwagę, Ŝe złoŜoność sprzętowa n-bitowego kombinacyjnego bloku mnoŜącego wynosi O(n2) sumatorów jednobitowych (ang. FA – full adder), a jego opóźnienie wynosi O(n⋅tFA), gdzie tFA - czas opóźnienia FA, moŜna wywnioskować, Ŝe VI Krajowa Konferencja Elektroniki —3— złoŜoność sprzętowa i opóźnienie kombinacyjnego bloku mnoŜącego w RFA, zgodnie z wyraŜeniem (4), wynosi odpowiednio O(n2) FA i O(2⋅n⋅tFA) (jeśli blok mnoŜenia RFA zawiera jeden n-bitowy blok mnoŜący), lub odpowiednio O(2⋅n2) FA i O(n⋅tFA) (jeśli blok mnoŜenia RFA zawiera dwa n-bitowych bloków mnoŜących). Natomiast złoŜoność kombinacyjnego bloku mnoŜącego 2n-bitowe liczby w formacie stałoprzecinkowym wynosi O(4⋅n2) FA, a jego opóźnienie wynosi O(2⋅n⋅tFA). Z tego wynika, Ŝe złoŜoność bloku mnoŜącego RFA jest od 2 do 4 razy mniejsza, a jego opóźnienie - nawet 2 razy mniejsze w porównaniu do odpowiedniego bloku mnoŜącego liczby stałoprzecinkowe. Porównanie złoŜoności sprzętowej bloku dzielenia n-bitowych ułamków z blokiem dzielenia dwóch 2nbitowych liczb w formacie stałoprzecinkowym wypada jeszcze lepiej, poniewaŜ sprowadza się ono do wykonania 2 operacji mnoŜenia liczb n-bitowych. Niestety, arytmetyka ułamkowa ma równieŜ swoi wady, które jednak, zdaniem autorów, da się w duŜym stopniu zredukować w przypadku realizacji jednostek operacyjnych RFA w platformach reprogramowalnych. Pierwszą wadą jest to, Ŝe licznik i mianownik w jednostkach przetwarzających RFA są przedstawione w postaci stałoprzecinkowych liczb binarnych. Z tego powodu, po wykonaniu, np. operacji mnoŜenia dwóch ułamków nbitowych a/b i c/d powstaje ułamek 2n-bitowy a⋅c / (b⋅d), tj. liczba bitów w otrzymywanych wynikach ciągle wzrasta. Wyeliminować tę wadę moŜna, zdaniem autorów, poprzez normalizację wyniku i jego zaokrąglenie do ułamku n-bitowego po wykonaniu kaŜdej operacji (2) – (5), przy czym normalizacja w tym przypadku odbywa się poprzez przesunięcie w lewo równocześnie licznika i mianownika (co reprezentuje rys. 1). NaleŜy zaznaczyć, Ŝe wymaganą dokładność obliczeń moŜe być w przypadku realizacji arytmetyki RFA w układach reprogramowalnych moŜna osiągnąć poprzez wybór odpowiedniej liczby bitów n w reprezentacji ułamków, i konstruowanie odpowiednich bloków mnoŜących. Natomiast w platformach reprogramowalnych typu Virtex IIPro i Virtex 4, n –bitowe bloki mnoŜące RFA (w przypadku n > 18) trzeba realizować w oparciu o kilka wbudowanych 18-bitowych bloków mnoŜenia. Kolejną wadą arytmetyki ułamkowej jest dość skomplikowana realizacja operacji dodawania (odejmowania), która wymaga wykonania 3 operacji mnoŜenia. Jednak trudno sobie wyobrazić jednostkę arytmetyczno-logiczna (ALU), która jest przeznaczona do realizacji wyłącznie operacji dodawania. 0,0101 0,1000 + 0,0101 0,1000 0,0101 0,1000 0,0010 0,1001 0,0010 * : 0,1001 0,0010 0,1001 = = = 0,00111101 Normalizacja i zaokrąglenie 0,01001000 0,00001010 0,1001 Normalizacja i zaokrąglenie 0,01001000 0,00101101 0,1000 0,0001 0,1001 Normalizacja i zaokrąglenie 0,00010000 0,1011 0,0100 Rys. 1. Zasady normalizacji i zaokrąglenia wyników operacji arytmetycznych w RFA Na potwierdzenie tej tezy w następnym rozdziale pracy autorzy proponują projekt jednostki RFA realizującej kilka podstawowych operacji arytmetycznych i porównują jej parametry —4— techniczne z parametrami podobnych ALU zmiennoprzecinkowych. 3. PROJEKT JEDNOSTKI ARYTMETYCZNEJ RFA I JEJ IMPLEMENTACJA W PLATFORMACH REPROGRAMOWALNYCH Opracowana jednostka działa w arytmetyce ułamkowej na liczbach n-bitowych i jest przeznaczona do wykonania podstawowych operacji arytmetycznych spotykanych w algorytmach algebry liniowej, tj. operacji typu dodawanie P = X+Y, mnoŜenie P = A⋅X, mnoŜenie z dodawaniem P = A⋅X+Y, dzielenie P = A/X oraz dzielenie z dodawaniem P = A/X+Y na n-bitowych ułamkach. Jednostka zawiera pięć n-bitowych bloków mnoŜących (MPU), jeden n-bitowy sumator (SM) i dwa bloki normalizacji wyniku (NM). Struktura wewnętrzna takiego ALU jest przedstawiona na rys. 2, gdzie An, Xn, Yn i Pn reprezentują nbitowe liczniki, a Ad, Xd, Yd i Pd – n-bitowe mianowniki odpowiednio argumentów i wyniku operacji. NaleŜy zaznaczyć, Ŝe w przypadku wykonania operacji dzielenia lub dzielenia z dodawaniem wartości Xn i Xd naleŜy zamienić miejscami a w przypadku operacji mnoŜenia lub dzielenia przyjąć Y = 0, tj. Yn = 0 i Yd = 1. a) An Ad Xn Xd MPU Yn Yd b) MPU An 49 48 47 46 45 15 14 CD 13 ... ....... NM1 34 ... MPU MPU MPU 0 ...... e3 e2 e1 e0 … 0 Ad 49 48 47 46 45 ... SM ...... NM2 34 ... Pn P d 0 Rys. 2. Projekt jednostki RFA (a) oraz struktura wewnętrzna bloku normalizacji NM1 (b) Jako przykład, wyraŜenie (6) reprezentuję realizację, w opracowanym ALU, operacji mnoŜenia z dodawaniem. Pn An X n Yn ( An ⋅ X n ) ⋅ Yd + ( Ad ⋅ X d ) ⋅ Yn = ⋅ + = Pd Ad X d Yd ( Ad ⋅ X d ) ⋅ Yd (6) Opracowane ALU zostało wykorzystane w jednostce przetwarzającej przeznaczonej do rozwiązania układów równań liniowych w oparciu o metodę gradientów sprzęŜonych [10]. ZbieŜność tej iteracyjnej metody w duŜym stopniu zaleŜy od dokładności prowadzonych obliczeń [5], dlatego zwykle ona jest realizowana w arytmetyce zmiennoprzecinkowej z mbitową mantysą, gdzie wartość m zaleŜy od rozmiaru macierzy danych wejściowych N. W związku z tym w oparciu o ALU z rys. 2a autorzy zaprojektowali 36-bitową jednostkę przetwarzającą RFA, która została zrealizowana w układzie Xilinx XC2VP4. Zaprojektowana jednostka korzysta z 18-bitowych wbudowanych bloków mnoŜących oraz wbudowanych 18 Kb bloków pamięci dwuportowej. NaleŜy zaznaczyć, Ŝe bloki normalizacji NM1 i NM2 (które wykonują przesunięcie wyników pośrednich odpowiednio od 0 do 7 bitów oraz od 0 do 15 bitów) zostały zrealizowane na blokach CLB zgodnie z rys. 2b, a kaŜdy z pięciu 35bitowych bloków mnoŜących ALU został zrealizowany w oparciu o 4 wbudowane bloki VI Krajowa Konferencja Elektroniki —5— mnoŜące układu XC2VP4. Poza tym, w celu zwiększenia maksymalnej częstotliwości działania jednostki, zaprojektowana jednostka działa w trybie potokowym 9-stopniowym. Tabela 1 reprezentuje wyniki implementacji w układzie Virtex IIPro opracowanego ALU ułamkowego i znanych ALU zmiennoprzecinkowych [7, 9], wykonujących podobny zbiór operacji z analogiczną dokładnością. Ich analiza świadczy o ponad trzykrotnej przewadze jednostki RFA pod względem liczby wykorzystanych bloków CLB przy porównywalnej maksymalnej częstotliwości zegara systemowego. Tabela 1. Wyniki implementacji proponowanego ALU ze znanymi w układzie Virtex IIPro Parametry ALU ALU ułamkowe ALU z [7] ALU z [9]* Liczba wykorzystanych bloków CLB (slice), Liczba wykorzystanych bloków mnoŜących 1005 20 4625 9 2825 9 Liczba stopni w potoku 9 34 13 Maksymalna częstotliwość działania, MHz 138 120 140 * brak operacji dzielenia 4. PODSUMOWANIE W wyniku przeprowadzonych badań autorzy udowodnili, Ŝe stosowanie arytmetyki ułamkowej RFA w jednostkach operacyjnych systemów jednoukładowych przeznaczonych do realizacji algorytmów algebry liniowej i innych algorytmów regularnych wymagających wykonania operacji dzielenia, pozwala: • zmniejszyć ich złoŜoność sprzętową (w porównaniu do odpowiednich jednostek pzetwarzających działających w arytmetyce stałoprzecinkowej, przy zachowaniu zadanej dokładności obliczeń), dzięki dwukrotnemu zmniejszeniu złoŜoności sprzętowej kombinacyjnych bloków mnoŜenia i zamiany bloków dzielenia na bloki mnoŜenia; • zwiększyć wydajność jednostek przetwarzających, dzięki zmniejszeniu czasu opóźnienia bloków mnoŜenia i szczególnie dzielenia, moŜliwości wykorzystania wbudowanych bloków mnoŜenia lub bloków DSP (w przypadku wykorzystania platform reprogramowalnych, np. Xilinx Virtex IIPro, Virtex 4, Altera Stratix II) oraz moŜliwości realizacji, w tym samym obszarze reprogramowalnym SoC, większej liczby bloków operacyjnych. BIBLIOGRAFIA [1] M. Keating, P. Bricaud. Reuse Methology Manual For System-on-a-Chip Design. Kluwer Academic Publishers, 1999. [2] The Programmable Logic Data Book. Xilinx, Inc., 2003. [3] E. Goetting. Introducing the new Virtex 4 FPGA Family. Xcell jornal, Xilinx, 2005, Issue 52, pp. 6-9. [4] N. Battson. Designing with the Virtex 4 XtremeDSP Slice. Xcell Journal, Xilinx, Issue 52, 2005, pp. 28-31. [5] L. V. Fausett. Numerical Methods: Algorithms and Applications, Prentice Hall, 2003. [6] M. Cosnard, D. Trystram. Parallel Algorithms and Architectures. Int. Thomson Computer Press, 1995. [7] K. D. Underwood, K. S. Hemmert. Closing the Gap: CPU and FPGA Trends in sustained Floating Point BLAS Performance. Proc. IEEE Symp. Field Programmable Custom Computing Machines, FCCM 2004. [8] B. K. P. Horn. Rational Arithmetic for Minicomputers. Software – Practice and Experience, Vol. 8, 1978, pp. 171-176. [9] Dou, Y., Vassiliadis, S., Kuzmanov, G.K, Gaydadjiev, G.N.:64-bit Floating point FPGA Matrix Multiplication. ACM/SIGDA 13-th Int. Symp. on Field Programmable Gate Arrays, FPGA-2005, pp.86-95. [10] O. Maslennikow, V. Lepekha, A. Sergyienko A. FPGA Implementation of the Conjugate Gradient Method. Lecture Notes in Computer Science, Springer, 2006, Vol.3911, pp. 526-533. Praca wykonana w ramach grantu Ministerstwa Nauki i Szkolnictwa WyŜszego N515 002 32/0176. —6—