background image

Na tle poprawy egzaminu DSP, kurs ETEK00043W  

 

WTO/ŚRO

 

 

K

2016-02-01 09:20

 

1 / 3 

KU LEPSZEJ INTERPRETACJI KONWERSJI;  

Rozpatrzmy pytanie, o konwersję na HEX U2, liczby – 4,486881 na 8-miu bitach i3q5, będącej 

wynikiem mnożenia dwóch liczb WA*WB, analogicznie kodowanych [WA= 2,751 i WB= 1.631]. 

Nawiązują do stylu pytań w egzaminie  kodowanie ma być wykonane najpierw dla obu liczb na 8-miu 

bitach krótkiego rejestru, a potem wynik miał być podany w formie, w jakiej wystąpi w 16-bitowym 

akumulatorze procesora po operacji mnożenia. (trochę wymyślony ten procesor, ale za to 

odpowiedzi mają szansę mieścić się w małej tabelce .)  

Tymczasem spróbujmy „rozebrać” problem; 

1.  Zacznijmy od liczby WA= 2,751. Tutaj rzeczywiście jest drobny „kłopot”, bo wartość trafia 

między punkty bitów na osi liczb, czyli trzeba wybrać któryś zaokrąglając lub obcinając 

wartość.  

2.  U2, i3q5 pozwala kodować liczby z zakresu <4, +3,96875>. Czy może być zatem podejrzenie 

o „przekroczeniu zakresu” ?. Przecież ta wartość jest z pobliża -3, zatem z wnętrza 

reprezentowanego przedziału wartości liczb. (patrz ilustracja w p.4b.) 

3.  A teraz bliżej do kodowania.  2,751 * 2^5 = 88,032  i używając np. kalkulatora konwersja  

na HEX po obcięciu części ułamkowej => 0xA8, czyli 1010 1000b. I tutaj warto skomentować 

pytania „ciąć czy zaokrąglać”? Jeśli patrzeć na temat z punktu widzenia wartości to 

zaokrąglanie do kolejnej wartości -89 nie ma tutaj uzasadnienia. Ale temat jest szerszy. Nie 

można wskazać, co jest ogólnie bardziej prawidłowe, obcinanie czy zaokrąglanie. Ważna jest 

świadomość tego wyboru i wynikających z tego konieczności testowania skutków wyboru. 

4.  I parę słów bliższego objaśnienia by nie zarzucono skrótów i ogólników  

a.  LSB dla tego kodowania wynosi 2^-5 = 1/32 = 0,03125 

b.  Zatem mamy układ „na pionowo ustawionej osi liczbowej” 

(bo tak wygodniej przygotować ilustrację ) 

DEC 

BIN 

HEX 

 

Uwagi 

+3,968.. 

0111 1111 

0x7F 

 

+MAX 

… 

… 

 

 

 

 

 

 

 

 

… 

… 

 

 

 

+0,03125 

00 0001 

0x01 

 

+1 LSB 

00 0000 

 

 

0,03125 

11 1111 

0x3F 

 

-1 LSB  

 

… 

   

 

 2,75 

1010 1000 

0xA8 

 

 

… 

<-------- 

?  2,751  To wartość pomiędzy, bliżej -2,75 

 −2,78125  

1010 0111 

0xA7 

 

 

… 

… 

 

 

 

1000 0000 

0x80 

 

-MAX  

background image

Na tle poprawy egzaminu DSP, kurs ETEK00043W  

 

WTO/ŚRO

 

 

K

2016-02-01 09:20

 

2 / 3 

 

c.  Nasza kodowana wartość trafia między bitami, zatem każda uwaga o „kłopocie z 

rozdzielczością” jest zasadna, ale wynik przecież istnieje  

d.  Nie są zaś umotywowane uwagi o „niemożliwości reprezentacji”, bo przecież w 

rzeczywistości problemów technicznych, choćby przetwarzania analogowo 

cyfrowego (A/C) do rzadkości należy „trafienie idealnie w bit”. To typowa sytuacja 

kwantyzacji, kiedy trzeba podjąć decyzję, któremu bitowi przypisać poziom. Tym 

razem nie ma specjalnego kłopotu. Ale gdyby wartość wypadła w środek przedziału 

między bitami równoprawne były by odpowiedzi z wartością każdego z sąsiednich 

poziomów. 

e.  I jeszcze ostatnia uwaga odnośnie wątpliwości wyrażanych czasami w rodzaju 

„przekroczenie zakresu…” czy „nie mieści się w reprezentacji…” albo „nie da się 

przedstawić bez przybliżenia”. Warto starannie przemyśleć problem i brak 

uzasadnienia dla tych stwierdzeń 

5.  W przypadku kodowania samej liczby 4,486881 w U2 na 8-miu bitach i3q5 z uwagami o 

przekroczeniu zakresu trzeba się zgodzić - zakres reprezentacji dla i3q5 to przecież (4; ~4)]. 

Ale i tym razem można przecież podać zawartość tego za krótkiego rejestru (0111 0001b), z 

istotną uwagą o pominięciu najstarszych bitów, które się nie zmieściły się, bo liczba jest poza 

zakresem reprezentacji (mówiąc z lekka na wesoło – wylała się poza rejestr (1) (

0111 0001

b)). 

Nieprawidłowość widać zresztą natychmiast, bo z najstarszego bitu (tej zielonej części) 

wynika jak gdyby była to liczba dodatnia a przecież jest ujemna.  

6.  No i wreszcie problem „jak ten wynik mnożenia będzie wyglądał w „długim” akumulatorze”?.  

a.  Oczywiście tutaj nie ma już problemu z „przekroczeniem zakresu”, bo skąd? 

b.  Akumulator ma więcej bitów, więc również powinien zmniejszyć się (a może nawet 

zniknąć) problem małej rozdzielczości. (To jest zresztą jednym z podstawowych 

argumentów za wykorzystaniem tak wydłużonych akumulatorów w DSP) 

c.  Liczba jest wynikiem mnożenia przez siebie liczby q5 * q5, zatem wynik będzie q10 

(niedowiarkom proponuję przypomnienie sobie sposobu wyznaczania położenia 

przecinka przy mnożeniu „pisemnym” dziesiętnych liczb ułamkowych) 

d.  Zatem 4,486881 * 2^10 = 4594,45661…(problem rozdzielczości nie znika, jesteśmy 

prawie w połowie między bitami!)  nie trafiamy idealnie w bit, co daje w efekcie dwie 

prawie równoważne odpowiedzi  0xEE0E (dla    4594) i 0xEE0D (dla  4595), czyli 

odpowiednio  1110 1110 0000 1110B  i  1110 1110 0000 1101B. Trzeba zaznaczyć, że 

taka postać wyniku będzie dla wyłączonego mechanizmu korekcyjnego przesunięcia 

(FRCT=0). 

background image

Na tle poprawy egzaminu DSP, kurs ETEK00043W  

 

WTO/ŚRO

 

 

K

2016-02-01 09:20

 

3 / 3 

e.  Pozostaje jeszcze pytanie gdzie w tym wyniku jest efekt kodowania na 8-bitach (z 

punktu 5)?  Zaznaczyłem go żółtym tłem odpowiednio  

1110 1110 0000 1110B  i  1110 1110 0000 1101B.  

Proszę dostrzec przesunięcie o 5 bitów w lewo od LSB w akumulatorze (mnożyliśmy 

prze liczbę kodowaną q5!).  Przy okazji widać wyraźnie potrzebę tak dużego 

(długiego) akumulatora. Przy wielokrotnym sumowaniu (MAC) te końcówki wartości 

zaczynają ważyć w wynikach.  

f.  I jeszcze ostatnia uwaga. Włączenie bitu FRCT=1 spowoduje korekcyjne przesunięcie 

wyniku o jeden bit w lewo całości akumulatora i uzupełnienie zerem na LSB.  

Czyli 1101 1100 0001 1100B  i  1101 1100 0001 1010B. 

Mam nadzieję, że nieco wyjaśniłem te w sumie niezbyt trudne drobiazgi.