• Nie Znaleziono Wyników

Metody mnożenia liczb ze znakiem w U2

N/A
N/A
Protected

Academic year: 2021

Share "Metody mnożenia liczb ze znakiem w U2"

Copied!
13
0
0

Pełen tekst

(1)

Propozycja metody mnoŜenia liczb ze znakiem

Sławomir Gryś

Politechnika Częstochowska, Wydział Elektryczny

Abstract:

An efficient technique of signed binary multiplication using unsigned multiply instruction was presented in this paper. A performance of the proposed technique was compared to the software emulated versions of classical techniques such as: radix-2 Booth method, reversal of sign method (negative to positive conversion) and sign extension method. Numerous examples were provided to show the efficiency of the technique in the context of practical software implementation. The proposed algorithm is suitable for embedded systems based on the widespread microprocessors/microcontrollers which have an unsigned multiplication in their instruction set but they lack signed multiply instruction. The samples of code presenting the solution of signed multiplication problem using various techniques were prepared in an assembly language for MCS 8051 compatible microcontroller. The comparison of the performance of algorithms was carried out also for 8051 core treated as reference microcontroller architecture but the obtained conclusions are potentially general and not only limited to this microcontroller.

Keywords:

arithmetic algorithms, signed multiplication, embedded systems, assembly language

1. Wprowadzenie

Istnieją zastosowania soystemów wbudowanych (ang. embedded systems), w których zdolność do wykonywania działań arytmetycznych przez mikrprocesor, będący „sercem” systemu wbudowanego, lub specjalizowany układ arytmetyczny, odgrywa kluczową rolę w zapewnieniu wymaganej funkcjonalności i wydajności urządzenia. Do tego obszaru zastosowań naleŜy zaliczyć, m.in.: systemy pomiarowo-sterujące, urządzenia medyczne, inteligentne sterowniki silników, systemy bezpieczeństwa, układy elektroniki komercyjnej, itp. Jednym z elementarnych działań arytmetycznych jest mnoŜenie liczb ze znakiem, zapisanych w powszechnie stosowanym kodzie uzupełnień do dwóch (ang. two’s complement). Rozwiązania czysto sprzętowe w formie układów mnoŜących wykonanych w technologii VLSI, przedyskutowano w wielu publikacjach, m.in. [1-6]. Przykładowo do najszybszych zalicza się układ mnoŜący Wallace [7-9], czy rozwiązanie zaproponowane przez Baugh’a i Wooley’a w pracy [10].

(2)

Niniejszy artykuł poświęcono programowym rozwiązaniom operacji mnoŜenia, przeznaczonym do implementacji w relatywnie prostych systemach wbudowanych wyposaŜonych w 8/16 bitowe mikroprocesory, które nie posiadają w liście rozkazów mnoŜenia liczb ze znakiem. Reprezentantami tej grupy mikroprocesorów są m.in.: 8051, Freescale 68HC08 i HCS12, Atmel ATtiny, Zilog eZ8core!, STMicroelectronics ST7, Microchip PIC16/18, Texas Instruments MSP430, NEC 78K0S/0R i in.

Zadanie mnoŜenia liczb ze znakiem, przykładowo c=a*b, przy spełnieniu poniŜszych załoŜeń:

- mnoŜna, mnoŜnik i wynik mnoŜenia są przechowywane za pomocą k bitów, - szerokość rejestru (sprzętowa długość słowa) jest równa k bitów,

- wynik mieści się w zakresie liczbowym wynikającym z ilości przyjętych k bitów, jest realizowalne bezpośrednio za pomocą rozkazu mnoŜenia liczb bez znaku. Ten przypadek obrazuje poniŜszy fragment programu napisany w języku C – podpunkt a.

a) b)

void main() void main()

{ { int a; int a; int b; int b; int c; long c; c=a*b; c=a*b; } }

W wielu praktycznych sytuacjach trudno jednak przyjąć tak optymistyczne załoŜenia. Nie mogąc przewidzieć zakresu zmienności argumentów wejściowych, powstaje ryzyko przekroczenia przyjętego zakresu liczbowego przez wynik mnoŜenia i w konsekwencji utratę danych. Sposobem na uniknięcie takiej sytuacji jest zarezerwowanie dla wyniku większej liczby bitów niŜ dla argumentów wejściowych. Oznacza to przyjęcie róŜnych typów dla danych numerycznych – podpunkt b, co komplikuje niestety kwestię realizacji mnoŜenia na poziomie listy rozkazów procesora.

Języki wysokiego poziomu uŜywają róŜnych, klasycznych technik emulacji programowej brakującego rozkazu mnoŜenia liczb ze znakiem. Są to m.in.: kodowanie Bootha, rozszerzenie znaku, konwersja liczb ujemnych do dodatnich.

Artykuł w dalszej części jest zorganizowany wg następującego planu. Rozdział 2 prezentuje podstawę matematyczną proponowanego algorytmu zakładając, Ŝe argumenty wejściowe jak i wynik mnoŜenia jest zapisany w kodzie uzupełnienia do dwóch. RównieŜ w tym rozdziale opisano moŜliwe uproszczenia złoŜoności algorytmu. W celu porównania właściwości proponowanej metody z innymi, powszechnie stosowanymi, rozwiązaniami stworzono w języku asemblerowym podprogramy, realizujące zadanie mnoŜenia dwóch 8 bitowych liczb ze znakiem. Krótki opis trzech referencyjnych metod wraz z podprogramami i wynikami porównania opisano w rozdziale 3. Rozdział 4 zawiera wnioski z badań. RozwaŜania teoretyczne zostały zilustrowane licznymi przykładami liczbowymi w celu ułatwienia ewentualnej analizy zamieszczonych listingów podprogramów.

(3)

2. Propozycja metody mnoŜenia liczb ze znakiem

2.1. Wyprowadzenie metody

Niech A i B oznaczają liczby ze znakiem w kodzie uzupełnienia do dwóch, oznaczanych dalej U2, składających się z n bitów w części całkowitej i m w części ułamkowej. Ilość bitów A i B w ogólnym przypadku moŜe się róŜnić, stąd A(n1, m1) i B(n2, m2). Wartości liczb są określone następująco:

∑ ⋅ =− ⋅ + + ⋅ − = ∑ ⋅ =− ⋅ + + ⋅ − = − − = − − − − = − − 2 2 2 1 2 1 -n2 1 2 1 -2 U2 2 1 1 1 1 1 -n1 1 1 1 -1 U2 2 2 2 2 2 2 n m i n i i n n n m i n i i n n B~ b b b B A~ a a a A (1)

Symbole A~ i B~ reprezentują składową dodatnią liczb A i B. UŜywając oznaczeń jak w (1) iloczyn A i B moŜe być zapisany:

(

) (

)

(

korekcja A korekcja B

)

B a A b B A B a A b B A A b B a b a B b A a B A n n n n n n n n n n n n n n n n n n n n _ _ ~ 2 ~ 2 ~ 2 2 ~ 2 2 ~ ~ ~ 2 ~ 2 2 2 ~ 2 ~ 2 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 1 + − = = ⋅ ⋅ − ⋅ ⋅ − ⋅ = = ⋅ ⋅ ⋅ − ⋅ ⋅ ⋅ − ⋅ + + ⋅ ⋅ + ⋅ ⋅ + ⋅ ⋅ ⋅ = = + ⋅ − ⋅ + ⋅ − = ⋅ − − − − − − − − zyn pseudoiloc 1 -1 1 -2 BIN BIN 1 -1 1 -2 1 -2 1 -1 1 -2 1 -1 1 -2 1 -1 U2 U2 (2)

MoŜna zauwaŜyć, Ŝe wyznaczanie wyniku mnoŜenia odbywa się dwuetapowo. W pierwszym kroku mnoŜone liczby A i B są traktowane jak liczby bez znaku wyraŜone w naturalnym kodzie dwójkowym. Taki wstępny wynik mnoŜenia ABIN·BBIN nazwano “pseudoiloczynem”. Jeśli obie liczby A i B są dodatnich znaków, wówczas “pseudoiloczyn” staje się wynikiem mnoŜenia. W najgorszym przypadku dwie dodatkowe operacje odejmowania są konieczne, nazwane “korekcja_A” i “korekcja_B” w celu otrzymania prawidłowego wyniku. Wspomniane korekcje obliczane są jako iloczyn trzech składników:

B~ a B _ korekcja A~ b A _ korekcja n n n n ⋅ ⋅ = ⋅ ⋅ = 1 1 -1 2 1 2-2 2 (3)

Działanie metody zobrazowano przykładem liczbowym.

Przykład 1. Wyznaczyć iloczyn liczb A i B wyraŜonych za pomocą najmniejszej

ilości bitów.

a) A=-8DEC B=-3DEC b) A =-3.5DEC B=+1.5DEC

Rozwiązanie Rozwiązanie

A =1000U2 B=101U2 A =100.1U2 B=01.10U2

(4)

U2 U2 U2 korekcja_B korekcja_A zyn pseudoiloc = = = = = − − + B A 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 1 1 0 1 * 0 0 0 1 U2 U2 U2 korekcja_B korekcja_A zyn pseudoiloc = = = = = − − + B A 0 1 1 . 0 1 0 1 0 0 0 . 0 0 1 1 0 0 0 . 0 0 0 0 0 1 1 . 0 1 1 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0 0 1 . 1 0 * 1 . 0 0 1 gdzie gdzie 010000 01 2 1 korekcja_ 000000 000 2 1 korekcja_ 4 3 = ⋅ ⋅ = = ⋅ ⋅ = B A 000 1100 10 1 2 1 correction 000 0000 1 00 2 0 correction 3 2 . . _ B . . _ A = ⋅ ⋅ = = ⋅ ⋅ = AU2·B U2=011000U2=+24DEC AU2·B U2=1010.110U2=-5.25DEC

2.2. Implementacja metody

W praktycznych zastosowaniach mnoŜone liczby są zwykle przechowywane w pamięci procesora jako stałe lub liczby tego samego formatu, zatem n1=n2=n i m1=m2=m. Równanie (2) przybiera wówczas uproszczoną postać:

(

a A

)

(

b B

)

A B

(

b A a B

)

B A n n n n n n n ~ ~ 2 ~ 2 ~ 2 1+ ⋅ − ⋅ 1+ = ⋅ − ⋅ ⋅ + ⋅ ⋅ − = ⋅ − − 1 -1 -BIN BIN 1 -1 -U2 U2 (4)

Wymagana liczba bitów wyniku mnoŜenia jest równa 2⋅(n+m), jeśli kaŜda z mnoŜonych liczb jest rozmiaru n+m. Korekcje “pseudoiloczynu” (warunkowe odejmowania, zaleŜne od znaków A i B) są wykonywane wyłącznie na starszej części “pseudoiloczynu”, zgodnie ze wzorem (4), w którym człon bn-1⋅A~+an-1⋅B~ jest skalowany przez współczynnik 2n. Kolejna moŜliwa redukcja złoŜoności algorytmu wymaga rozwaŜenia kombinacji znaków liczb. Jak zostało zaznaczone wcześniej, jeśli A i B są liczbami dodatnimi korekcje pseudoiloczynu stają się zbyteczne. Natomiast, jeśli liczby są róŜnych znaków, wtedy naleŜy wykonać jedną z dwóch korekcji. Następujące cechy rzeczywistego procesora: stała, określona długość rejestrów, automatyczne wypełnianie zerami bitów o większych wagach od najstarszego bitu, określonego argumentem wejściowym rozkazu procesora pozwalają na dalszą redukcję złoŜoności metody, w kontekście jej implementacji. Jeśli zauwaŜyć dodatkowo, Ŝe najstarszy bit dodatniej liczby w kodzie uzupełnień do dwóch jest równy zero, wtedy A~ i B~ w wyraŜeniach na „korekcję_A” i „korekcję_B” mogą być zastąpione przez A i B:

(

-1 -1

)

przy pewnychzałoŜeniach

BIN BIN U2

U2 B A B 2 b A a B

A = n n + n (5)

Ta sytuacja została pokazana w przykładzie 2, w którym podkreślono bity automatycznie ustawiane przez procesor na zero (zerowane).

Przykład 2. Wyznaczyć iloczyn liczb A i B przyjmując n=3 oraz m=1 do wyraŜania

(5)

Rozwiązanie

A =100.1U2 B =011.0U2

a) według wzoru (4) b) według wzoru (5)

U2 U2 U2 n _correctio n _correctio uct pseudoprod 0 1 1 0 1 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0 0 1 1 0 1 0 0 1 B A B A . . . . . * . = = = = = − − + U2 U2 U2 n _correctio n _correctio uct pseudoprod 0 1 1 0 1 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0 0 1 1 0 1 0 0 1 B A B A . . . . . * . = = = = = − − + gdzie gdzie 00 11000 0 11 2 1 correction 00 00000 1 00 2 0 correction 3 3 . . _ B . . _ A = ⋅ ⋅ = = ⋅ ⋅ = 00 . 011000 0 . 011 2 1 correction _ 00 . 000000 1 . 100 2 0 correction _ 3 3 = ⋅ ⋅ = = ⋅ ⋅ = B A AU2·B U2=110101.10U2=-10.5DEC AU2·B U2=110101.10U2=-10.5DEC

Wykonując obliczenia zarówno wg zaleŜności (4) i (5) otrzymano identyczny wynik, zgodnie z oczekiwaniami. Niewielka modyfikacja uczyniona w (4) i pokazana w (5) jest słuszna równieŜ w przypadku, gdy obie liczby są ujemne. PowyŜsze stwierdzenie moŜna udowodnić na podstawie następującej obserwacji. Mianowicie, jeśli bit poŜyczki z najstarszej pozycji wyniku zostanie odrzucony to prawdą jest, Ŝe

bit-0-0=bit-1-1=bit (6) Przykład 3 pokazuje zasadę działania proponowanej metody właśnie dla przypadku obu liczb ujemnych. Jak i poprzednio, równieŜ otrzymano prawidłowy wynik zarówno obliczając iloczyn wg wzoru (4) jak i (5).

Przykład 3. Wyznaczyć iloczyn liczb A i B przyjmując n=4 i m=0 do wyraŜania

wartości liczb. Niech A =-6DEC i B =-3DEC. Rozwiązanie

A =1010U2 B =1101U2

a) według wzoru (4) b) według wzoru (5)

U2 U2 U2 n _correctio n _correctio uct pseudoprod 0 1 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 1 0 1 1 0 1 1 0 1 0 1 B A B A * = = = = = − − + U2 U2 U2 n _correctio n _correctio uct pseudoprod 0 1 0 0 1 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 1 0 1 1 0 1 1 * 0 1 0 1 B A B A = = = = = − − +

(6)

gdzie gdzie 0100000 101 2 1 correction 0100000 010 2 1 correction 4 4 = ⋅ ⋅ = = ⋅ ⋅ = _ B _ A correction 1 2 1101 11010000 10100000 1010 2 1 correction 4 4 = ⋅ ⋅ = = ⋅ ⋅ = _ B _ A AU2·BU2=00010010U2=+18DEC AU2·BU2=00010010U2=+18DEC

3. Porównanie właściwości róŜnych metod

3.1. Metody klasyczne

W literaturze znane jest wiele sposobów mnoŜenia liczb ze znakiem realizowanych w technice programowalnych układów cyfrowych [1-10] jak i programowo [11-15]. Z grupy rozwiązań programowych, trzy z wielu moŜliwych zostało wybranych jako metody względem, których zostaną przedyskutowane właściwości metody proponowanej. Są to:

• klasyczna metoda Bootha, • metoda rozszerzenia znaku,

• metoda konwersji liczb ujemnych na dodatnie.

UwaŜna analiza kodu maszynowego wygenerowanego przez kompilatory języków wysokiego poziomu, takie jak: C, BASIC, pokazuje, Ŝe powyŜsze metody są powszechnie uŜywane. Przykładowo, metoda Bootha jest zalecana przez firmę Atmel dla niektórych z jej 8/16 bitowych mikrokontrolerów [16]. Zasada działania wybranych do testowania metod zostanie zaprezentowana skrótowo, gdyŜ zdaniem autora niniejszego artykułu, są one wystarczająco scharakteryzowane w literaturze.

Generalnie, oryginalna metoda Bootha [17], jej modyfikacje, np. algorytm McSorley’a [18] i uogólnienie dla kodowania wielobitowego [19] i wiele innych [20-24], są oparte na analizie grupy bitów. Podstawowa metoda Bootha oblicza iloczyn liczb przez cykliczne przesuwanie mnoŜnika i dodawanie lub odejmowanie mnoŜnej, zaleŜnie od kombinacji dwóch sąsiednich bitów mnoŜnika (patrz punkt nr 3 i 4 algorytmu przedstawionego poniŜej). Jedną z moŜliwych implementacji, wyraŜonej w stylu zbliŜonym do języka niskiego poziomu, zaproponowano w [14]:

1. zeruj starszą część wyniku i bit pomocniczy; 2. za młodszą część wyniku przyjmij mnoŜnik;

3. jeśli poprzedni najmłodszy bit mnoŜnika (bit pomocniczy) jest ustawiony, dodaj mnoŜną do starszej części wyniku;

4. jeśli bieŜący najmłodszy bit mnoŜnika jest ustawiony, odejmij mnoŜną od starszej części wyniku;

5. przesuń w prawo młodszą część wyniku, wychodzący bit jest wpisywany do bitu pomocniczego;

6. przesuń w prawo starszą część wyniku z powieleniem bitu znaku (najstarszy bit), wychodzący bit jest wpisywany na pozycję najstarszego bitu młodszej części wyniku;

7. powtarzaj czynności od punktu 3 dla wszystkich bitów mnoŜnika.

Działanie powyŜszego algorytmu zobrazowano w przykładzie 4, w którym pomocniczy bit został wyróŜniony podkreśleniem. Co więcej, najmłodszy bit młodszej części wyniku oraz bit pomocniczy są ujęte w nawias klamrowy a ich

(7)

wartości są brane pod uwagę w punktach 3 i 4 algorytmu. Symbolem ‘→k

oznaczono operację przesunięcia w prawo iloczynu zgodnie z punktem 4, gdzie k jest numerem porządkowym przesunięcia.

Przykład 4. Wyznaczyć iloczyn A i B oraz B i A stosując metodę Bootha.

Niech A =-3DEC i B =+3DEC Rozwiązanie A =1101U2 B =0011U2 a) A·B b) B·A

{ }

{ }

{ }

{ }

{ }

{ }

U2 4 3 2 1 U2 U2 11110111 0 0 1110111 1 0 1101110 1101 1 0 0000110 1 1 0001100 0 1 0011001 1101 0 1 0000001 0011 * 1101 →  →     + →  →  − = = B A

{ }

{ }

{ }

{ }

{ }

{ }

{ }

U2 U2 U2 1 1 0 1 1101111 0011 0 1 0000111 1 0011 1 0 1110111 0 1 1101110 0011 0 1 0000110 1101 * 0011 11110111 1110111 0 0001111 4 3 2 1 →  →  − →     + →  − = = A B AU2·B U2= BU2·A U2=11110111U2=-9DEC

Metoda rozszerzania znaku polega na zapisaniu mnoŜnej i mnoŜnika za pomocą podwójnej ilości bitów. Dodatkowe bity przyjmują wartość najbardziej znaczącego bitu, czyli dla U2 bitu znaku. Nie powoduje to zmiany wartości liczb. Tak przygotowane liczby, są mnoŜone jak liczby dodatnie bez znaku. Tylko mniej znacząca część wyniku niesie uŜyteczną informację i stanowi prawidłowy wynik mnoŜenia. Starsza część musi być odrzucona. PowyŜszą zasadę ilustruje przykład 5, w którym dodatkowe bity (bity rozszerzenia) zostały podkreślone ‘_’ a nadmiarowe bity wyniku przekreślono ‘/’.

Przykład 5. Wyznaczyć iloczyn liczb A i B metodą rozszerzania znaku.

Niech A =-4DEC i B =+5DEC. Rozwiązanie

(8)

U2 U2 U2 0 0 1 1 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 1 1 1 B A = = / / / + ∗ AU2·B U2=11101100U2=-20DEC

Metoda zmiany znaku wykorzystuje zasadę konwersji kaŜdej liczby ujemnej do dodatniej. Następnie są one mnoŜone jak liczby dodatnie bez znaku. Jeśli oryginalne znaki mnoŜnej i mnoŜnika były róŜne, naleŜy dodatkowo zmienić znak otrzymanego wyniku tak, aby otrzymać wartość liczby w kodzie uzupełnień do dwóch. Metoda jest intuicyjna i nie wymaga dodatkowego ilustrowania przykładem.

3.2. Przyjęte załoŜenia do analizy porównawczej

Porównanie właściwości testowanych algorytmów wymaga przyjęcia załoŜeń, co do architektury procesora, najlepiej abstrakcyjnej maszyny referencyjnej. Z praktycznego punktu widzenia, dobrze byłoby, aby cechy tej maszyny, występowały w wielu rzeczywistych procesorach z wymienionej w rozdziale pierwszym grupy procesorów. W artykule zdecydowano dokonać oceny algorytmów dla architektury zgodnej z listą rozkazów 8051. Podstawową przesłanką, która zdecydowała o wyborze 8051 jako maszyny referencyjnej była jej duŜa popularność i silna pozycja na rynku systemów wbudowanych, przy czym pod pojęciem 8051 naleŜy rozumieć klasyczną architkturę MCS 8051.

Analiza działania algorytmów została wykonana przy następujących załoŜeniach:

argumenty wejściowe A i B to liczby 8 bitowe przechowywane w rejestrach A i B; • iloczyn jest przechowywany w parze rejestrów B i A, gdzie B – bardziej

znaczący bajt (MSB), A – mniej znaczący bajt (LSB).

Podprogramy zostały starannie przygotowane w języku asemblerowym procesora 8051 dla czterech metod, nazwanych: “m_proponowana”, “m_rozszerzania_znaku”, “m_zmiany_znaku” i “m_Bootha”. Zostały one umieszczone w Tabeli 1 wraz ze wspólnym fragmentem kodu, odpowiedzialnym za przygotowanie danych wejściowych w rejestrach A i B.

(9)

Tabela 1. Listingi podprogramów mnoŜenia liczb ze znakiem w języku asemblerowym mikroprocesora 8051

3.3. Wyniki porównania

Obszerność programu musi być brana pod uwagę szczególnie w systemach z niewielką ilością pamięci, stąd rozmiar kodu otrzymanego w wyniku asemblacji kodu źródłowego jest jednym z istotnych ilościowych wskaźników oceny algorytmu. Rozmiar kaŜdego z podprogramów wyraŜony w bajtach został przedstawiony na rys. 1. Metoda proponowana charakteryzuje się najmniejszą zajętością pamięci programu.

(10)

Rysunek 1. Rozmiar kodu maszynowego, bajty

Innym, istotnym wskaźnikiem jest czas wykonania, który jest skorelowany z liczbą cykli mikroprocesora. Ilość cykli została wyznaczona dla zadanych wartości A i B, biorąc pod uwagę moŜliwe kombinacje znaków. Rysunek 2 przedstawia wyniki analizy. Bardzo widoczna róŜnica pomiędzy wynikiem dla metody Bootha a pozostałymi wynika z jej w pełni programowej emulacji. Postałe trzy metody korzystają z rozkazu mnoŜenia liczb bez znaku, realizowanego sprzętowo przez wbudowany w procesor układ mnoŜący.

Rysunek 2. Względny czas wykonania (cykle procesora) dla róŜnych kombinacji znaków mnoŜnej i mnoŜnika, gdzie “w.c.” znaczy “worst case (mnoŜnik=-1DEC)” i “b.c.” znaczy “best

(11)

Brak wyników „słupków” na rysunku 2, dla niektórych kombinacji znaków mnoŜnej i mnoznika odnośnie metody Bootha, jest spowodowany niemoŜnością wyraŜenia liczby o zadanym znaku dla przyjętego przypadku „w.c.” lub „b.c.”. PoniewaŜ w pewnych przypadkach czas wykonania algorytmu zaleŜy od konkretnych wartości A i B, dodatkowo na rys. 2 przedstawiono wartość przeciętną, liczoną jako średnia arytmetyczna czterech przypadków kombinacji znaków. Jest to wyjątkowo istotne dla metody Bootha, w której niektóre partie kodu maszynowego są wykonywane warunkowo, zaleŜnie od wartości bieŜącego i poprzedniego bitu mnoŜnika. Punkty 3 i 4 metody Bootha (opisanej w podrozdziale 3.1), w kaŜdym obiegu pętli, są pomijane, jeśli mnoŜnik wynosi 0 i są wykonane, jeśli aktualny bit mnoŜnika jest równy 1. Podobnie jak poprzednio, proponowana metoda charakteryzowała się najkrótszym czasem wykonania. Dla niektórych kombinacji znaków czasy były porównywalne jak dla „metody zmiany znaku”.

Dodatkowo, na rys. 3 przedstawiono zapotrzebowanie na rejestry mikroprocesora, czy w ogólnym przypadku komórki pamięci wewnętrznej. Jak moŜna zauwaŜyć z rysunku otrzymany wynik dla “metody proponowanej” był nieznacznie gorszy niŜ dla “metody zmiany znaku” a porównywalny z „metodą Bootha”.

Rysunek 3. Liczba uŜytych rejestrów (komórek pamięci) procesora

4. Wnioski

Na podstawie otrzymanych wartości przyjętych wskaźników oraz właściwości metod mnoŜenia scharakteryzowanych w poprzednim rozdziale moŜna wyciągnąć pewne wnioski. Zaproponowana w artykule metoda charakteryzuje się pewnymi zaletami w porównaniu do innych metod (przy załoŜeniach przyjętych w podrozdziale 3.2.) Oto one:

• najmniejszy rozmiar kodu (najmniejsza zajętość pamięci programu); • najkrótszy czas wykonania (najszybsza metoda);

(12)

• prawidłowy wynik mnoŜenia dla dowolnej kombinacji liczb w przeciwieństwie do metody Bootha, która nie działa prawidłowo dla mnoŜnej postaci 10...0U2; • brak konstrukcji typu „pętla” w przeciwieństwie do metody Bootha;

• mniejsza zajętość rejestrów (pamięci w ogólnym przypadku) w porównaniu do metody rozszerzonego znaku.

Do wad metody proponowanej naleŜy zaliczyć:

• konieczność wykonania dwóch lub mniej korekcji wyniku (odejmowań) “pseudoiloczynu”, będącego wynikiem iloczynu liczb potraktowanych jak liczby bez znaku;

• lista rozkazów procesora musi obejmować operację mnoŜenia bez znaku (w przeciwnym razie niezbędna jest jej programowa emulacja);

• zmienny czas wykonania (cykle procesora) zaleŜny od kombinacji znaków liczb, przeciwnie niŜ w metodzie rozszerzonego znaku.

Z powyŜej wymienionych cech nasuwa się zasadniczy wniosek:

Implementacja programowa proponowanej metody mnoŜenia liczb ze znakiem w języku asemblerowym lub pośrednio w językach wysokiego poziomu, np. C, moŜe znacząco zwiększyć wydajność oprogramowania systemów wbudowanych przez zmniejszenie czasu wykonania oraz zajętości pamięci. Metoda nie ma istotnych wad i ograniczeń, stąd moŜe być zastosowana w kaŜdym systemie pod warunkiem, Ŝe procesor posiada w zestawie instrukcji rozkaz mnoŜenia liczb bez znaku. Potencjalny zakres zastosowań metody to systemy wbudowane, w których mnoŜenie arytmetyczne liczb ze znakiem stanowi istotny element oprogramowania, a ryzyko wystąpienia nadmiaru arytmetycznego jest nieakceptowane i w rezultacie wynik mnoŜenia musi być wyraŜony w formacie stałopozycyjnym podwójnej szerokości w stosunku do rozmiaru argumentów wejściowych.

Bibliografia

[1] Wallace C. S. A suggestion for a fast multiplier. IEEE Trans. Comput. No 13 (2)/1964, 1964, s. 14-17.

[2] Dadda L. Some schemes for parallel multiplier. Alta Frequenza, Vol. 34, 1992, s. 349-356.

[3] Millar B., Madrid P., Swartzlander E. A fast hybrid multiplier combining booth and Wallace/ DADDA algorithms. The 35th Midwest Symposium on Circuits and Systems, 1992, s. 158-165.

[4] Ercegovac M. D., et al. Fast multiplication without carry-propagate addition. IEEE Trans. Comput. Vol. 39, No 11/1990, 1990, s. 1385-1390.

[5] Dae Won Kim, Jun Rim Choi. Variable radix-2 multibit coding for 400 Mpixel/s DCT/IDCT of HDTV video decoder. Integration, the VLSI journal, Vol. 35, 2003, s. 47-67.

[6] Li C. W., Wah B. W. Optimal bit-level processor arrays for matrix multiplication. Proc. of the 11th International Conference on Systems Engineering, 1996, s. 596-601.

(13)

[7] Smith S. C., et al. NULL convention multiply and accumulate unit with

conditional rounding, scaling, and saturation. Journal of Systems Architecture, Vol. 47, 2002, s. 977-998.

[8] da Costa E., Monteiro J., Bampi S. A new array architecture for signed multiplication using Gray encoded radix-2m operands. Integration the VLSI journal, Vol. 40, 2007, s. 118-132.

[9] Yu Z., Wasserman L., Willson A. A painless way to reduce power by over 18% in booth-encoded carry-save array multipliers for DSP. Workshop on Signal Processing Systems, 2000, s. 571–580.

[10]Baugh C. R., Wooley B. A. A two’s complement parallel array multiplication algorithm. IEEE Transactions on Computers. C-22, December 1973, p. 1045-1047.

[11] Omondi A. R. Computer Arithmetic Systems, Algorithms, Architecture and implementations. Series in Computer Science Prentice-Hall International, Englewood Cliffs, New York, 1994.

[12] Parhami B. Computer Arithmetic. Algorithms and Hardware Designs. Oxford University Press, New York, 2000.

[13]Koren I. Computer Arithmetic Algorithms. A. K. Peters, Natick, MA, 2002. [14]Gryś S. Arytmetyka komputerów – w praktyce. Wyd. Naukowe PWN,

Warszawa, 2007.

[15]Biernat J. Metody i układy arytmetyki komputerowej. Wyd. Politechniki Wrocławskiej, Wrocław, 2001.

[16] Booth A. D. A signed binary multiplication technique. Journal of Applied Mathematics, Vol. 4, No 2/1951, 1951, s. 236–240.

[17] McSorley O.L. High speed arithmetic in binary computers. Proceedings of IRE, January 1961, s. 67-91.

[18] Sam H., Gupta A. A generalized multibit coding of two’s complement binary numbers and its proof with application in multiplier implementation. IEEE Trans. Comput., Vol. 39, No 8/1990, 1990, s. 1006-1015.

[19] Efstathiou C., Vergos H. Modified booth 1’s complement and modulo 2n-1 multipliers. The 7th IEEE International Conference on Electronics Circuits and Systems, 2000, s. 637-640.

[20] Gallagher W., Swartzlander E. High radix booth multipliers using reduced area adder trees. The 28th Asilomar Conference on Signals, Systems and Computers, 1994, s. 545-549.

[21] Goldovsky A., et al. Design and implementation of a 16 by 16 lowpower two’s complement multiplier. IEEE Int. Symp. Circuits Syst., 2000, s. 345-348. [22] Seidel P., McFearin L., Matula D. Binary multiplication 32 and

radix-256. 15th Symposium on Computer Arithmetic, 2001, s. 23-32.

[23] Cherkauer B., Friedman E. A hybrid radix-4/radix-8 low power, high speed multiplier architecture for wide bit widths. IEEE Int. Symp. Circuits Syst., 1996, s. 53-56.

[24] Wang Y., Jiang Y., Sha E. On area-efficient low power array multipliers. The 8th IEEE International Conference on Electronics, Circuits and Systems, 2001, s. 1429-1432.

Cytaty

Powiązane dokumenty

Zadanie do odesłania w formie zdjęcia zbiorek str.136 zad.9 4.. Wykonaj zadania zbiorek

zapisuj tematy w zeszycie i tyle ćwiczeń, aby być pewnym, że temat jest opanowany.. Ćwiczenia zawarte są w filmach

Jeżeli dzieci mają problem ze zrozumieniem toku postępowania, nauczyciel wyjaśnia, że w każdym przypadku w matematyce, kiedy coś będzie się dokładać, coś dochodzić

Jeśli mnożymy 9 · 6, to zginamy szósty palec licząc od lewej strony (czyli kciuk prawej dłoni).. Wyprostowane palce znajdujące się po lewej stronie od zgiętego palca

Nauczyciel przedstawia algorytm dodawania liczb całkowitych o różnych znakach i takich samych

Praca zbiorowa, Matematyka 2001 podręcznik dla 5 klasy szkoły podstawowej, WSiP, Warszawa 2006.. Cyfra musi być wpisana przed wykonaniem

• jeżeli obliczenia wykonano błędnie dany Gracz poprawia obliczenia, ale nie może na danym polu położyć swojego żetonu;.. • wygrywa Gracz, który będzie miał więcej

Musimy tak łączyć, aby łatwo nam było policzyć, czyli dodajemy najpierw do siebie liczby ujemne.. Musimy tak łączył, aby najlepiej sumy się zerowały ( dodajemy liczby