2012-10-25
1
Procesory sygnałowe
Materiały ilustracyjne do wykładu.
Przygotowane z wykorzystaniem materiałów
firmy Texas Instruments
Dr Krzysztof Kardach
(ver. 7.3 luty 2012)
Część X2
Reprezentacja danych, trochę o
obliczeniach w ‘C5000 i nie tylko
K
2
Wykaz wykorzystanych materiałów
Bruno Pillard „An Introduction To Digital Signal Processors”;
„An Introduction To Digital Signal Processors”;
„An Introduction To Digital Signal Processors”;
„An Introduction To Digital Signal Processors”;
Uniwersytetu Sherbrooke
[
Wprowadzenie do DSP - procesor C5402 ]
TMS320C54x DSP Reference Set
TMS320C54x DSP Reference Set
TMS320C54x DSP Reference Set
TMS320C54x DSP Reference Set ---- Mnemonic Instruction Set
Mnemonic Instruction Set
Mnemonic Instruction Set
Mnemonic Instruction Set [materiały
podstawowe => Lista rozkazów procesorów rodziny C54xx ]
TMS320C54x
TMS320C54x
TMS320C54x
TMS320C54x Assembly Language Tools Users Guides
Assembly Language Tools Users Guides
Assembly Language Tools Users Guides
Assembly Language Tools Users Guides [materiały
uzupełniając
e => Jak używać asemblera procesorów C5000 ]
TMS320C54x DSP Reference Set
TMS320C54x DSP Reference Set
TMS320C54x DSP Reference Set
TMS320C54x DSP Reference Set ---- CPU and Peripherals
CPU and Peripherals
CPU and Peripherals
CPU and Peripherals [materiały
podstawowe => Opis CPU oraz peryferii procesorów rodziny C54xx ]
TMS320C54x DSP
TMS320C54x DSP
TMS320C54x DSP
TMS320C54x DSP Prgramers Guide
Prgramers Guide
Prgramers Guide
Prgramers Guide [materiały uzupełniające =>
Procesory DSP-przewodnik programisty Dokument formatu PDF
]
Peter Robinson TMS320 Algorithm
TMS320 Algorithm
TMS320 Algorithm
TMS320 Algorithm Debugging Techniques
Debugging Techniques
Debugging Techniques
Debugging Techniques; ; ; ; SPRA084
TMS320C54x Design Workshop
TMS320C54x Design Workshop
TMS320C54x Design Workshop
TMS320C54x Design Workshop –––– materiały firmy
materiały firmy
materiały firmy
materiały firmy Texas Instruments
Texas Instruments
Texas Instruments
Texas Instruments
2012-10-25
Procesory sygnałowe I / X1
2
K
2
2012-10-25
2
Główne zagadnienia
• Przypomnienie kodowania liczb dla potrzeb przetwarzania
danych
• Sposoby kodowania zmiennoprzecinkowego IEEE 754
(nie zawsze
tak samo – uwaga dla TMS C30 inaczej)
• Porównanie / przeciwstawienie reprezentacji
całkowitoliczbowej i ułamkowej
• Jak usprawniać wynik - nasycanie i zaokrąglanie i ich realizacja
• „Zasilanie analogowe” w DSP
• Operacje bitowe – jak też można
• Dzielenie, mnożenie powiększonej precyzji
• Wsparcie zmiennego przecinka
2012-10-25
Procesory sygnałowe I / X1
3
K
2
Co głównie obliczamy?
2012-10-25
Procesory sygnałowe I / X1
4
Typowe operacje dla DSP
A = B*C + D
Multiply, Add, and Accumulate
E = F*G + A
..
.
Rozkaz MAC
3+5 = 8
+
0011
0101
1000
Add
Multiply
5*3 = 15
Dla typowych procesorów ~70
cykli procesora
Wykonanie MAC
0
1
0
1
x
x
x
x
8
4
2
1
0011
0011
0011
0011
x
x
x
x
0000
0011
0000
0011
=
5
3
Shift i suma
wielokrotna
Dla procesorów DSP typowo
1 cykl procesora
0101
* 0011
==========
0101
0101
0000
0000
==========
00001111
0000 1111 15
K
2
2012-10-25
3
System binarny
2012-10-25
Procesory sygnałowe I / X1
5
Cyfrowa reprezentacja liczb
np. liczba 35 kodowana binarnie
Każda liczba może być reprezentowana za pomocą 1 i 0 - binarnie
126 dziesiętnie na kod binarny
K
2
Binarnie i HEX
2012-10-25
Procesory sygnałowe I / X1
6
Dziesi
ę
tny 0,1,2,… ,9
Binarny
0,1
Hex 0,1,2,… ,9,A,B,C,D,E,F
16 Dec 0x10 Hex
20 Dec 0x14 Hex
4 bity kodu binarnego są reprezentowane przez jeden znak hex
Dec 26 na kody binarny i HEX
K
2
2012-10-25
4
Liczby całkowite ze znakiem
2012-10-25
Procesory sygnałowe I / X1
7
Kodowanie znak-moduł
Liczby całkowite ze znakiem (Signed Magnitude Integers)
K
2
Kodowanie z uzupełnieniem do dwóch – U2
(Two’s Complement Notation)
(dla reprezentacji 8-mio bitowej)
2012-10-25
Procesory sygnałowe I / X1
8
Dla liczb całkowitych;
K
2
2012-10-25
5
Kodowanie z uzupełnieniem do dwóch – U2
–
c.d.
2012-10-25
Procesory sygnałowe I / X1
9
Konwersja do kodowania U2
Dodawanie liczb U2
K
2
Notacja stałoprzecinkowa
.
(Fx-Pt - Fixed-Point Notation)
2012-10-25
Procesory sygnałowe I / X1
10
Konwencja przyjęta w DSP
Zakres liczb od –1 do 1
Przecinek zawsze na zdefiniowanej, umownej pozycji np. q1i15
Mnożenie ułamka przez ułamek zawsze da w wyniku ułamek i nie spowoduje przekroczenia
(no overflow) (np., 0.99 x 0.9999 = mniej niż 1)
Ale dodawanie może spowodować przekroczenie!
Dlaczego takie założenia?
DSP wykorzystuje bardzo intensywnie wielokrotne mnożenia
Notacja Fx-Pt nie powoduje przekroczenia choć ogranicza dynamikę sygnału
Niższy koszt – procesory stałoprzecinkowe są tańsze
Sposób realizacji w procesorach DSP?
Większość procesorów DSP jest nadal 16 bitowych [ale mocno „idą” 32 bity!]
Zakres reprezentowanych liczb całkowitych (-32 768, +32 767)
na 16 bitach
( -2 147 483 648, +2 147 483 647)
na 32 bitach
Najpowszechniejszy format Fx-Pt na 16-bitach dla liczb ułamkowych to (i1q15) lub prościej Q15
Notacja - Q15 U2
Domyślny przecinek
K
2
2012-10-25
6
Wartość liczb U2 w notacji QN
reprezentowanych na M+1 bitach.
(oznaczenie bitów [M,M-1, ...,1,0])
2012-10-25
Procesory sygnałowe I / X1
11
Konwersja z użyciem kalkulatora W
DEC
W
HEX
reprezentowaną kodowaną U2
na M+1 bitach z N bitami na część ułamkową
funkcja „fix” - część całkowita „w stronę zera”
(B = 0 lub 1)
K
2
Wartość liczb U2 w notacji IkQn (lub k.n)
reprezentowanych na M+1=k+n bitach.
(UWAGA! inne oznaczenia bitów [M,M-1, ...,1,0]
k.n c
zęść całkowita „I” k
bitów
„
,
” część ułamkowa „Q” n
bitów
)
2012-10-25
Procesory sygnałowe I / X1
12
Konwersja z użyciem kalkulatora W
DEC
W
HEX
kodowaną U2 na M+1 bitach gdzie „k” i „n”
odpowiednio liczby bitów na części całkowitą i ułamkową
funkcja „fix” - część całkowita „w stronę zera”
UWAGA! inna numeracja i oznaczenia bitów dla wyliczenia „k” i „n”!
K
2
2012-10-25
7
Format i1q15 (albo inaczej Q15)
2012-10-25
Procesory sygnałowe I / X1
13
Zakres zmian reprezentacji Q15
Przykład przeliczeń dla Q15 ma HEX z użyciem kalkulatora
Sposoby omijania trudności obliczeń w zakresie +/- 1
Skalowanie przed obliczeniami
2.0 x (0.5 x 0.45) = (0.2 x 0.5 x 0.45) x 10
Rozbijanie obliczeń na składniki
= (0.5 x 0.45) + (0.5 x 0.45)
K
2
Format i3q13
2012-10-25
Procesory sygnałowe I / X1
14
Zakres zmian reprezentacji i3q13
Przykład przeliczeń dla i3q13 na HEX z użyciem kalkulatora
K
2
2012-10-25
8
Format zmiennoprzecinkowy IEEE 754
2012-10-25
Procesory sygnałowe I / X1
15
Wzór przeliczeniowy;
Przypadki szczególne;
e = exponent jest liczbą kodowaną na 8 bitach z przesunięciem -127
s = znak mantysy (s = 0 dodatni, s =1 ujemny)
f = ułamkowa część znormalizowanej mantysy; z założenia uzupełniana jest 1.0
(uwaga, ta 1-ka nie jest umieszczana w polu kodowania, jest domyślna)
IEEE 754 format zmiennoprzecinkowy- pojedyncza precyzja
Bit
jeśli 0 < e < 255
jeśli e = 255 i f < > 0 nie liczby
jeśli e = 0 i f = 0
jeśli e = 0 i f < >0 de-normalizowane
jeśli e = 255 i f = 0 nieskończoność
K
2
Liczby Flt-Pt IEEE 754 – przeliczenia
(1)
2012-10-25
Procesory sygnałowe I / X1
16
Wynik = 1,0E0 = 1 * 10
0
= 1
hex
3F 80 00 00
Bin
0011 1111 1000 0000 0000 0000 0000 0000
s = 0 zatem: X = +[01,f]
B
* 2
e-127
s 0111 1111 = se = 7Fh = 127
01,0 * 2
0
= 1,0
e = 127
f = 0
Wynik = 1,5E01 = 1,5 * 10
1
= 15
hex
41 70 00 00
Bin
0100 0001 0111 0000 0000 0000 0000 0000
s = 0 zatem: X = +[01,f]
B
* 2
e-127
s100 0000 1 => se = 82h = 130d
0111 ...
[01,111]
U2
f = 0,5 + 0,25 + 0,125 = 0,875
X = 01,875 x 2
3
= 15,0 dec
...
K
2
2012-10-25
9
Liczby Flt-Pt IEEE 754 – przeliczenia
(2)
2012-10-25
Procesory sygnałowe I / X1
17
Wynik = -1,0E0 = -1 * 10
0
= -1
hex
BF 80 00 00
Bin
1011 1111 1000 0000 0000 0000 0000 0000
s = 1
zatem : X = - [01,f]
B
* 2
e-127
se => e = 0111 1111 = 7Fh = 127
-[01,0]
U2
* 2
0
= -1,0
e = 127
f = 0
Wynik = -1,5E01 = -1,5*10=-15
hex
C1 70 00 00
Bin
1100 0001 0111 0000 0000 0000 0000 0000
s = 1
zatem : X = - [01,f]
B
* 2
e-127
s1000 0010
se => e = 82h = 130d
f= 1110 0 ...
-01,f => -[01,1110]
B
= -( 1 + 0,5+0,25 + 0,125)
d
= -1,875
X = -[01,f]
B
* 2
e-127
= -[01,111]
B
* 2
3
X = -[01,f]
B
* 2
e-127
= -1,875 x 2
3
= -15,0
d
K
2
Liczby Flt-Pt IEEE 754 – przeliczenia
(3)
2012-10-25
Procesory sygnałowe I / X1
18
Zatem wynik = -2.0E0 = -2 * 10
0
hex
C0 00 00 00
Bin
1100 0000 0000 0000 0000 0000 0000 0000
s = 1 zatem:
X = - [01,f]
B
* 2
e-127
se => e = 80h = 128
X = -[01,f]
B
* 2
e-127
= -1 * 2
1
= -2.0
e = 128
f = 0
Dodawanie
15 + (-2.0) = 1,625 * 8 = 13 wymaga wyrównania wykładników (e)
i dodawania mantys
Mnożenie
1.5E01 x -2.0E00 = -3.0E01 = 30 wymaga dodawania wykładników
= C1 F0 00 00h
i mnożenia mantys [ ]
Dla procesora zmiennoprzecinkowego
K
2
2012-10-25
10
Liczby Flt-Pt IEEE 754 – przeliczenia
(4)
2012-10-25
Procesory sygnałowe I / X1
19
K
2
Konwersja w odwrotnym kierunku;
W
flt-pt IEEE754
W = (-1)
^
s * 2^n * k gdzie k<2
n = int
(Flor)
(ln W / ln 2)
==> e = n +127 ==> HEX
==>
e
B8
k = W / 2^n
k – 1 = f
==> f * 2^23
==> HEX
==>
f
B23
W W
flt-pt
= se
B8
f
B23
Przykład;
W = 26
s = 0
n = 4
n = 131
e
B8
= 1000 0011
k = 26 / 16 = 1,625
f = k – 1 = 0,625
f = 5 242 880
f
B23
= 101 0000 0000 0000 0000 0000
W
flt-pt
= se
B8
f
B23
= 0100 0001 1101 0000 0000 0000 0000 0000 = 0x41D 0000
Format zmiennoprzecinkowy
• Normalizacja mantysy kodowanej binarnie
Korekta polegająca na przesunięciu bitów w lewo (w stronę
starszych bitów) tak by
– Dla dodatnich liczb
najstarsza znacząca 1-ka przeszła na pierwszą pozycję na lewo od
przecinka;
[01,f]
B
– Dla niektórych DSP (np. C3x) stosowano kodowanie U2
stąd dla ujemnych liczb
najstarsze znaczące 0 przeszło na pierwszą pozycję na lewo od
przecinka
[10,f]
U2
– Zobacz działanie rozkazów EXP i NORM
2012-10-25
Procesory sygnałowe I / X1
20
K
2
2012-10-25
11
Exponent Encoder
2012-10-25
Procesory sygnałowe I / X1
21
Obliczenia exponentu w jednym cyklu ( zakres [ -8, +31 ] )
Wynik jako wartość U2 w rejestrze T
ALU
A
B
EXPONENT
ENCODER
6
T
exp
A ; 1 cykl dla exp
...!!!...
norm A ; 1 cykl normowania
-8
0
15 16
31
Uwaga: rozkaz NORM nie może być kolejnym po rozkazie EXP
K
2
Użycie zmiennego przecinka
2012-10-25
Procesory sygnałowe I / X1
22
LD
@e1,T
LD
@m1,TS,A
LD
@e2,T
ADD
@m2,TS,A
LD
@e3,T
ADD
@m3,TS,A
2*N RAM & Cycles
LD
@e,T
LD
@m1,TS,A
ADD
@m2,TS,A
ADD
@m3,TS,A
…
N+1 RAM & Cycles
Blokowy zmienny przecinek
e
m1
m2
m3
Pełen zmienny przecinek
Pełen zmienny przecinek
Pełen zmienny przecinek
Pełen zmienny przecinek
e1 m1
e2 m2
e3 m3
K
2
2012-10-25
12
Zakresy wartości
2012-10-25
Procesory sygnałowe I / X1
23
Zakresy reprezentowanych liczb
Zakres wartości liczb zmiennoprzecinkowych (Flt-Pt) jest bardzo duży
Relacje
Największa Flt-Pt = ~ Największa całkowita Fx-Pt
(32b)
x (1.5 x 10
29
)
Największa Flt-Pt = ~Największa c.liczb. Fx-Pt
(16b)
x (1.03 x 10
34
)
K
2
Fx-Pt
(16b/32b)
w porównaniu z Flt-Pt
(32b)
2012-10-25
Procesory sygnałowe I / X1
24
Zestawmy...
Urządzenia DSP są projektowane z użyciem zarówno procesorów Fx-Pt jak i Flt-Pt
Fx-Pt zwykle wykorzystują procesory 16-to bitowe, np. TMS320C54xx, TMS320C62xx
Flt-Pt zwykle używają procesorów 32 - bitowych, np. TMS320C3x, TMS320C67xx
Procesory Flt-Pt dysponują zwykle pełną listą rozkazów operacji stałoprzecinkowych
Flt-Pt są zwykle łatwiejsze do programowania (arytmetyka)
Fx-Pt mogą emulować operacje Flt-Pt programowo (dłuższy czas operacji)
K
2
2012-10-25
13
Reprezentacja ułamkowa
2012-10-25
Procesory sygnałowe I / X1
25
0100
* 1101
00000100
0000000
000100
00100
??00110100
Wartość ułamka
-1 1/2 1/4 1/8
(1/2)*(-3/8)
(-3/16)
1000b (-1) … 0111b (~+1 = 1 – 1/8)
Przykł. Oper.
Wynik?
Obsługa rozszerzenia znakowego:
Zakres?
Jaka wartość jest zawarta w akumulatorze?
Gdzie jest przecinek? Q3*Q3=Q6…
SSBX SXM
;sign-extension mode ON
RSBX SXM
;sign-extension mode OFF
Jaka jest „szerokość” pamięci?
Pam
xxxx
K
2
uwaga!!
Musimy pamiętać o rozszerzeniu znakowym
0100
* ...1111101
000000000100
00000000000
0000000100
000000100
00000100
... ...
...111111110100
ACC
1111 0100
Eliminacja nadmiarowego bitu
2012-10-25
Procesory sygnałowe I / X1
26
Jak korygujemy nadmiarowy „bit znaku”?
| F * F | < 1, ale co z F + F?
Zachować 1.110b =(-1/4) do pamięci
0100
x 1101
00000000100
0000000000
000000100
00000100
0000100
……………………
...11111110100
ACC
1111 0100
Pam.
1110
Wartość ułamka
-1 1/2 1/4 1/8
STH A,1,*AR0
;
RĘCZNIE
SSBX FRCT
;
AUTOMAT
STH A,*AR0
-ALBO-
By określić zawartość akumulatora dla zadanej wartości ułamkowj np. 0.707
Należy wyznaczyć
-32768 = 8000h => -1 32767 = 7FFFh => ~+1 = 1-LSB
a0 (.int 32768*707/1000)
HEX
ustawienie bitu FRCT uruchamia automat.
przesunięcie wyniku mnożenia o 1b w lewo
K
2
2012-10-25
14
Obsługa przepełnienia w trakcie dodawania
2012-10-25
Procesory sygnałowe I / X1
27
F + F może być > 1, zatem jak to obsłużyć?
1. Użyj Guard Bits (pozwolą na co najmniej 128 dodawań ze znakiem)
Jak postępować z wynikiem na ponad 32-bitach?
2. W systemach bez wzmocnienia (Ku=1) czasowe przepełnienie
jest dopuszczalne. Wynik pozostaje dopasowany do wejścia.
3. W systemach z wzmocnieniem (Ku>1), nie ma gwarancji
uniknięcia przepełnienia AH | AL.
(t.zn. Wynik zajmie więcej niż 32-bity).
A
lub
B
39
Guard
32
31
High
16
15
Low
0
Bity „
Bity „
Bity „
Bity „Guard
Guard
Guard
Guard”””” zwiększą zakres dynamiki Q15 z
zwiększą zakres dynamiki Q15 z
zwiększą zakres dynamiki Q15 z
zwiększą zakres dynamiki Q15 z +/
+/
+/
+/----1
1
1
1 do
do
do
do +/
+/
+/
+/----12
12
12
127777
K
2
4. Trzeba odpowiednio przygotować właściwy odbiór wyniku!
Obliczenia w Q15
2012-10-25
Procesory sygnałowe I / X1
28
• Mnożenie jest bezpieczne-
dla |a| i |b| ≤ 1 a*b ≤ 1
• Dodawanie już grozi przekroczeniem
• Najpowszechniejsza formuła to suma iloczynów
• Ale nawet jeśli końcowy wynik |y| ≤ 1
to wyniki pośrednie mogą wykroczyć poza zakres
założonej reprezentacji
Zatem jak przygotować obliczenia by były OK?
Sprawdzać zachowanie obliczeń dla najgorszego przypadku
Gdy konieczne rozważać możliwość „pełniejszego zachowania” wyników pośrednich
A gdy trzeba szukać innej reprezentacji lub arytmetyki
K
2
2012-10-25
15
Nasycanie
[Saturation]
2012-10-25
Procesory sygnałowe I / X1
29
Są dwa sposoby obsługi nasycania dla A i B:
Ręczny:
użycie rozkazu SAT src ;(„nasyca” A lub B)
Auto:
nasycanie przy zapamiętaniu
(„nasyca” tylko wartość odsyłaną do pamięci)
SAT A
;
Ręcznie
STH A,*AR1
-ALBO-
LD #0,DP
;
Automat
ORM #1,@PMST ;SST=1
STH A,*AR0
0
-1
+1
Przed
Po
71 2345 6789
F8 1234 5678
00 7FFF FFFF
FF 8000 0000
PMST = Processor Mode Status Reg.
Co jeśli nie chcemy użyć bitów ochrony ( guard bits)?
SAT ustawia bity nasycenia (OVA lub OVB) jeśli wystąpi przepełnienie
SST nie wpływa na OVx czy zawartość akumulatora
K
2
Zaokrąglanie
[Rounding]
2012-10-25
Procesory sygnałowe I / X1
30
1.53
0.50
2.03
2.
Jak zaokrąglić do najbliższej całkowitej ?
- Dodaj 0.50
- Weź rezultat i ...
- „ogranicz wynik” (do całkowitej)
Zaokrąglanie w ACC możemy uzyskać w niektórych rozkazach
(przez automatyczne dodanie 8000h (odp. ½) do akumulatora):
Przykład:
RPTZ A,#98
MAC *AR2+,*AR3+,A
MACR *AR2,*AR3,A
STH A,*(y)
Zazwyczaj zaokrąglanie
stosuje się tylko dla
wyniku ostatniej operacji
(ile ogniw ma ten filtr?)
MAC[R] MAS[R] LD[R] RND
MACA[R] MASA[R] MPY[R]
K
2
Jak testować i porównywać bity?
2012-10-25
16
Porównanie i test bitu (to w c54xx)
CMPM
Smem,#Kod
Jeśli Smem = #Kod, to TC = 1
BITF
Smem,#K
Jeśli Smem bitfield określone przez #K są 1’s, to TC = 1
BIT
Xmem,bit
Jeśli Xmem bit =1, TC =1
BITT
Smem
Jeśli Smem bit określony by T jest = 1, to TC =1
BIT mem, Bit_code
LD #Bit_code, T
BITT mem
Użycie rozkazów BIT albo BITT :
Można nawiązać do klasycznej numeracji przez:
BITM .macro mem,bit_no
BIT mem,15-bit_no
.endm
Use:
BITM @x,5
Ma
Ma
Ma
Makkkkro
ro
ro
ro
BIT5
.set 15-5
BIT @x,BIT5
BC pmad,TC
Podstawienie
Podstawienie
Podstawienie
Podstawienie
15
0
0
15
Pam
Bit_no
Bit_code
...
...
n
n
TC
11
4
K
2
Jakie operacje logiczne można wykonywać?
<=albo=>
2012-10-25
Procesory sygnałowe I / X1
31
Inne operacje arytmetyczne
Operacje bez-znakowe służą mnożeniu czynników reprezentowanych na > 16-bitów,
EXP/NORM są użyteczne w obliczeniach zmiennoprzecinkowych
LDU
Ładuj bez znaku
MPYU
Mnóż (Unsigned * Unsigned)
MACSU
MAC (Signed * Unsigned)
ABS
Wyznacz moduł
NEG
Zaneguj - 2’s complement
CMPL
1’s complement
EXP
T = (liczba „znakowych” 1’ lub 0’) - 8
NORM
dst = src << T
PMST
SMUL
If
OVM/FRCT/SMUL
= 1,
-1*-1 saturated to 00.7FFFFFFFh
K
2
2012-10-25
Procesory sygnałowe I / X1
32
2012-10-25
17
Long Multiply Routine
2012-10-25
Procesory sygnałowe I / X1
33
STM
#X0,AR2
STM
#Y0,AR3
LD
*AR2,T
;
T = x0
MPYU
*AR3+,A
;
A = ux0*uy0
STL
A,@W0
;
w0 = ux0*uy0
LD
A,-16,A
;
A = A>>16
MACSU
*AR2+,*AR3-,A
;
A += y1*ux0
MACSU
*AR3+,*AR2,A
;
A += x1*uy0
STL
A,@W1
;
w1 = A
LD
A,-16,A
;
A = A>>16
MAC
*AR2,*AR3,A
;
A += x1*y1
STL
A,@W2
;
w2 = A-lo
STH
A,@W3
;
w3 = A-hi
K
2
X1
X0
*
Y1
Y0
X1*Y0 X0*Y0
Y1*X1 X0*Y1
Dzielenie
(1)
2012-10-25
Procesory sygnałowe I / X1
34
K
2
RPT
#15
SUBC
*Ar1, B
reszta
iloraz
AH
AL
Ograniczenia; Dzielna >= Dzielnika
Dzielna, Dzielnik > 0
Dzielnik
Dzielna
-
AH
AL
ALUo
==========
SUBC
Smem, src
;rozkaz odejmowania warunkowego
Dzielnik , Dzielna
(w pamięci) , (w A lub B)
(src) – ((Smem) << 15) ---> ALUo
jeśli ALUo < 0
to (src) << 1 ---> src
albo ((ALUo) << 1) + 1 ---> src
Działanie:
2012-10-25
18
Dzielenie
(2)
2012-10-25
Procesory sygnałowe I / X1
35
Zatem ‘C54x na podzielenie dodatnich liczb 16-bitowych potrzebuje 16 cykli
‘C54x używa instrukcji „1-cyklowego 1-bitowego dzielenia”:
warunkowego odejmowania - SUBC
Smem, src
Realizując ją w trybie repetycji 16-to krotnie wykona 16-bitowe dzielenie
Ale wymaga działań uzupełniających; przygotowania dzielenia
i uzupełnienia znakiem operacji
SUBC działa jedynie na operandach
unsigned,
dlatego program wymaga:
Prologu
Porównuje znaki operandów wejściowych
Jeśli są jednakowe planuje dodatni iloraz
Jeśli są różne przewiduje negację (NEG) ilorazu
Usuwa znaki operandów wejściowych
Wykonania bez-znakowego dzielenia
Epilogu
Ustawia znak odpowiedni do wyniku prologu.
K
2
RPT
#15
SUBC
*Ar1, B
Procedura dzielenia
2012-10-25
Procesory sygnałowe I / X1
36
LD
@den,16,A
MPYA
@num
B = num*den (tells sign)
ABS
A
Usuń znak mianownika
STH
A,@den
LD
@num,A
ABS
A
Usuń znakt licznika
16 powtórzeń (iteracji)
1-bitowe dzielenie
XC
1,BLT
Jeśli wynik ma być ujemny
NEG
A
Zmień znak
STL
A,@quot
Zachowaj wynik dzielenia
K
2
RPT
#15
SUBC
@den,A
2012-10-25
19
1. Jak unika się przekroczenia dla operacji mnożenia?
2. Jak postępuje się z przekroczeniem w trakcie dodawania?
3. Jakie bity procesora należy ustawić dla obliczeń na liczbach
ułamkowych ze znakiem ?
4. Jak procesor zaokrągla liczby?
5. Czy operacje Boolowskie są możliwe tylko na akumulatorach?
6. Co realizuje rozkaz “bit @y, 5” ?
Powtórzenie
K
2
2012-10-25
Procesory sygnałowe I / X1
37
1. Jak unika się przekroczenia dla operacji mnożenia?
2. Jak postępuje się z przekroczeniem w trakcie dodawania?
3. Jakie bity procesora należy ustawić dla obliczeń na liczbach
ułamkowych ze znakiem ?
4. Jak procesor zaokrągla liczby?
5. Czy operacje Boolowskie są możliwe tylko na akumulatorach?
6. Co realizuje rozkaz “bit @y, 5” ?
Powtórzenie
Poprzez użycie arytmetyki ułamkowej
Nasycanie: SAT lub SST(bit) OR pracując bez wzmocnienia OR OVM=1
SXM=1 by chronić bity znaku, FRCT=1 dla eliminacji nadmiarowych bitów znaku,
OVM=0 by umożliwić użycie bitów „guard”
Dodaje 8000h do akumulatora po wykonaniu operacji.
Kopiuje do bitu TC 10-ty bit komórki pamięci o adresie DP:@y
Nie. ANDM/ORM/XORM działają bezpośrednio na pamięci danych
K
2
2012-10-25
Procesory sygnałowe I / X1
38
2012-10-25
20
Warto przemyśleć i zapamiętać
2012-10-25
Procesory sygnałowe I / X1
39
• Kod wagowy
• Reprezentacja HEX, BIN
• Reprezentacja liczb całkowitych i ułamkowych
stałoprzecinkowa Fx-Pt
Zmiennoprzecinkowa Flt-Pt
(IEEE i TMS)
• Możliwości i zakresy reprezentacji
• Reprezentacja liczb dodatnich i ujemnych
• Rozszerzenie znakowe (Rola SXM)
• Korekcja wyniku mnożenia l. ułamkowych
• Rola i miejsce bitu FRCT
• Rola i zadania bitów GUARD akumulatora
• Nasycanie wyniku i jego realizacja - SAT
• Rola i znaczenie bitów OVM, OVA, OVB
• Zaokrąglanie wyniku i jego konsekwencje
• Przebieg operacji dzielenia
• Mnożenie podwójnej precyzji
• ...
• Sposoby realizacji operacji na bitach
• Operacje logiczne i ich realizacja
• Przesunięcia i rotacje
• Realizacja operacji dzielenia w DSP
• Arytmetyka rozszerzonej dokładności
• Zmienny przecinek w stałoprzecinkowym DSP
• Reprezentacja liczb ujemnych
• Reprezentacja liczb dodatnich
• Reprezentacja liczb całkowitych
• Reprezentacja liczb niecałkowitych
• Kodowanie U2 - uzupełnienia do dwóch
• Kodowanie znak Z - Mod - moduł
• Kodowanie Q15
• Konwersje kodów
HEXBIN
DECBIN
DECHEX
U2 Z-Mod
DEC Flt-Pt IEEE
DEC Flt-Pt TMS...
K
2
cd. Dodatki 1
• „Ku podniesieniu świadomości” ....
2012-10-25
Procesory sygnałowe I / X1
40
K
2
2012-10-25
21
Format zmiennoprzecinkowy dla TMS C3x
(C3x Floating-Point Format)
2012-10-25
Procesory sygnałowe I / X1
41
Wzory przeliczeniowe
Przypadek szczególny
e = exponent jest liczbą U2 ze znakiem kodowaną na 8 bitach
(wsp. skalowania)
s = znak mantysy (s = 0 dodatni, s =1 ujemny)
f = ułamkowa część mantysy kodowanej U2 (po normalizacji nie zawiera
1-ki na lewo od przecinka, jest ona domyślna!)
TMS format zmiennoprzecinkowy- pojedyncza precyzja
Bit #
Exponent (e)
Hex U2.
00
01
7F
FF
80
Dec
1
127
-1
-128
0
K
2
Liczby Flt-Pt TMS – przeliczenia
(1)
2012-10-25
Procesory sygnałowe I / X1
42
Wynik = 1.0E0 = 1 * 10
0
= 1
hex
00 00 00 00
Bin
0000 0000 0000 0000 0000 0000 0000 0000
s = 0 stosujemy wzór 1 : X = [01.f]
B
* 2
e
01.0 * 2
0
= 1.0
e = 0
f = 0
Wynik = 1.5E01 = 1.5 * 10
1
= 15
hex
03 70 00 00
Bin
0000 0011 0111 0000 0000 0000 0000 0000
s = 0 stosujemy wzór 1 : X = [01.f]
B
* 2
e
0011
e = 3
0111 ...
[01.111]
U2
f = 0.5 + 0.25 + 0.125 = 0.875
X = 01.875 * 2
3
= 15.0 dec
...
K
2
2012-10-25
22
Liczby Flt-Pt TMS – przeliczenia
(2)
2012-10-25
Procesory sygnałowe I / X1
43
Wynik = -2,0E0 = -2 * 10
0
= -2
hex
00 80 00 00
Bin
0000 0000 1000 0000 0000 0000 0000 0000
s = 1
stosujemy wzór 2 : X = -2 + [0,f]
B
* 2
e
[10,0]
U2
* 2
0
= -2,0
e = 0
f = 0
Wynik = -3,1E01 = -3,1*10=-31
hex
04 88 00 00
Bin
0000 0100 1000 1000 0000 0000 0000 0000
s = 1
stosujemy wzór 2 : X = -2 + [0,f]
B
* 2
e
0100
e = 4
1000 1000
s0,f = [10,0001]
U2
= -2 + 0 + 0,0625 = -1,9375
X = [s0,f]
U2
* 2
e
= [10,0001]
U2
* 2
4
X = -2 + [0,f]
B
* 2
e
= -1,9375 * 2
4
= -31,0 dec
...
K
2
Jeszcze trochę o zmiennym przecinku TMS
2012-10-25
Procesory sygnałowe I / X1
44
Zatem wynik = -1.5E0 = -1.5 * 10
0
hex
00 C0 00 00
Bin
0000 0000 1100 0000 0000 0000 0000 0000
s = 1 Stosujemy wzór 2: X = ( -2.0 + [0.f]
B
) * 2
e
( -2.0 + 0.5 ) * 2
0
= -1.5
e = 0
f = 0.1
Dodawanie
15 + (-2.0) = 1,625 * 8 = 13 wymaga wyrównania wykładników (e)
i dodawania mantys
Mnożenie
1.5E01 * -2.0E00 = -3.0E01 = 30 wymaga dodawania wykładników
= 03 A0 00 00h
i mnożenia mantys
Dla procesora zmiennoprzecinkowego
K
2