Sprzętowa Implementacja Algorytmów

Slides:



Advertisements
Podobne prezentacje
Opracowała: Iwona Bieniek
Advertisements

Metody numeryczne część 1. Rozwiązywanie układów równań liniowych.
Projektowanie cyfrowych systemów w oparciu o układy PLD (i VLSI)
Algorytmy – różne przykłady
Operacje zmiennoprzecinkowe
DZIAŁANIA NA LICZBACH NATURALNYCH
MATEMATYKA-ułamki zwykłe
UŁAMKI DZIESIĘTNE porównywanie, dodawanie i odejmowanie.
Pisemne dzielenie liczb naturalnych
B. znaki alfabetu D. obrazy
Systemy liczbowe w architekturze komputerów materiał do wykładu 1/3
Reguły Bradis-Kryłowa
Architektura komputerów
Ułamki zwykłe Przygotowali: Przemek Konopko i Piotr Szydłowski
Zapis informacji Dr Anna Kwiatkowska.
Transformacja Z (13.6).
Stworzyli: Edyta Celmer I Marta Kałuża.
Ułamki zwykłe.
ROZWIĄZANIE ZAGADKI NR 6
Elektronika cyfrowa i mikroprocesory
„Są plusy dodatnie i plusy ujemne.”
Kod Graya.
Aleksandra Duchnowicz kl. 6.d
Działania pamięciowe na ułamkach dziesiętnych
Technika Mikroprocesorowa 1
Technika Mikroprocesorowa 1
Podstawy informatyki (4)
Ułamki dziesiętne – powtórzenie
Informatyka I Język ANSI C
Wyrażenia algebraiczne
Mnożenie i dzielnie liczb dziesiętnych
Reprezentacja stało i zmiennopozycjna
Architektura komputerów
Opracowanie Iwona Nieroda
System dwójkowy (binarny)
DZIAŁANIA NA UŁAMKACH DZIESIĘTNYCH
Działania arytmetyczne.
Dawid Kubaczka kl. 5 „c” Ułamki zwykłe uczący: Ewa Szering.
Ułamki dziesiętne Dawid Kubaczka kl. 5 „c” uczący: Ewa Szering.
Liczby całkowite dodatnie BCN
Pisemne dzielenie liczb naturalnych.
Stało- i zmiennopozycyjna reprezentacja liczb binarnych
Matematyka i system dwójkowy
EcoCondens Kompakt BBK 7-22 E.
Reprezentacja liczb w systemie binarnym ułamki i liczby ujemne
Liczby Naturalne.
Matematyka z Informatyką w parze
LICZBY CAŁKOWITE:.
Testogranie TESTOGRANIE Bogdana Berezy.
Podstawy arytmetyki komputerowej Paweł Perekietka
Jak Jaś parował skarpetki Andrzej Majkowski 1 informatyka +
NA UŁAMKACH DZIESIĘTNYCH.
WYKŁAD 3 Temat: Arytmetyka binarna 1. Arytmetyka binarna 1.1. Nadmiar
UŁAMKI ZWYKŁE.
Dwójkowy system liczbowy
Działania w systemie binarnym
TEMAT: UŁAMKI ZWYKŁE.
Podstawy Techniki Cyfrowej
Kalendarz 2020.
Elementy geometryczne i relacje
Działania w zbiorze liczb całkowitych
Działania na ułamkach dziesiętnych
Działania podstawowe w zbiorze liczb naturalnych
DZIAŁANIA NA UŁAMKACH ZWYKŁYCH opracowała mgr Agnieszka Dyrka
Liczby naturalne i całkowite Spis treści Definicje Działania na liczbach Wielokrotności liczb naturalnych Cechy podzielności Przykłady potęg,potęgi o.
To ułamki o mianowniku 10, 100, 1000, itd. np.: 1,5; 2,75; 0,032;
Działania na liczbach wymiernych Opracowała: Monika Grudzińska-Czerniecka.
Technika Mikroprocesorowa 1
Działania pamięciowe na ułamkach dziesiętnych
Zapis prezentacji:

Sprzętowa Implementacja Algorytmów Ernest Jamro, AGH Kraków Cordic, Dzielenie, Pierwiastek...

Cordic (COordinate Rotation DIgital Calculation) Zobacz: http://my.execpc.com/~geezer/embed/cordic.htm Omondi, A. R. „Computer arithmetic systems...” Obrót o kąt  X2 = X1 * cos() - Y1 * sin() Y2 = X1 * sin() + Y1 * cos() Po przekształceniu: X2 = cos() * [ X1 - Y1 * tan() ] Y2 = cos() * [ X1 * tan() + Y1 ]

CORDIC – c.d. Wybieramy tg() tak aby = 1, ½, ¼, ... Wtedy: tan(21) = 1/1 21 = 45° cos(21) = 0.707107 tan(32) = 1/2 32 = 26.5650° cos(32) = 0.894427 tan(43) = 1/4 43 = 14.0362° cos(43) = 0.970142 tan(54) = 1/8 54 = 7.12502° cos(54) = 0.992278 tan(65) = 1/16 65 = 3.57633° cos(65) = 0.998053 tan(76) = 1/32 76 = 1.78991° cos(76) = 0.999512 W rezultacie: Mnożenie przez tan()- zastępujemy przez dodawanie z przesunięciem Mnożenie przez cos() jest zastępowane przez pojedyncze mnożenie skumulowane przez stałą wartość (zob. następna strona) cos( 21)* cos( 32) * cos( 43) * ...

CORDIC – Iteracje Iteracja 1 X2 = cos( 21) * [ X1 - Y1 * tan( 21) ] Y2 = cos( 21) * [ X1 * tan( 21) + Y1 ] Iteracja 2 X3 = cos( 32) * { X2 - Y2 * tan( 32) } Y3 = cos( 32) * { X2 * tan( 32) + Y2 } itd. Mnożenie przez cos() można wykonać na samym końcu a nie w każdej iteracji.

CORDIC Przykład Znaleźć sin(28.027°) Stan początkowy:  = 0° cos() = 1 X = 1 sin() = 0 Y = 0 Rotacja o 45° X' = X - Y / 1 = 1 - 0 / 1 = 1 Y' = X / 1 + Y = 1 / 1 + 0 = 1 Rotacja z 45° do 18.435° ( 32 = -26.565°) (Przesunięcie o kąt ujemny ale cos(- )= cos() więc nie ma to wpływu na wartość skumulowanego iloczynu. Obracamy o kąt ujemny wtedy kiedy skumulowany kąt obrotu jest większy od kąta docelowego.) X' = X + Y / 2 = 1 + 1 / 2 = 1.5 Y' = -X / 2 + Y = -1 / 2 + 1 = 0.5 Rotacja z 18.435° do 32.471° ( 43 = 14.036°) X' = X - Y / 4 = 1.5 - 0.5 / 4 = 1.375 Y' = X / 4 + Y = 1.5 / 4 + 0.5 = 0.875

CORDIC Przykład - c.d. Rotacja z 32.471° do 25.346° ( 54 = -7.125°) X' = X + Y / 8 = 1.375 + 0.875 / 8 = 1.484375 Y' = -X / 8 + Y = -1.375 / 8 + 0.875 = 0.703125 ... Rotacja 27.132° do 28.027° ( 87 = 0.895°) X' = X - Y / 64 = 1.465300 - 0.750884 / 64 = 1.453567 Y' = X / 64 + Y = 1.465300 / 64 + 0.750884 = 0.773779 W rezultacie: sin(28.027°) = 0.607253 * Y = 0.46988 cos(28.027°) = 0.607253 * X = 0.88268 Zamiast mnożyć przez skumulowany czynnik cos() można ustawić: X= 0.607253 zamiast 1 w pierwszej iteracji. Kąt  w każdej iteracji powinien być zapisany w pamięci LUT (w przypadku implementacji sekwencyjnej) w przypadku implementacji kaskadowej jest on wartością stałą.

Sprzętowa implementacja Sekwencyjna Kaskadowa

Operacja dzielenia (Algorytm: non-performing division) 0 1 1 0 0 1 0 0 : 1 0 1 1 +1 0 1 0 1 = 0 0 0 0 1 1 0 0 0 1 1 +1 0 1 0 1 1 1 0 0 0 0 0 0 1 1 0 1 1 0 1 1 0 0 1 1 0 0 0 0 0 0 1=Reszta 1 Dziesiętnie: 100:11= 9 reszta 1 100= (01100100)2 11= (01011)2 -11= (10101)2 9= (1001)2

Pozycjonowanie (normalizacja) argumentów dzielenia Aby przyspieszyć operacje dzielenia należy najpierw odpowiednio przesunąć bitowo dzielną i dzielnik – tak aby na najbardziej znaczących bitach występowały ‘1’ Przykład: a) 1001: 0011 należy zastąpić przez 1001:1100 a wynik podzielić przez 4 ( przesunąć w prawo o 2 bity) w ten sposób zyskujemy 2 takty zegara b) 01100: 000101 należy zastąpić przez 11000 ( <<1) oraz 101000 (<<3) czyli wynik należy podzielić przez 4 (>>2) Dokładniejszy opis normalizacja można znaleźć w wykładzie liczby zmiennoprzecinkowe

Operacja dzielenia (Przesunięcie po zerach) 0 1 1 0 0 1 0 0 : 1 0 1 1 +1 0 1 0 1 = 0 0 0 1 1 0 0 0 1 1 0 0 1 0 1 0 1 1 0 0 0 0 1 Reszta Dziesiętnie: 100:11= 9 reszta 1 100= (01100100)2 11= (01011)2 -11= (10101)2 9= (1001)2 Dwa zera wiec przesuń dodatkowo o 2 pozycje w lewo i wpisz 2 zera do wyniku

Operacja dzielenia Przesunięcie po zerach Trzy najstarsze bity odejmowania (dzielna-dzielnik): 010: wynik<<=1; wynik|=1; dzielna<<=1; 001: wynik<<=2; wynik|= 2; dzielna<<=2; 000: wynik<<=3; wynik|= 4; dzielna<<=3; 1xx: wynik<<=1; dzielna<<=1; Przesunięcie o więcej niż jeden bit w momencie kiedy wynik odejmowania wskazuje, że Dzielnik > 2*Dzielna lub Dzielnik> 4*Dzielna Uwaga: argumenty muszą być znormalizowane na samym początku

Operacja dzielenia Radix 4 Multiplekser: If (w3>=0) then w= w3 Else if (w2>=0) then w=w2 Else if (w1>=0) then w= w1 Else w= w0

Operacja dzielenia: Newton-Raphson Znajdowanie miejsca zerowego funkcji: Nachylenie stycznej w danym punkcie, f(Xi+1)=0 Przekształcając otrzymujemy Szukamy miejsca zerowego funkcji: Rozwiązanie (miejsce zerowe): X= 1/D Pochodna f ’(X)= 1/X2

Dzielenie: metoda Newtona – Raphsona Przykład: dzielenie przez 3, D=3 x0= 0.5 x1= 0.5(2 - 0.5·3)= 0.25 x2= 0.3125 x3= 0.33203125 x4= 0.333328247 x5= 0.333333333 Każda iteracja podwaja liczbę poprawnych bitów wyniku

Newton-Raphson c.d. :   Określić wartość wstępną x0 = 1/b np. za pomocą LUT i odpowiednich przesunięć Iteracyjnie obliczyć xi+1 = xi(2-xib) aż do punktu zbieżności (w n krokach). Proces iteracyjny jest tym szybciej zbieżny im wartość początkowa x0 poszukiwanego rozwiązania jest bliższa wartości rzeczywistej x. Wymagana liczba iteracji, n, zależy od tego, z jaką precyzją obliczenia mają zostać wykonane. Należy przy tym pamiętać, że każdy następny krok iteracji podwaja ilość poprawnych bitów w wyniku. Można założyć, że po czterech iteracjach jesteśmy w stanie obliczyć odwrotność z dokładnością do 16 bitów. A po 5 iteracjach z dokładnością 32 bitów.

Newton-Raphson c.d. FF – rejestry (ang. Flip-Flops)

Pierwiastek kwadratowy Newton-Raphson Szybkość aproksymowania kwadratowa (liczba ważnych bitów podwaja się w każdej iteracji) Wada: - używanie operacji dzielenia

Pierwiastek kwadratowy bez operacji dzielenia Miejsce zerowe funkcji: Wynikiem powyższej iteracji XK jest dlatego aby otrzymać bezpośrednio pierwiastek należy przeprowadzić operację dzielenia lub co jest zalecane mnożenia:

SQRT non-restoring digit-by-digit

Taylor-Maclaurin Ogólna postać: f(x)= a0+ a1x + a2x2 + a3x3 + .... Postać ulepszona (nie trzeba obliczać xn) (metoda Horner’a): f(x)= b0+ x·(b1 + x·(b2 + x·(b3 + ...) ) )

Różne metody wyznaczania współczynników wielomianu Wykres błędu aproksymacji dla różnych metod wyznaczania współczynników wielomianu aproksymującego - dla funkcji ln(x), x=[1, 2) i wielomianu rzędu 3. Na wykresie jest podany maksymalny błąd dla różnych metod funkcja Matlab’a: Minimax(Function, Interval, Degree) Minimax – optymalizacja w celu osiągnięcia najmniejszego błędu w najgorszym przypadku

Wielomiany Czebyszewa T0(x) = 1 T1(x) = x T2(x) = 2x2-1 T3(x) = 4x3-3x T4(x) = 8x4-8x2+1 T5(x) = 16x5-20x3+5x T6(x) = 32x6-48x4+18x2-1.

Redukcja dziedziny wejściowej Redukcja zakresu danej wejściowej do mniejszego zakresu Obliczanie funkcji dla zredukowanego przedziału Rekonstrukcja funkcji dla całego przedziału wejściowego Przykład: Funkcja przedział x rekonstrukcja sin(x) [0, /2) sin(x+k)= (-1)k sin(x), sin(-x)= sin(x) 2x [0, 1) 2X= 2Xint2x Xint- część całkowita X ln(x) [1,2) ln(X)= Xintln(2) +ln(x) x (0.25, 1] (22ix)= 2i  x 1/x [1, 2) 1/(2i x)= 2-i (1/x)

Aproksymacja liniowa Y=Yk+AK·(X-XK) YK=f(XK) - interpolacja Zakłada się, że XK= MSB(X) YK=f(XK) - interpolacja AK=(Yk+1-Yk)/  = XK+1-XK funkcja skl ejana (ang. spline)

Aproksymacja kwadratowa Y=Yk+BK·(X-XK) + AK(X-XK)2

Aproksymacja kwadratowa 2 Inne rozwiązanie: Y=YK + BK·(X-XK) + AK· (X-XK)·(XK+1-X) = XK+1-XK X=XK + x Y=YK + BK·x + AK· x·(-x) Wartości współczynników: YK=f(XK) BK=(Yk+1-Yk)/  Założenie przy obliczaniu AK: f(XK+ /2)= Y(XK+ /2) f(XK+ /2)= YK+BK ·/2+AK ·(/2)2

Aproksymacja kwadratowa 2 Y=YK + BK·x + AK· x·(-x) Y= YK + x·[BK+ AK· (-x)]