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—