• Nie Znaleziono Wyników

Układy arytmetyki resztowej w FPGA

Algorytm 10 Algorytm automatycznej generacji kompletnych jednostek arytmetycznych Dane wej´sciowe: M ∗, l

4.2 Jednostki arytmetyczne w strukturach FPGA

4.3.1 Opis struktury jednostek

Porównywane jednostki zostały zaimplementowane z u˙zyciem zestawu narz˛edzi opisanych na po-cz ˛atku rozdziału. Efektywna implementacja struktur układów arytmetycznych wymaga wykorzysta-nia zarówno rozwi ˛aza´n wydajnie implementowanych w FPGA, jak i mo˙zliwo´sci optymalizacji ukła-du oferowanych przez kompilator. Wykorzystanie kompilatora pozwala te˙z zwolni´c projektanta/kon-struktora z konieczno´sci implementowania układu z prymitywów dost˛epnych w FPGA, co znacznie przyspiesza i ułatwia budowanie systemów wykorzystuj ˛acych RNS.

U2

Opis struktur układów mno˙zenia akumulacyjnego dla systemu U2 przedstawiono na list. 4.2. Pakie-ty importowane na pocz ˛atku kodu zawieraj ˛a m.in. przeci ˛a˙zone operatory arytmetyczne. Pozwalaj ˛a one kompilatorowi na optymalizacj˛e układu i u˙zycie dedykowanej logiki zwi˛ekszaj ˛acej wydajno´s´c operacji arytmetycznych. Niestety, dokładne dane na temat samego procesu syntezy nie s ˛a dost˛epne.

polep-Listing 4.2. Opis jednostki mno˙zenia akumulacyjnego w j˛ezyku VHDL

l i b r a r y IEEE ;

u s e IEEE . STD_LOGIC_1164 . ALL; u s e IEEE . STD_LOGIC_ARITH . ALL ; u s e IEEE . STD_LOGIC_SIGNED . ALL ;

e n t i t y MAC_U2 i s P o r t ( X : i n s t d _ l o g i c _ v e c t o r ( 1 7 downto 0 ) ; Y : i n s t d _ l o g i c _ v e c t o r ( 3 5 downto 0 ) ; Z : i n s t d _ l o g i c _ v e c t o r ( 5 3 downto 0 ) ; W : o u t s t d _ l o g i c _ v e c t o r ( 5 3 downto 0 ) ) ; end MAC_U2 ; a r c h i t e c t u r e b eh o f MAC_U2 i s b e g i n W <= X ∗ Y + Z ; end B e h a v i o r a l ;

szenia parametrów AT. Modyfikacje dotyczyły zmian szeroko´sci wytwarzanych iloczynów cz˛e´scio-wych oraz struktury sumatora iloczynów cz˛e´sciocz˛e´scio-wych. Uzyskane wyniki były podobne do wygenero-wanych automatycznie. W nielicznych przypadkach układ opisany na niskim poziomie wprowadzał opó´znienia mniejsze o kilka procent kosztem kilku lub kilkunastoprocentowego wzrostu zajmowane-go obszaru.

RNS

Implementacja jednostek w RNS(2k − 1, 2k, 2k + 1) wymaga efektywnego opisu struktury układu

dla modułów2k± 1 dla k rz˛edu kilkunastu–kilkudziesi˛eciu bitów. Zaimplementowane jednostki s ˛a

Opis jednostek zamieszczono we wst˛epie teoretycznym (rozdz. 2.2.3, str. 50). Algorytm mno˙zenia modulo2k

− 1 według pracy [Zim99] wymaga poszerzenia o mo˙zliwo´s´c

do-dania składnika Z. Maksymalna warto´s´c wyra˙zenia X · Y + Z dla X, Y, Z ∈ [0, 2k − 1) wynosi 22k − 3 · 2k− 2. Operacja dodawania mo˙ze by´c wi˛ec wykonana bez obawy o zwi˛ekszenie zakresu

wyniku poza warto´s´c mo˙zliw ˛a do skorygowania przez ko´ncowy sumator modulo2k−1 dodaj ˛acy dwa k–bitowe pola wyniku. Opis układu w j˛ezyku VHDL przedstawiono na list. 4.3. Zapis ten umo˙zliwia

kompilatorowi VHDL optymalne wykorzystanie układów mno˙z ˛acych 2· k bity i sumatorów CPA.

Struktura poł ˛acze´n po implementacji nie jest dokładnym odwzorowaniem schematu wynikaj ˛acego bezpo´srednio z list. 4.3. Analiza struktury poł ˛acze´n bloków wewn ˛atrz układu FPGA po implemen-tacji wykazała, ˙ze kompilator dokonuje cz˛e´sciowej redukcji modulo na etapie sumowania iloczynów cz˛e´sciowych.

Listing 4.3. Opis jednostki MAC modulo2k− 1

tmp1 <= X ∗ Y + Z ;

tmp2 <= ( ’ 0 ’ & tmp1 ( k−1 downto 0 ) ) +

( ’ 0 ’ & tmp1 ( 2∗ k−1 downto k ) ) ; W <= tmp2 ( k−1 downto 0 ) + tmp2 ( k ) ) ;

Jednostka MAC dla modułu2k+ 1 jest implementowana na podstawie układu mno˙z ˛acego zapre-zentowanego w pracy [Beu02]. Układ ten zawiera matryc˛e mno˙z ˛ac ˛a, multiplekser i sumator modulo

2k + 1. Mo˙zna w nim pomin ˛a´c multiplekser, co pozwala zmniejszy´c zajmowany obszar i wprowa-dzane opó´znienia za cen˛e wprowadzenia podwójnej reprezentacji zera. Opis układu w j˛ezyku VHDL przedstawiono na list. 4.4. Równie˙z w tym przypadku mo˙zliwe było zintegrowanie dodatkowego su-matora z matryc ˛a mno˙z ˛ac ˛a, co pozwala przenie´s´c ci˛e˙zar optymalizacji układu na kompilator VHDL.

Listing 4.4. Opis jednostki MAC modulo2k+ 1

tmp1 <= X ∗ Y + Z ;

tmp2 <= ( " 0 " & tmp1 ( k−1 downto 0 ) ) +

( " 0 " & ( n o t tmp1 ( 2∗ k−1 downto k ) ) ) + " 1 " ; W <= ( " 0 " & tmp2 ( k−1 downto 0 ) ) +

HRNS

Tor obliczeniowy w opisywanym HRNS składa si˛e z zestawu jednostek dla wszystkich czynników liczb2k

± 1 i jednostki modulo 2k. Jednostki dla czynników s ˛a generowane przy pomocy algorytmu zaprezentowanego w rozdz. 3.2 (alg. 10, str. 129).

Algorytm 10 generuje dla zadanego modułu zbiór jednostek o ró˙znych parametrach AT . Wybór

odpowiedniej wersji jednostek dla prezentowanego HRNS mo˙zna przeprowadzi´c na wiele sposobów. Dane zaprezentowane poni˙zej dotycz ˛a dwóch przypadków. W obu wybór jednostek przeprowadzany jest w dwóch krokach. W pierwszym kroku wybierana jest jednostka dla czynnika, dla którego dłu-go´s´c ´scie˙zki krytycznej b˛edzie najwi˛eksza spo´sród wybranych układów. Wybrany układ wyznaczał granic˛e szybko´sci jednostki MAC dla zadanego HRNS.

Po okre´sleniu maksymalnego opó´znienia całego układu wybierane s ˛a struktury jednostek MAC dla pozostałych czynników. Wybierane były jednostki najmniejsze spo´sród układów o ´scie˙zce kry-tycznej krótszej od układu o najwi˛ekszym wprowadzanym opó´znieniu. Reguła ta pozwala na skon-struowanie jednostki o odpowiedniej długo´sci ´scie˙zki krytycznej przy zachowaniu niewielkiego ob-szaru.

Ró˙znica pomi˛edzy zastosowanymi metodami doboru jednostek dotyczy sposobu wyboru układu o najdłu˙zszej ´scie˙zce krytycznej. W pierwszym przypadku dla ka˙zdego czynnika wybierany jest układ najszybszy, po czym spo´sród wyników typowany jest układ najwolniejszy. Dzi˛eki temu mo˙zliwe jest zbudowanie układu o minimalnym opó´znieniu.

W wi˛ekszo´sci przypadków ograniczeniem szybko´sci całego układu jest długo´s´c ´scie˙zki krytycz-nej dla jednostki modulo najwi˛ekszy czynnik liczb 2k± 1. Jednostka ta zajmuje du˙zy obszar, a jej

znalezienie wymaga sprawdzenia du˙zej liczby konfiguracji. Z tego powodu zastosowano tak˙ze drugie kryterium wyboru jednostki ograniczaj ˛acej szybko´s´c całego układu. Dla ka˙zdego czynnika wybierano układ najszybszy, ale tylko spo´sród jednostek, w których iloczyny cz˛e´sciowe obliczane s ˛a za pomoc ˛a układów mno˙z ˛acych2· k lub 3 · k bitów. Spo´sród wybranych układów typowano nast˛epnie rozwi

˛a-zanie o najdłu˙zszej ´scie˙zce krytycznej. Wybrana jednostka zajmowała znacznie mniejszy obszar od układu najszybszego dla danego czynnika. W zwi ˛azku z tym obszar całego układu uległ zmniejszeniu kosztem niewielkiego wzrostu długo´sci ´scie˙zki krytycznej.