Montaż komputera: klasy PC – jednostka tower PRZEZNACZENIE: Multimedia, internet
Jednostka mnożąco-sumującą EMAC (Enhanced Multiply ...
Transcript of Jednostka mnożąco-sumującą EMAC (Enhanced Multiply ...
2
Moduł MAC (1)Moduł MAC (1)
Jednostka arytmetyczna przeznaczona do operacji wykorzystywanych podczas cyfrowej
obróbki sygnałów DSP (Digital Signal Processing).
Sygnały wejściowe
Sygnały wyjściowe
ADC DACProcesor DSP (MAC)
MCF 5250
3
Zastosowanie jednostki EMAC Zastosowanie jednostki EMAC
● Cyfrowe przetwarzanie sygnałów ● Transformaty:
– Fast Fourier transform FFT, – Discrete Cosine Transform (DCT), – Fast Hadamard Transform (FHT), – Discrete Hartley Transform (DHT), itd...
● Filtry cyfrowe:– Finite impulse response filter (FIR), – Infinite impulse response filter (IIR),– Kompresja obrazów, selektywne filtrowanie
sygnałów, sterowniki PID, itd...
4
Transformata DCTTransformata DCT
● DTC = rozszerzenie transformaty FFT z dodatkowym przetwarzaniem danych● Mnożenie macierzy,● Mnożenie i akumulacja wyników,
5
Moduł MAC (2)Moduł MAC (2)
Wykonywane operacje:● Szybkie mnożenie liczb ze
znakiem oraz bez znaku,● Operacje MAC (ze znakiem oraz
bez), liczby całkowite oraz ułamkowe,
● Dedykowane operacje na rejestrach oraz macierzach.
MAC: operacje 16-bitowe, pojedynczy 32-bitowy akumulator, trójstopniowy potok
EMAC: operacje 32-bitowe, cztery 48-bitowe akumulatory, czterostopniowy potok, liczby ułamkowe (Frac32)
7
Rejestry modułu EMACRejestry modułu EMAC
MACSRACC0ACC1ACC2ACC3ACCext01ACCext23MASK
032 16 15
ACC0ACC1
ACC2ACC3
8
Rejestr statusowy MACSR (1)Rejestr statusowy MACSR (1)
PAVx – flaga przepełnienia, ustawiana podczas akumulacyjnego dodawania, czyszczona podczas kasowania flagi V, zapisu MACSR lub załadowania akumulatora,
OMC – przepełnienie (OMC=0) / nasycenie (OMC=1),
S/U – Operacje ze znakiem lub bez,F/I – Tryb pracy: całkowity (F/I=0), ułamkowy (F/I=1) -1...1-2-15 lub 1...1-2-31
R/T – Zaokrąglanie (R/T=1) / Obcinanie (R/T=0) (podczas kopiowania zawartości 48-bitowego akumulatora do rejestru danych),
N – ustawiana, gdy rezultat operacji jest ujemny (MULS, MULU – nie ustawiają flagi N)Z – ustawiana, gdy rezultat operacji zerowy (MULS, MULU – nie ustawiają flagi Z) V – ustawiana, gdy nastąpi przepełnienie podczas wykonywania operacji MAC, MSAC
(64 bit),EV – ustawiana, gdy nastąpi przepełnienie (32/40 bit) podczas wykonywania operacji
MAC, MSAC.
10
Możliwe formaty danych (1)Możliwe formaty danych (1)
● Liczby ujemne (U2) – -2(N-1) ... 2(N-1) - 1● Liczby dodatnie – 0 ... 2(N-1) – 1● Liczby ułamkowe – -1 ... 1 – 2(-N+1)
0x8000.0000 = -10x7FFF.FFFF = 1 - 2-31
14
Zapis i odtwarzanie Zapis i odtwarzanie stanu jednostki EMACstanu jednostki EMAC
EMAC_state_save:move.l %MACSR, %D7clr.l %D0move.l %D0, %MACSR | wyłącz zaokr.move.l %ACC0, %D0move.l %ACC1, %D1move.l %ACC2, %D2move.l %ACC3, %D3move.l %ACCEXT01, %D4move.l %ACCEXT23, %D5move.l %MASK, %D6movem.l #0x00FF, (%A7)
EMAC_state_restore:movem.l (%A7), #0x00FFmove.l #0, %MACSR | wyłącz zaokr.move.l %D0, %ACC0move.l %D1, %ACC1move.l %D2, %ACC2move.l %D3, %ACC3move.l %D4, %ACCEXT01move.l %D5, %ACCEXT23move.l %D6, %MASKmove.l %D7, %MACSR
16
Rejestr maski (2)Rejestr maski (2)
0x0..00
0x0..BF0x0..FF
MOVE.L #0x10.0000, %A0MOVE.L #0x00FF, %MASK
MAC.L %D2, %D0, (%A0)+&, %D2, ACC0
if <ea> = (An) oa = An & (0xFFFF, %MASK) if <ea> = (An)+ oa = (An+4) & (0xFFFF, %MASK) if <ea> = -(An) oa = (An-4) & (0xFFFF, %MASK) if <ea> = (d16,An) oa = (An+se_d16) & (0xFFFF, %MASK)
oa = (An+4) & (0xFFFF 00FF)
0x10.0000 & (0xFFFF 00FF) +40x10.0004 & (0xFFFF 00FF) +40x10.0008 & (0xFFFF 00FF) +4
...
...0x10.00FC & (0xFFFF 00FF) +40x10.0000 & (0xFFFF 00FF) +4
Dana 0
Dana n-1
18
Multiply Accumulate Multiply Accumulate
mac.w %a0u, %d1l, %ACC0mac.l %d0, %a1, >>, %ACC2mac.w %a0u, %a1l, <<,%ACC3mac.l %d0, %d1, %ACC4 Error: syntax error -- statement `mac.w
%d0u,%d1l,<<,%ACC4' ignored
19
Multiply Accumulate with LoadMultiply Accumulate with Load
Tryby adresowania argumentu źródłowego (Word) <ea>y: (Ay), (Ay)+, -(Ay), (d16,Ay)
mac.w %d2u, %d0u, (%a0)+&, %d1, %ACC0 | D2u * D0u -> ACC0, (A0)=> D1, A0++
21
Przykłady użycia MAC/MSACPrzykłady użycia MAC/MSACSample 0Sample 1
Sample n-1
Coefficient 0Coefficient 1
Coefficient n-1
Sample 0Sample 1
Sample n-1
Coefficient 0
Coefficient n-1Coefficient n-2
Sample n-2
A5
A6
A0movem.l (%a0), %d0-%d3
mac.w %d0u, %d0l, %ACC0mac.w %d1u, %d1l, %ACC0
movem.l (%a5), %d0-%d3movem.l (%a6), %a0-%a3
mac.w %d0l, %a0l, >>, %ACC2msac.w %d0u, %a0u, <<,%ACC3
mac.l %d0, %a1, %ACC1msac.l %d0, %a1, %ACC2
Coefficient 1
31 16 15 0
31 16 15 0
zwykłe 1 clk
zwykłe 3 clk
28
Przykłady instrukcji MOVEPrzykłady instrukcji MOVE
LOAD
move.l %D0, %ACC0move.l #100, %ACC3
move.l %D0, %ACCext23move.l #100, %ACCext23
move.l %D0, %MACSRmove.l #100, %MACSR
move.l %D0, %MASKmove.l #100, %MASK
STORE
move.l %ACC0, %D0move.l %ACC3, %ACC0
move.l %ACCext23, %D0 move.l %ACCext01, %D7
move.l %MACSR, %D0move.l %MACSR, %CCR
move.l %MASK, %D0move.l %MASK, %D7
movem.l (%A7),%D0-%D7/%A0-%A6 Transfer BURST 60 bajtów
30
Filtry cyfroweFiltry cyfrowe
Filtr o nieskończonej odpowiedzi impulsowej (IIR).Filtr o skończonej odpowiedzi impulsowej (FIR) => a(k) = 0.
Równanie opisujący przykładowy filtr FIR czwartego rzędu
32
Normalizacja współczynników filtru Normalizacja współczynników filtru
| data sectionalign 104coeff: | 2x10+1 słów = 24 B
.long 0x011D.035D
.long 0xFD81.00E9
.long 0x01AE.FC61
.long 0x02BC.01F2
.long 0xF6DF.0FAA
.long 0x2AAF.0000
queue: | dane wejściowe 32 słowa na granicy 128 bajtów
DS.B 64
Obliczone wsp. x32768 hex
h0, h20 0,008697 285 0x011Dh1, h19 0,026267 861 0x035Dh2, h18 -0,01949 -639 0xFD81h3, h17 0,007113 233 0x00E9h4, h16 0,013134 430 0x01AEh5, h15 -0,028302 -927 0xFC61h6, h14 0,021353 700 0x02BCh7, h 13 0,015199 498 0x01F2h8, h12 -0,07133 -2337 0xF6DFh9, h11 0,122376 4010 0x0FAAh10 0,333457 10927 0x2AAF
||h||1 = Σ |h(n)| ||h||
32768 = Σ |h(n)|
} }Dolnoprzepustowy filtr cyfrowy o skończonej
odpowiedzi impulsowej 21 rzędu
33
Implementacja filtru cyfrowego FIR (2)Implementacja filtru cyfrowego FIR (2)main:
clr.l %d0...clr.l %d7move.l #0xFF40, %mask | maska dla bufora danych wej. 64 Blea coeff, %a1 | adres pamięci z wsp. filtrumovem.l (%a1), #0x00FC | załadowanie rejestrów d2-d7bsr.b FILTER
FILTER: move.l #0, ACC0bsr GET_SAMPLE | pobierz próbkę x(n), {x(n), x(n-1)} w D0,
| wskaźnik do bufora danych w A0 x(n-2)...
mac.w %d2u, %d0u, (%a0)+&, %d1, %ACC0 | h(0) * x(n) => acc0, {x(n-2), x(n-3)} => d1mac.w %d2l, %d0l, %ACC0 | h(1) * x(n-1) => acc0mac.w %d3u, %d1u, (%a0)+&, %d0, %ACC0 | h(2) * x(n-2) => acc0, {x(n-4), x(n-5)} => d0mac.w %d3l, %d1l, %ACC0 | h(3) * x(n-3) => acc0mac.w %d4u, %d0u, (%a0)+&, %d1, %ACC0 | h(4) * x(n-4) => acc0, {x(n-6), x(n-7)} => d1
...mac.w %d2u, %d0u, %ACC0 | h(20) * x(n-20) => acc0move.l %ACC0, %d0swap %d0move.w %d0, RESULT | save calculated samplerts
34
Implementacja filtru cyfrowego FIR (3)Implementacja filtru cyfrowego FIR (3)
A0+0x00
A0+0x40
A0=0x50000
15 0
Sample 1Sample 2
Sample n-1
mac.w %d2u, %d0u, (%a0)+&, %d1, %ACC0.........
<oa> = 0x50000 AND 0xFFBF => 0x50000 0xB = 1011mac.w .........(%a0)+&..........
<oa> = 0x50002 AND 0xFFBF => 0x50002mac.w .........(%a0)+&..........
<oa> = 0x5003E AND 0xFFBF => 0x5003Emac.w .........(%a0)+&..........
zapis nowej próbki pod adres 0x3E <oa> = 0x50040 AND 0xFFBF => 0x50000
mac.w .........(%a0)+&..........<oa> = 0x50002 AND 0xFFBF => 0x50002
mac.w .........(%a0)+&..........
move.l #0xFFBF, %mask | maska dla bufora danych wej. 64 słowa
64 s
łow
a