- familia 56300 - capitolul 3 procesor motorola 56300.pdf · pentru aplica ţ ii dsp cum ar fi: ......
TRANSCRIPT
Capitolul 3 – Procesoarele DSP Motorola 56300 31
CAPITOLUL 3
PROCESOARELE DSP MOTOROLA
- FAMILIA 56300 -
3.1 INTRODUCERE
Familia de procesoare Motorola DSP 56300 este prezentată în Figura
3.1-1.
Figura 3.1-1 Familia de procesoare Motorola DSP 56300
Procesoarele digitale de semnal DSP56311 şi DSP56307 sunt folosite
în special în telecomunicaţii. Ca si celelalte componente din familia
Aplicaţii ale procesoarelor de semnal în comunicaţii32
DSP56300, aceste dispozitive au evoluat din nucleul DSP56000 Motorola şi
păstrează coduri compatibile.
DSP56307 şi DSP56311, datorită memoriei mari integrate în chip şi a
coprocesorului, destinat în special operaţiilor de filtrare, sunt foarte potrivite
pentru aplicaţii DSP cum ar fi:
- eliminarea ecoului;
- procesarea benzii de baza;
- codarea si decodarea vocii.
Coprocesorul procesează algoritmi de filtrare în paralel cu funcţionarea
nucleului. Memoria RAM mare din interiorul chipurilor elimină stările de
aşteptare, permite funcţionarea pe mai multe canale, îmbunătăţeşte
performantele aplicaţiilor, şi reduce consumul de putere.
Principalele caracteristici ale procesorului DSP56307 sunt
• 170 MIPS, 100 Core MIPS
• EFCOP (coprocesor cu filtrare îmbunătăţită) 100 MIPS
• 64K cuvinte (24-bit) on-chip SRAM
• memoria de program: 16K, 24K, 32K, 40K sau 48K
• memoria de date: 48K, 40K, 32K, 24K sau 16K
• mai multe porturi: 2 porturi ESSI, portul SCI, interfaţa HI08, 6 canale
DMA
Principalele caracteristici pentru procesorul DSP56311 sunt:
• 255 MIPS, 150 Core MIPS;
• EFCOP (coprocesor de filtrare) 150 MIPS;
• memoria de program: 32K, 48K, 64K, 80K sau 96K;
• memoria de date: 96K, 80K, 64K, 48K sau 32K;
• 2 porturi ESSI, port SCI, interfaţa HI08, 6 canale DMA.
Capitolul 3 – Procesoarele DSP Motorola 56300 33
Prezentăm două priviri de ansamblu pentru blocurile funcţionale la
DSP563xx.
Pentru privirea de ansamblu 1 apar:
1. Zona perifericelor (Peripheral Expansion Area)
2. Zona memoriei (Memory Expansion Area);
3. Nucleul (DSP56300 Core).
Figura 3.1-2 Privirea de ansamblu 1
Zona perifericelor (Peripheral Expansion Area)
• Coprocesorul - Enhanced Filter Coprocessor (EFCOP);
• Portul de comunicaţie serială - Serial Communications Interface (SCI)
port;
• Timerul - Triple Timer Module;
• Interfaţa HI08 - Host Interface (HI08) port;
Aplicaţii ale procesoarelor de semnal în comunicaţii34
• Porturile de comunicaţie serială sincronă - Dual Enhanced Synchronous
Serial Interface (ESSI) ports;
• Pinii I/O - 34 user-configurable General-Purpose I/O (GPIO) pins.
Figura 3.1-3 Privirea de ansamblu 2
Zona memoriei (Memory Expansion Area)
• 128K de cuvinte RAM;
• Memoria de program P: până la 96K x 24 biţi;
• Memoria de date X: până la 48K x 24 biţi;
• Memoria de date Y: până la 48K x 24 biţi;
• Până la 12M cuvinte de memorie externă pentru memoria de program – P
şi date X, Y.
Capitolul 3 – Procesoarele DSP Motorola 56300 35
Figura 3.1-4 Nucleul
NUCLEUL (DSP56300 CORE)
• Unitatea aritmetică şi logică - Data Arithmetic Logic Unit (ALU);
• Unitatea de Generare a adreselor Address Generation Unit (AGU);
• Memoria portului A - Port A Memory Expansion;
• Memoria ROM;
• Program Control Unit – Program Control Unit (PCU);
• Controlerul DMA - Direct Memory Access (DMA) Controller;
• Oscilatorul - Phase Lock Loop (PLL) Clock Oscillator;
• Emulatorul - On-Chip Emulator.
Aplicaţii ale procesoarelor de semnal în comunicaţii36
3.2 UNITATEA ARITMETICĂ ŞI LOGICĂ (ALU)
Registrele ALU sunt (Figura 3-5):
a) de intrare: X(X1,X0) şi Y(Y1,Y0), cu lungime 48(24,24);
b) acumulatori: A(A2,A1,A0) şi B(B2,B2,B0) cu lungime 56(8,24,24).
47 0 47 0
23 0 23 0 23 0 23 0
55 0 55 0
23 7 0 23 0 23 0 23 7 0 23 0 23 0
*Citiţi ca biţi de extensie de semn.
X1 X0 Y0Y1
B1 B0A1 A0* A2 * B2
DATA ALUREGISTRE ACUMULATOR
DATA ALUREGISTRE DE INTRAREX Y
A B
Figura 3-5 Registrele ALU
În Figura 3-6 este prezentată structura ALU.
DSP56300 foloseşte reprezentarea fracţionară pentru toate operaţiile
ALU.
Virgula zecimală este aliniată la stânga (după bitul de semn).
Pentru a păstra alinierea la virgulă, datele pe 24 de biţi sunt scrise în
partea cea mai semnificativă a acumulatorului (A1 sau B1) iar A0 sau B0 vor
fi 0.
La scrierea operanzilor în acumulator se realizează extensia de semn în
registrele A2 sau B2.
Capitolul 3 – Procesoarele DSP Motorola 56300 37
X0
X1
Y0
Y1
MULTIPLICARE
REGISTRE PIPELINE
MUX
REG PIPELINEREGISTRE PIPELINE
UNITATEA PRELUCRARE
PE BIT ŞI DE SHIFTARE
UNITATEA DE
ACUMULARE
ŞI ROTUNJIRE
ŞIFTARE
ACUMULATOR
A(56)
B(56)
SHIFTARE/LIMITARE
Y DATA BUS
P DATA BUS
24 24
X DATA BUS
OPERAND IMEDIAT
24 24
56
48
56
56
56
56 56 56
24
56
24
Figura 3-6 ALU
Rezultatele adunării şi scăderii sunt echivalente atât pentru numerele
fracţionare cât şi pentru numerele întregi.
Aplicaţii ale procesoarelor de semnal în comunicaţii38
La înmulţire sau la împărţire reprezentarea numerelor fracţionare diferă
de a numerelor întregi. Pentru înmulţirea numerelor întregi, datele sunt
aliniate la dreapta şi virgula zecimală este considerată la dreapta LSB.
Deoarece rezultatul înmulţirii este aliniat la dreapta, rezultă extensia la
doi biţi de semn. Pentru înmulţirea numerelor fracţionare, datele sunt aliniate
la stânga, cu virgula după bitul de semn.
Rezultatul înmulţirii este de asemenea aliniat la stânga şi se adaugă un
zero la LSB pentru completarea celor 2N biţi.
Rezultatul corect al înmulţirii numerelor întregi se obţine prin
deplasarea (shiftarea) aritmetică la dreapta cu un bit a rezultatului înmulţirii
fracţionare.
ÎNMULŢIREA NUMERELOR CU SEMN N x N –> 2N – 1 BIŢI
S
INTREG FRACŢIONAL
S
REZULTAT 2N – 1EXTENSIE DE SEMN
2N BIŢI
ÎNMULŢIRE CU SEMN
S MSP LSPS
S S
REZULTAT 2N – 1COMPLETARE CU ZERO
2N BIŢI
ÎNMULŢIRE CU SEMN
S MSP LSP 0
Figura 3-7 Înmulţirea numerelor întregi
Unitatea de înmulţire-acumulare (MAC UNIT)
Datele de intrare în MAC pot fi numai din registrele X sau Y.
Unitatea efectuează înmulţiri pe 24 x 24 biţi în format fracţionar,
operanzi cu sau fără semn.
Rezultatul înmulţirii este adunat la acumulatorul destinaţie
(instrucţiunea MAC).
Capitolul 3 – Procesoarele DSP Motorola 56300 39
Dacă se foloseşte instrucţiunea MPY, acumulatorul este şters şi apoi se
scrie rezultatul înmulţirii.
Dacă rezultatul înmulţirii (56 biţi) este stocat ca operand pe 24 de biţi
LSP poate fi trunchiat sau rotunjit (rotunjirea cu instrucţiunile MACR,
MPYR, MACRI, MPYRI). Rotunjirea poate fi convergentă sau în
complement faţă de 2.
La stocarea în acumulator rezultatul înmulţirii poate fi saturat astfel ca
acesta să intre în 48 de biţi (fără a se mai folosi extensia acumulatorului A2
sau B2).
Înmulţirea cu acumulare
MAC (±)S1,S2,D 1 2D S S D± ⋅ →
S1, S2 - surse: registre: X0,Y0, X1,Y1
D - destinaţia: acumulator: A, B
MAC (±)S,#n,D 2 nD S D−± ⋅ →
S - sursa: registre: X0,Y0,X1,Y1
#n valoare imediată <23
D - destinaţia: acumulator: A,B
Înmulţirea
MPY (±)S1,S2,D 1 2S S D± ⋅ →
S1, S2 - surse: registre: X0,Y0,X1,Y1
D - destinaţia: acumulator: A,B
MPY (±)S,#n,D 2 nS D−± ⋅ →
S - sursa: registre: X0,Y0, X1,Y1
#n valoare imediată <23
D - destinaţia: acumulator: A,B
Aplicaţii ale procesoarelor de semnal în comunicaţii40
Înmulţirea cu acumulare cu operand imediat
MACI (±)#xxxx,S,D #D xxxx S D± ⋅ →
S - sursa: registre: X0,Y0, X1,Y1
#xxxx valoare imediată pe 24 biţi
D - destinaţia: acumulator: A, B
Înmulţirea cu operand imediat
MPYI (±)#xxxx,S,D # xxxx S D± ⋅ →
S - sursa: registre: X0, Y0, X1, Y1
#xxxx valoare imediată pe 24 biţi
D - destinaţia: acumulator: A, B
EXEMPLU:
Înmulţirea numerelor complexe se face conform formulei:
( ) ( )R I R I R IC jC A jA B jB+ = + ⋅ +
Rezultă:
R R R I I
I R I I R
C A B A BC A B A B
= ⋅ − ⋅= ⋅ + ⋅
Putem lua un exemplu numeric:
( ) ( )0.5 0.2 0.4 0.1 0.18 0.13j j j+ ⋅ + = +
Vom iniţializa registrele de date ale ALU astfel:
x1 x0 y1 y0
0.5RA = 0.4RB = 0.2IA = 0.1IB =
Rezultatul va fi obţinut în registrele acumulator astfel:
a b
0.18RC = 0.13IC =
Capitolul 3 – Procesoarele DSP Motorola 56300 41
Programul în limbaj de asamblare este următorul:
move #0.5,x1 x1 x0move #0.4,x0 0.5 0.4move #0.2,y1 y1 y0move #0.1,y0 0.2 0.1
ampy x0,x1,a 0.2mac -y0,y1,a 0.2 + (-0.02) = 0.18 bmpy y0,x1,b 0.05mac x0,y1,b 0.05 + 0.08 = 0.13
Registrele acumulator A şi B
Sunt registrele de 56 de biţi, fiecare registru acumulator constă din trei
registre concatenate A2:A1:A0 sau B2:B1:B0. Oricare din cele 6 registre
menţionate pot fi scrise/citite pe magistrala de date X sau Y.
Dacă se doreşte transferul întregului acumulator pe magistrala X sau Y,
cei 56 de biţi din acumulator sunt shiftaţi/limitaţi la 24 de biţi.
Registrele acumulator sunt folosite ca:
- destinaţie pentru înmulţire şi operaţii logice;
- sursă / destinaţie pentru adunare şi deplasări.
Adunarea
ADD S,D S D D+ →
S - sursa: registru: B/A, X, Y, X0, Y0, X1, Y1
valoare imediată: #$xx, #$xxxxxx
D - destinaţia: acumulator: A/B
Aplicaţii ale procesoarelor de semnal în comunicaţii42
Scăderea
SUB S,D D S D− →
S - sursa: registru: B/A, X, Y, X0, Y0, X1, Y1
valoare imediată: #$xx, #$xxxxxx
D - destinaţia: acumulator: A/B
Un tip special de instrucţiuni sunt cele de înmulţire / împărţire cu 2 a
acumulatorului şi adunarea / scăderea unui operand. Aceste instrucţiuni sunt
utile în implementarea eficientă a fluturilor pentru decimare în timp la
algoritmii FFT.
Deplasarea la stânga şi acumularea
ADDL S,D 2S D D+ ⋅ →
Deplasarea la dreapta şi acumularea
ADDR S,D / 2S D D+ →
Deplasarea la stânga şi scăderea
SUBL S,D 2 D S D⋅ − →
Deplasarea la dreapta şi scăderea
SUBR S,D / 2D S D− →
S - sursa: acumulator: B/A
D - destinaţia: acumulator: A/B
Capitolul 3 – Procesoarele DSP Motorola 56300 43
EXEMPLU:
Să considerăm funcţia de transfer:
1 * 1 * 1 * 2 1 2 2
1 1 1( )
(1 )(1 ) 1 ( ) 1 2Re{ } | |H z
pz p z p p z p pz p z p z− − − − − −= = =− − − + + − +
Ieşirea ( )y n poate fi calculată astfel:
2( ) 2Re{ } ( 1) | | ( 2) ( )y n p y n p y n x n= − − − +
Pentru un exemplu numeric:
0.8 0.5p j= − .
Avem
2| | 0.64 0.25 0.89p = + =
( ) 2 0.8 ( 1) 0.89 ( 2) ( )y n y n y n x n= ⋅ − − − +
Considerăm că avem în registrele y0, y1 şi b stările filtrului:
y1 y0 b
( 2)y n − ( 1)y n − ( )x n
Deoarece termenul 2Re{ }p are valori supraunitare nu putem stoca
direct valoarea 1.6 în registrul x0.
x1 x02| | 0.89p = Re{ } 0.8p =
Programul va calcula ieşirea ( )y n folosind instrucţiunea addl astfel:
mac x0,y0,a ; 0.8 ( 1)a y n= −
mac -x1,y1,b ; ( ) 0.89 ( 2)b x n y n= − −
addl b,a ; 2 ( )a a b y n= + ⇒
Aplicaţii ale procesoarelor de semnal în comunicaţii44
3.3 UNITATEA LOGICĂ ŞI DE DEPLASARE
Conţine un registru de deplasare pe 56 de biţi, bidirecţional, multi-bit şi
unitatea de procesare logică. Operaţiile efectuate sunt:
- deplasare stânga / dreapta multi-bit aritmetică şi logică;
- rotaţie cu 1 bit stânga / dreapta;
- extragerea, inserţia, concatenarea unui câmp de biţi;
- normalizarea acumulatorului;
- operaţii logice.
Deplasare aritmetică la stânga
ASL D cu un bit
ASL S1,S2,D cu mai mulţi biţi
Deplasare aritmetică la dreapta
ASR D cu un bit
ASR S1,S2,D cu mai mulţi biţi
S1 - număr de biţi: registru: X0,Y0,X1,Y1,A1,B1 sau
valoare imediată pe 6 biţi: #n
S2 - sursa: acumulator: A,B
D - destinaţia: acumulator: A,B
Capitolul 3 – Procesoarele DSP Motorola 56300 45
EXEMPLU:
asl #7,a,b
asr x0,a,b
Deplasare logică la stânga
LSL D cu un bit
LSL S,D cu mai mulţi biţi
Deplasare logică la dreapta
LSR D cu un bit
LSR S,D cu mai mulţi biţi
S - număr de biţi: registru: X0, Y0, X1, Y1, A1,B1
valoare imediată pe 6 biţi: #n
D - destinaţia: acumulator: A, B
Aplicaţii ale procesoarelor de semnal în comunicaţii46
EXEMPLU:
lsl #7,a
lsr x0,b
Rotaţie la stânga cu un bit
ROL D
D: acumulator A,B
Rotaţie la dreapta cu un bit
ROR D
D: acumulator A,B
Capitolul 3 – Procesoarele DSP Motorola 56300 47
Normalizarea acumulatorului
• pasul 1: se numără câţi biţi de 0 sau de 1 consecutivi sunt în acumulator
începând de la MSB (bitul 55);
• pasul 2: se scade acest număr din 9 şi se scrie rezultatul în MSP a
acumulatorului destinaţie (A1 sau B1). Acest rezultat este în intervalul –47,
+8;
• pasul 3: se shiftează aritmetic acumulatorul, la dreapta dacă operandul e
pozitiv, sau la stânga dacă e negativ, cu numărul de biţi egal cu diferenţă
anterioară.
CLB S,D D = 9 nr. MSB de 0 sau de 1din S
S - sursa: acumulator: A/B
D - destinaţia: MSP acumulator: B/A
Normalizarea acumulatorului
NORMF S,D dacă S[23]=0 atunci ASR S,D altfel ASL –S,D
S - sursa: registru: X0,Y0,X1,Y1,A1,B1
D - destinaţia: acumulator: A,B
EXEMPLU:
Înaintea execuţiei După execuţie
clb a,b A: $20:0000:0000 B: $00:0007:0000
normf b1,a A: $20:0000:0000 A: $00:4000:0000
Aplicaţii ale procesoarelor de semnal în comunicaţii48
Manipularea câmpurilor de date
EXEMPLU:
extract b1,a,a
EXEMPLU:
insert b1,x0,a
EXEMPLU:
merge x0,b
Capitolul 3 – Procesoarele DSP Motorola 56300 49
Instrucţiuni logice
Şi logic
AND S,D [47 24] [47 24]S D D• − → −
S - sursa: registru: X0,Y0, X1,Y1
valoare imediată: #$xx, #$xxxxxx
D - destinaţia: acumulator: A/B
Sau logic
OR S,D [47 24] [47 24]S D D+ − → −
S - sursa: registru: X0, Y0, X1, Y1
valoare imediată: #$xx, #$xxxxxx
D - destinaţia: acumulator: A/B
Nu logic
NOT D [47 24] [47 24]D D− → −
D - destinaţia: acumulator: A/B
Sau exclusiv
EOR S,D [47 24] [47 24]S D D⊕ − → −
S - sursa: registru: X0, Y0, X1, Y1
valoare imediată: #$xx, #$xxxxxx
D - destinaţia: acumulator: A/B
Aplicaţii ale procesoarelor de semnal în comunicaţii50
EXEMPLU: Conversia din binar în cod Gray
Două numere consecutive scrise în codul Gray diferă printr-un singur
bit.
Binar Gray Binar Gray
0000 0000 1000 1100
0001 0001 1001 1101
0010 0011 1010 1111
0011 0010 1011 1110
0100 0110 1100 1010
0101 0111 1101 1011
0110 0101 1110 1001
0111 0100 1111 1011
Obţinerea numărului în cod Gray se face cu operaţia sau-exclusiv între
numărul scris în binar şi numărul binar deplasat (shiftat la dreapta) cu un bit.
De exemplu: codul Gray pentru numărul 0110:
0110 EOR 0011 = 0101
Pseudocodul programului este:
for (b=0,b<N,b++)
{ a = b;
x0 = a;
a = lsr a;
a = x0 eor a;
}
Valoarea binară care trebuie convertită este scrisă din acumulatorul b în
a cu instrucţiunea tfr b,a care utilizează magistrala internă ALU (56 biţi).
Capitolul 3 – Procesoarele DSP Motorola 56300 51
Registrul x0 este folosit ca registru temporar pentru a păstra valoarea
lui a1.
Instrucţiunea lsr a efectuează deplasarea logică la dreapta cu un bit a
registrului a1 (biţii 47-24).
Instrucţiunea eor x0,a efectuează operaţia sau-exclusiv între x0 şi a1 iar
rezultatul este în a1.
Valoarea binară din b este incrementată (x1=1) şi se continuă cu
următoarea valoare binară.
Etichetă Instr. OperanziMagistrala de
date XMagistralade date Y
Cicluriceas
clr b #>1,x1 1
do #N,_endtst 5
tfr b,a 1
lsr a a1,x0 2 i’lock
eor x0,a 1
add x1,b a1,x:output 2 i’lock
_endt
TOTAL 6N+6
Unitatea de Scalare şi Limitare
Datele transferate din acumulator spre magistralele de date XDB sau
YDB trec prin aceste unităţi de scalare şi limitare.
Scalarea se poate face în funcţie de biţii S1 şi S0 din Status Register
(SR) astfel:
• S1=1, S0=0 în sus – shiftează data la stânga cu un bit.
• S1=0, S0=1 în jos – shiftează data la dreapta cu un bit.
• S1=0, S0=0 nu se efectuează scalarea – datele trec nemodificate.
Aplicaţii ale procesoarelor de semnal în comunicaţii52
Scalarea se face automat asupra datelor pe 24 de biţi transferate pe
magistrală, fără a afecta rezultatul din acumulator.
Limitarea apare dacă vrem să transferăm pe magistrala XDB sau YDB
(de 24 de biţi) operanzi din acumulator reprezentaţi pe 56 de biţi (care
folosesc şi cei 8 biţi de extensie). Nu apare limitarea dacă operanzii transferaţi
sunt din A1, A0, B1, B0.
Sunt două unităţi de scalare-limitare ceea ce permite transferul pe XDB
şi YDB prin limitarea a doi operanzi simultan sau limitarea unui operand la
48 de biţi.
Valorile la care sunt limitaţi operanzii ce depăşesc numărul de biţi ai
magistralei de date sunt:
• $7FFFFF – pentru valori pozitive pe 24 de biţi
• $7FFFFF FFFFFF – pentru valori pozitive pe 48 de biţi
• $800000 – pentru valori negative pe 24 de biţi
• $800000 000000 – pentru valori negative pe 48 de biţi
Operaţia de limitare nu afectează conţinutul acumulatorului, spre
deosebire de operaţia de saturare aritmetică.
EXEMPLU:
Fără limitare Cu limitare
A2 A1 A0 A2 A1 A00000 10000…0 00000…0 = 1 0000 10000…0 00000…0 = 1
move a1,x0 move a,x0
X0 10000…0 = –1 X0 01111…1 = 0.999999Eroarea = 2 Eroarea = 0.000001
Capitolul 3 – Procesoarele DSP Motorola 56300 53
Saturarea aritmetică
Acest mod este setat de bitul SM din Status Register (SR). Rezultatul
oricărei operaţii aritmetice este limitat la 48 de biţi în acumulator.
Acest mod foloseşte algoritmilor care nu lucrează cu extensia
acumulatorului (A2 sau B2) obţinându-se un rezultat saturat la 48 de biţi.
Saturarea se efectuează în funcţie de trei biţi: EXT[7], EXT[0] din
partea extinsă a acumulatorului şi bitul cel mai semnificativ al lui A1 sau B1:
MSP[23].
EXT[7] EXT[0] MSP[23] ACUMULATOR
0 0 0 neschimbat
0 0 1 $00 7FFFFF FFFFFF
0 1 0 $00 7FFFFF FFFFFF
0 1 1 $00 7FFFFF FFFFFF
1 0 0 $FF 800000 000000
1 0 1 $FF 800000 000000
1 1 0 $FF 800000 000000
1 1 1 neschimbat
Modurile de rotunjire
Instrucţiunile care efectuează operaţii de rotunjire a rezultatului din
acumulator pe 24 de biţi sunt:
• MACR, MACRI – înmulţire cu acumulare şi rotunjire.
• MPYR, MPYRI – înmulţire cu rotunjire.
• RND – rotunjirea valorii din acumulator.
Unitatea ALU de date efectuează rotunjirea porţiunii superioare MSP a
acumulatorului în funcţie de conţinutul părţii inferioare LSP a acumulatorului.
Aplicaţii ale procesoarelor de semnal în comunicaţii54
Sunt două tipuri de rotunjiri în funcţie de bitul Rounding Mode (RM) din
porţiunea EMR a Status Register:
• rotunjire convergentă (rotunjire la numărul par).
X X X …X X X0100 011XXX…XXXX X..XX A2 A1 A0
CAZUL I: DACĂ A0< $800000 (1/2), ATUNCI ROTUNJEŞTE ÎN JOS (NU SE ADUNĂ NIMIC)
ÎNAINTEA ROTUNJIRII
55 48 47 24 23 0
0
X X X …X X X0100 000…………000X X..XX A2 A1 A0*
DUPĂ ROTUNJIRE
55 48 47 24 23 0
X X X …X X X0100 1110XX….XXXX X..XX A2 A1 A0
CAZUL II: DACĂ A0> $800000 (1/2), ATUNCI ROTUNJEŞTE ÎN SUS (ADUNĂ 1 LA A1)
ÎNANTEA ROTUNJIRII
55 48 47 24 23 0
1
X X X …X X X0101 000…………000X X..XX A2 A1 A0*
DUPĂ ROTUNJIRE
55 48 47 24 23 0
X X X …X X X0100 10000…….000X X..XX A2 A1 A0
CAZUL III: DACĂ A0= $800000 (1/2), ŞI LSB A1=0, ATUNCI ROTUNJEŞTE ÎN JOS (NU ADUNĂ NIMIC)
ÎNAINTEA ROTUNJIRII
55 48 47 24 23 0
0
X X X …X X X0100 000…………000X X..XX A2 A1 A0*
DUPĂ ROTUNJIRE
55 48 47 24 23 0
X X X …X X X0101 10000………000X X..XX A2 A1 A0
CAZUL IV: DACĂ A0= $800000 (1/2), ŞI LSB A1=1, ATUNCI ROTUNJEŞTE ÎN SUS (ADUNĂ 1 LA A1)
ÎNAINTEA ROTUNJIRII
55 48 47 24 23 0
1
X X X …X X X0110 000…………000X X..XX A2 A1 A0*
DUPĂ ROTUNJIRE
55 48 47 24 23 0
Capitolul 3 – Procesoarele DSP Motorola 56300 55
• rotunjire în complement faţă de 2.
X X X …XXX0100 011XXX…XXXX X..XX A2 A1 A0
CAZUL I: DACĂ A0< $800000 (1/2), ATUNCI ROTUNJEŞTE ÎN JOS (NU SE ADUNĂ NIMIC)
ÎNAINTEA ROTUNJIRII
55 48 47 24 23 0
0
X X X …X X X0100 000…………000X X..XX A2 A1 A0*
DUPĂ ROTUNJIRE
55 48 47 24 23 0
X X X …X X X0100 1110XX….XXXX X..XX A2 A1 A0
CAZUL II: DACĂ A0> $800000 (1/2), ATUNCI ROTUNJEŞTE ÎN SUS (ADUNĂ 1 LA A1)
ÎNAINTEA ROTUNJIRII
55 48 47 24 23 0
1
X X X …X X X0101 000…………000X X..XX A2 A1 A0*
DUPĂ ROTUNJIRE
55 48 47 24 23 0
X X X …X X X0100 10000…….000X X..XX A2 A1 A0
CAZUL III: DACĂ A0= $800000 (1/2), ŞI LSB A1=0, ATUNCI ROTUNJEŞTE ÎN SUS (ADUNĂ 1 LA A1)
ÎNAINTEA ROTUNJIRII
55 48 47 24 23 0
1
X X X …X X X0101 000…………000X X..XX A2 A1 A0*
DUPĂ ROTUNJIRE
55 48 47 24 23 0
X X X …X X X0101 10000………000X X..XX A2 A1 A0
CAZUL IV: DACĂ A0= $800000 (1/2), ŞI LSB A1=1, ATUNCI ROTUNJEŞTE ÎN SUS (ADUNĂ 1 LA A1)
ÎNAINTEA ROTUNJIRII
55 48 47 24 23 0
1
X X X …X X X0110 000…………000X X..XX A2 A1 A0*
DUPĂ ROTUNJIRE
55 48 47 24 23 0
Aplicaţii ale procesoarelor de semnal în comunicaţii56
3.4 UNITATEA DE GENERARE A ADRESELOR (AGU)
Unitatea de generare a adreselor este prezentată în Figura 3.3-1.
N0 M0
N1 M1N2 M2N3 M3
R0 R4
R1 R5R2 R6R3 R7
M4 N4
M5 N5M6 N6M7 N7
EI
Multiplexor Triplu
ALUAdrese
ALUAdrese
Magistrala de date globale
Magistrala de date de program
XAB YAB PAB
ALU adrese primare ALU adrese secundare
Figura 3.3-1 Unitatea de generare a adreselor DSP 56300
AGU calculează adresa efectivă pentru adresarea operanzilor în
memorie.
Sunt realizate patru tipuri de calcule aritmetice:
- liniar;
- modulo;
- modulo cu revenire la adresa de bază;
- bit-reversed.
AGU este compusă din două părţi, fiecare având o unitate aritmetico-
logică de adrese şi patru grupe de registre.
Capitolul 3 – Procesoarele DSP Motorola 56300 57
Fiecare grup conţine trei tipuri de registre:
• Rn - registru de adresă;
• Nn - registru ofset;
• Mn - registru de modificare.
Registre R, N şi M sunt tratate împreună (de exemplu numai N2 şi M2
sunt folosiţi pentru actualizarea adresei din R2). Cele două ALU pot genera
două adrese pe 24 de biţi într-un singur ciclu instrucţiune pentru adresarea pe
magistralele XAB, YAB, sau o adresă pentru PAB. Spaţiul de memorie
adresabil este de 16M cuvinte, pentru fiecare zonă de memorie (X, Y, P).
Fiecare unitate ALU de adrese conţine:
a) un sumator de ofset pe 24 de biţi care adună la registrul adresă R:
• plus unu;
• minus unu;
• conţinutul registrului ofset N corespunzător;
• minus ofsetul N.
b) un sumator modulo care adună rezultatul primului sumator la valoarea
modulo (M sau minus M) conţinută în registrul modificator M.
c) un sumator cu transport invers care adună la registrul R (cu transport de
la MSB la LSB):
• plus unu;
• minus unu;
• conţinutul registrului ofset N corespunzător;
• minus ofsetul N.
Printr-un test logic se selectează ieşirea sumatorului ce va fi folosită
drept adresă efectivă şi actualizarea registrului R.
Aplicaţii ale procesoarelor de semnal în comunicaţii58
Modelul de Programare AGU
Pentru programator, AGU reprezintă trei grupuri de 8 registre care pot
fi folosiţi atât ca registre temporare de date cât şi ca pointeri pentru adresarea
indirectă (Figura 3.3-2).
Fiecare registru de adresare R are asociat un registru ofset N şi un
registru modificator M.
Registrele R sunt utilizate la calculul adresei efective a operanzilor în
memorie.
Registre N sunt folosite pentru furnizarea unui ofset pentru actualizarea
adresei.
Registre M selectează tipul de actualizare aritmetică a adresei.
R7R6R5R4R3R2R1R0EP
N7N6N5N4N3N2N1N0
M7M6M5M4M3M2M1M0
23 0 23 0 23 0
Registre adresă Registre ofset Registre modificator
Setul secundar
Setul primar
Figura 3.3-2 Modelul de Programare AGU
La transferul paralel al datelor din memoria X şi Y registre de adresă
trebuie folosite separat:
- pentru transferul din memoria X - registrele R0 - R3;
- pentru transferul din memoria Y - registrele R4 - R7.
Capitolul 3 – Procesoarele DSP Motorola 56300 59
Moduri de Adresare
Se specifică dacă operanzii sunt în registre şi / sau în locaţii din
memorie şi oferă adresa acestora.
Familia DSP56300 oferă patru moduri principale de adresare:
- adresare directă cu registru;
- adresare indirectă cu registru;
- adresare relativă la PC;
- alte adresări speciale (adresare imediată, adresare absolută, etc.).
Adresare directă cu registru
Operandul este în unul din registre
- de date: A2, A1, A0, B2, B1, B0, X1, X0, Y1, Y0;
- de adrese: R0-R7, N0-N7, M0-M7;
- de control: OMR, SR, PC, VBA, LA, LC, SP
EXEMPLU:
Adresare cu registru de date
move x0,a1 X X X X X X 8 7 6 5 4 3
X X X X X X X X X X X XX X
X1 X0
A2 A1 A0
ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
X X X X X X 8 7 6 5 4 3
8 7 6 5 4 3 X X X X X XX X
X1 X0
A2 A1 A0
EXEMPLU:
Adresare cu registru de adrese
move a,n7
X X X X X X
1 2 3 4 5 6 7 8 9 a b c0 0
N7
A2 A1 A0
ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
1 2 3 4 5 6
1 2 3 4 5 6 7 8 9 a b c0 0
N7
A2 A1 A0
Aplicaţii ale procesoarelor de semnal în comunicaţii60
Adresare indirectă cu registru
Un registru adresă Rn este folosit pentru a indica adresa operandului în
memorie. Pot fi efectuate operaţii aritmetice asupra adresei înainte sau după
execuţia instrucţiunii. Registrul ofset Nn asociat registrului adresă Rn indică
valoarea care va fi adunată la Rn. Registrul modificator Mn indică tipul
operaţiei aritmetice care urmează să fie efectuată când este actualizat Rn.
Pentru adresare liniară M=$FFFFFF.
EXEMPLU:
Fără actualizare (Rn)
move a1,x:(r0)
1 2 3 4 5 6 X X X X X XX X A2 A1 A0
ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
1 2 3 4 5 6 X X X X X XX X A2 A1 A0
::
X X X X X X::
0 0 1 0 0 0
X X X X X X
F F F F F F
Memoria X:
23 0
$ 1000
R0
N0
M0
::
1 2 3 4 5 6::
0 0 1 0 0 0
X X X X X X
F F F F F F
Memoria X:
23 0
$ 1000
R0
N0
M0
EXEMPLU:
Postincrementare cu o unitate (Rn)+
move b0,y:(r1)+
X X X X X X 1 2 3 4 5 6X X B2 B1 B0
ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
X X X X X X 1 2 3 4 5 6X X B2 B1 B0
::
X X X X X X:
0 0 2 0 0 0
X X X X X X
F F F F F F
Memoria Y:
23 0
$ 2000
R1
N1
M1
:X X X XX X
1 2 3 4 5 6:
0 0 2 0 0 1
X X X X X X
F F F F F F
Memoria Y:
23 0
$ 2000
R1
N1
M1
$ 2001
Capitolul 3 – Procesoarele DSP Motorola 56300 61
EXEMPLU:
Postdecrementare cu o unitate (Rn)–
move y0,y:(r2)–
X X X X X X F E D C B A Y1 Y0
ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
X X X X X X F E D C B A Y1 Y0
:X X X X X X
::
0 0 3 0 0 0
X X X X X X
F F F F F F
Memoria Y:
23 0
$ 3000
R2
N2
M2
:F E D C B AX X X X X X
:
0 0 2 F F F
X X X X X X
F F F F F F
Memoria Y:
23 0
$ 2FFF
R2
N1
M1
$ 3000
EXEMPLU:
Postincrementare cu ofset (Rn)+Nn
move x1,x:(r4)+n4
9 8 7 6 5 4 X X X X X X X1 X0
ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
9 8 7 6 5 4 X X X X X X X1 X0
::::
0 0 5 0 0 0
0 0 0 0 0 4
F F F F F F
Memoria X:
23 0
$ 5000
R4
N4
M4
X X X X X::
0 0 5 0 0 4
0 0 0 0 0 4
F F F F F F
Memoria X:
23 0
$ 5000
R4
N4
M4
$ 5004
X X X X X 9 8 7 6 5 4
Aplicaţii ale procesoarelor de semnal în comunicaţii62
EXEMPLU:
Postdecrementare cu ofset (Rn)–Nn
move x:(r5)–n5,a0
ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
4 5 6 7 8 9:::
0 0 6 0 0 0
0 0 0 0 0 5
F F F F F F
Memoria X:
23 0$ 6000
R5
N5
M5
4 5 6 7 8 9::
0 0 5 F F B
0 0 0 0 0 5
F F F F F F
Memoria X:
23 0
$ 5FFB
R5
N5
M5
$ 6000
: :
X X X X X X X X X X X XX X A2 A1 A0
0 0 0 0 0 0 4 5 6 7 8 90 0 A2 A1 A0
: X X X X X
EXEMPLU:
Predecrementare cu o unitate –(Rn)
move x:–(r3),b
ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
:X X X X X X
1 2 1 2 1 2:
0 0 4 0 0 0
X X X X X X
F F F F F F
Memoria X:
23 0
$ 4000
R3
N3
M3
:X X X X X X
1 2 1 2 1 2:
0 0 3 F F F
X X X X X X
F F F F F F
Memoria X:
23 0
$ 3FFF
R3
N3
M3
$ 4000
X X X X X X X X X X X XX X B2 B1 B0
1 2 1 2 1 2 0 0 0 0 0 00 0 B2 B1 B0
Capitolul 3 – Procesoarele DSP Motorola 56300 63
EXEMPLU:
Deplasament scurt (Rn+#nn)
move a,x:(r0+#<$07)
ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
X X X X X X:::
0 0 2 0 0 0
X X X X X X
F F F F F F
Memoria X:
23 0$ 2000
R0
N0
M0
1 2 3 4 5 6:::
0 0 2 0 0 0
X X X X X X
F F F F F F
Memoria X:
23 0
$ 2000
R0
N0
M0
$ 2007
: :
1 2 3 4 5 6 0 0 0 0 0 00 0 A2 A1 A0
1 2 3 4 5 6 0 0 0 0 0 00 0 A2 A1 A0
X X X X X X X X X X X$ 2000
EXEMPLU:
Deplasament lung (Rn+#nnnnnn)
move y:(r1+#>$123456),x0
ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
a b c d e f:::
0 0 0 0 0 0
X X X X X X
F F F F F F
Memoria Y:
23 0$ 123456
R1
N1
M1
a b c d e f:::
0 0 0 0 0 0
X X X X X X
F F F F F F
Memoria Y:
23 0
$ 0000000
R1
N1
M1
$ 123456
: :
X X X X X XX0
a b c d e fX0
X X X X X X X X X X X$ 000000
Aplicaţii ale procesoarelor de semnal în comunicaţii64
EXEMPLU:
Indexare cu ofset (Rn+Nn)
move y0,x:(r6+n6)
ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
:X X X X X X
::
0 0 7 0 0 0
0 0 0 0 0 3
F F F F F F
Memoria Y:
23 0
$ 7003
R6
N6
M6
:A B C D E F
:
0 0 7 0 0 0
0 0 0 0 0 3
F F F F F F
Memoria Y:
23 0
$ 7000
R6
N6
M6
$ 7003
X X X X X X X X X X X X: :
X X X X X X A B C D E F Y1 Y0
X X X X X X A B C D E F X1 X0
$ 7000
Moduri speciale de adresare
Acestea nu folosesc un registru pentru a specifica adresa operandului.
Operandul sau adresa acestuia sunt conţinute în codul instrucţiunii.
Adresare imediată.
Acest mod de adresare indică un operand pe 24 biţi în cadrul
instrucţiunii.
EXEMPLU:
Date în acumulator pe 24 biţi
move #$123456,a0ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
X X X X X X X X X X X XX X A2 A1 A0
X X X X X X 1 2 3 4 5 6X X A2 A1 A0
Capitolul 3 – Procesoarele DSP Motorola 56300 65
EXEMPLU:
Date pozitive în acumulator pe 56 biţi
move #$654321,aÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
X X X X X X X X X X X XX X A2 A1 A0
6 5 4 3 2 1 0 0 0 0 0 00 0 A2 A1 A0
EXEMPLU:
Date negative în acumulator pe 56 biţi
move #$876543,bÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
X X X X X X X X X X X XX X B2 B1 B0
8 7 6 5 4 3 0 0 0 0 0 0F F B2 B1 B0
Adresare imediată cu date scurte.
Operandul este pe 8 sau 12 biţi.
EXEMPLU:
Date scurte în registru pe 24 biţi
move #$FE,y1ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
X X X X X X X X X X X X Y1 Y0
F E 0 0 0 0 X X X X X X Y1 Y0
EXEMPLU:
Date scurte în acumulator 24 biţi
move #$FE,a1ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
X X X X X X X X X X X XX X A2 A1 A0
0 0 0 0 F E X X X X X XX X A2 A1 A0
EXEMPLU:
Date scurte pozitive în acumulator 56 biţi
move #$34,aÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
X X X X X X X X X X X XX X A2 A1 A0
3 4 0 0 0 0 0 0 0 0 0 00 0 A2 A1 A0
Aplicaţii ale procesoarelor de semnal în comunicaţii66
EXEMPLU:
Date scurte negative în acumulator 56 biţi
move #$87,bÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
X X X X X X X X X X X XX X B2 B1 B0
8 7 0 0 0 0 0 0 0 0 0 0F F B2 B1 B0
Dacă destinaţia este A2, A1, A0, B2, B1, B0, R0-R7, N0-N7 atunci
operandul imediat pe 8 biţi este tratat ca un întreg fără semn.
Dacă destinaţia este X1, X0, Y1, Y0, A, B atunci operandul imediat pe
8 biţi este tratat ca un număr fracţionar cu semn.
Adresare absolută.
Adresa operandului este conţinută în codul instrucţiunii.
EXEMPLU:
Adresare absolută lungă (adresa pe 24 biţi)
move y:$1000,b0
X X X X X X X X X X X XX X B2 B1 B0
ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
X X X X X X 7 6 5 4 3 2X X B2 B1 B0
:7 6 5 4 3 2
:
Memoria Y:
23 0
$ 1000:
7 6 5 4 3 2:
Memoria Y:
23 0
$ 1000
EXEMPLU:
Adresare absolută scurtă (adresa pe 6 biţi)
move a1,x:$21
7 6 5 4 3 2 X X X X X XX X A2 A1 A0
ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
7 6 5 4 3 2 X X X X X XX X A2 A1 A0
::
X X X X X X::
Memoria X:
23 0
$ 000021
::
7 6 5 4 3 2::
Memoria X:
23 0$ 00003F
$ 000000
Domeniupentru
adresareabsolutăscurtă
$ 000021
$ 00003F
$ 000000
Capitolul 3 – Procesoarele DSP Motorola 56300 67
Adresarea absolută scurtă foloseşte o adresă de 6 biţi în codul
instrucţiunii completată cu zerouri.
Este posibilă adresarea primelor 64 cuvinte din memorie (vectori de
întrerupere etc.)
Adresare I/O scurtă.
Acest mod foloseşte o adresă de 6 biţi în codul instrucţiunii completată
cu unu. Sunt adresate ultimele 64 cuvinte din memorie.
EXEMPLU:
movep a1,x:$fffffd
A B C D E F X X X X X XX X A2 A1 A0
ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
A B C D E F X X X X X XX X A2 A1 A0
::
X X X X X X::
Memoria X:
23 0
$ FFFFFD
::
A B C D E F::
Memoria X:
23 0$ FFFFFF
$ FFFFC0
Spaţiul pentruadresareaabsolută
scurtă I/O
$ FFFFFD
$ FFFFFF
$ FFFFC0
Adresare scurtă pentru salt.
Acest mod foloseşte o adresă de 12 biţi în codul instrucţiunii pentru
saltul în program. PC este modificat cu această adresă completata cu zero.
Sunt adresate ultimele 4096 cuvinte.
Aplicaţii ale procesoarelor de semnal în comunicaţii68
EXEMPLU:
jmp <$123
ÎNAINTEA EXECUŢIEI DUPĂ EXECUŢIE
::
jmp $0123::
Memoria P:
23 0
$ 000000
Memoria P:
23 0
$ 000FFF
Spaţiu deadresă pentru
salt scurt
:::::::::::::
::::::::::
Instr. următ.Instr. următ.
::::::
$001FF9
$ 000000
$ 000FFF
PC
$000123PC
Adresare relativă la PC (Program Counter)
Adresa operandului este obţinută adunând un deplasament la adresa
instrucţiunii curente aflată în PC. Deplasamentul poate fi:
• scurt (9 biţi), conţinut în codul instrucţiunii.
• lung (24 biţi), conţinut în cuvântul extensie din codul instrucţiunii.
• conţinutul unui registru R.
Moduri de Modificare a Adresei
Registrele de modificare Mn definesc tipul de operaţie aritmetică a
adresării care urmează a fi efectuată şi permite utilizatorului să creeze diferite
structuri de date în memorie cum ar fi:
• liste (FIFO).
Capitolul 3 – Procesoarele DSP Motorola 56300 69
• linii de întârziere.
• buffere circulare.
• stive (LIFO).
• cadre în ordinea inversă a biţilor pentru FFT.
Tabelul de mai jos arată modurile de calcul a adresei în funcţie de valoarea
scrisă în Mn.
Registrul modificator Mn Modul de calcul al adresei
$XX0000 În ordinea inversată a biţilor (Bit-Reverse)
$XX0001 Modulo 2
$XX0002 Modulo 3
: :
$XX7FFE Modulo 32767 (215–1)
$XX7FFF Modulo 32768 (215)
$XX8001 Modulo 2 de la adresa de bază
$XX8003 Modulo 4 de la adresa de bază
$XX8007 Modulo 8 de la adresa de bază
: :
$XX9FFF Modulo 213 de la adresa de bază
$XXBFFF Modulo 214 de la adresa de bază
$XXFFFF Liniar (Modulo 224)
Aplicaţii ale procesoarelor de semnal în comunicaţii70
Modificarea liniară
Mn=$FFFFFF
Calculul adresei se face liniar pe 24 de biţi
Se poate folosi incrementarea, decrementarea sau ofsetul din registrul
Nn pentru calculul adresei.
EXEMPLU:
move x0, y:(r0)+n0
Registrulincrement
No$0000C3(195)
$0000B4(180)
Adresa de start $0000A5(165)
$0000D2(210
Memoria Y
Adresa de start:
$0000A5(165)R0
Increment:
$00000F(15)N0
Adresare liniară:
$FFFFFFM0
Modificarea modulo
Calculul adresei se face modulo M, forţând adresa să rămână într-un
interval de lungime M.
Capitolul 3 – Procesoarele DSP Motorola 56300 71
EXEMPLU:
move x0, x:(r0)+n0
Incrementul înregistrul N0
210 ($0000D2)
195 ($0000C3)
180 ($0000B4)
Adresa de start 165 ($0000A5)
135 ($000087)
Modululîn registrul
M0
Adresa dinregistrul
R0
Mj ≥2Lower Bound 128 ($000080)
XX…XX00…00 →← j
Limita maximă 217 ($0000D9)XX…XX00…00 + M -1
→← j
Adresa de start
R0 165 ($0000A5)
Increment
N0 15 ($00000F)
Modulo M=90
M0 89 ($000089)
Reguli pentru obţinerea unui cadru adresat circular:
• Valoarea scrisă în registrul modificator: 1M= −Mn
• Adresa de bază trebuie aleasă o putere a lui 2 care să îndeplinească
condiţia: 2 j M≥ . Astfel adresa de bază are j zerouri LSB.
• Adresa de sfârşit este: 2 1j M+ −
• Adresa iniţială din R nu trebuie neapărat să fie adresa de bază a cadrului,
putând fi oriunde în cadrul domeniului de adrese.
• Adresa de bază a cadrului sau cea de sfârşit nu sunt stocate. Numai
lungimea este scrisă în Mn. Adresa de bază este determinată de adresa
scrisă în Rn (anulând ultimii j biţi).
Aplicaţii ale procesoarelor de semnal în comunicaţii72
Acest tip de modificare a adresei este utilă în crearea de:
• liste circulare.
• linii de întârziere.
• cadre de eşantioane pe care se efectuează decimarea, interpolarea şi
generare de sinusoide.
Dacă adresarea circulară este folosită cu ofset (registrul N), acesta nu
trebuie să depăşească valoarea M.
O excepţie este cazul în care 2 jN p= ⋅ este un multiplu al lungimii
cadrului, adresa rezultată va avea aceeaşi poziţie relativă în bufferul de ordin
p.
Principalele aplicaţii sunt filtrarea IIR prin structuri paralele.
Modificarea modulo cu revenire la adresa de bază
Este cazul în care bitul 15 din registrul M este 1.
Depăşirea adresei maxime a cadrului va forţa adresa să ajungă la adresa
de bază, iar decrementarea sub adresa minime va duce adresa la adresa
maximă a cadrului.
Se foloseşte doar în cazul adresării cu ofset.
Modificarea în ordinea inversă a biţilor
Mn=$000000
Modificarea adresei este realizată hardware prin incrementarea şi
propagarea transportului în sens invers, de la MSB la LSB ai adresei.
Este echivalent cu inversarea ordinii biţilor registrelor Rn şi Nn,
adunarea ofsetului la adresă şi, reinversând ordinea biţilor, obţinerea
rezultatului.
Capitolul 3 – Procesoarele DSP Motorola 56300 73
Acest mod de adresare este util în calculul FFT la adresarea factorilor
de rotaţie dintr-un cadru de lungime 2kN = sau a ordonării datelor (decimare
în timp etc.).
Pentru un cadru de lungime 2kN = rezultă că ultimii k biţi ai adresei
vor trebui inversaţi.
Pentru aceasta registrul Nn trebuie să aibă valoarea 12k−=Nn .
Adresa de bază a secvenţei de intrare trebuie să fie putere întreagă a lui
2 îndeplinind condiţia 2m N≥ .
EXEMPLU:
M0 = $000000 R0 = $000008 N0 = 4 = 23–1
O secvenţă de intrare de 8 elemente are adresa de bază $8 = 1000.
Ultimii trei LSB ai adresei vor fi: 000,001,002,...,111.
Adresasecvenţeiiniţiale
Secvenţainiţială
Modificareaadresei cu
transport invers
Secvenţareordonată
$8 = 1000 #0.0 R0 = 1000 +N0 = 0100
$8 #0.0
$9 = 1001 #0.1 R0 = 1100 + 0100
$C #0.4
$A = 1010 #0.2 R0 = 1010 + 0100
$A #0.2
$B = 1011 #0.3 R0 = 1110 + 0100
$E #0.6
$C = 1100 #0.4 R0 = 1001 + 0100
$9 #0.1
$D = 1101 #0.5 R0 = 1101 + 0100
$D #0.5
$E = 1110 #0.6 R0 = 1011 + 0100
$B #0.3
$F = 1111 #0.7 R0 = 1111 + 0100
$F #0.7
Aplicaţii ale procesoarelor de semnal în comunicaţii74
EXEMPLU:
Adresade start
Indexulîn cadru
Increment
Bit Reverse
R0 3072 ($000C00) ( 0)
N0 512 ($000C00)
M0 0 ($000000)
move x:(r0)+n0, x0
R0 3584 ($000E00) (512)
move x:(r0)+n0, x0
R0 3328 ($000D00) (256)
move x:(r0)+n0, x0
R0 3840 ($000F00) (768)
Nk ≥2Adresa minimă 3072 ($000C00)
XX…XX00…00 →← k
Limita maximă 4095 ($000FFF)XX…XX11…11 →←k
CadruFFT delungimeN=1024
Memoria X
Instrucţiuni de transfer paralel al datelor
Este posibil transferul paralel al datelor pe magistralele de date X şi Y.
Aceasta permite operaţiilor ALU să fie efectuate în paralel cu transferul
datelor într-un singur ciclu de ceas.
Sunt permise transferuri paralele: de la registru la registru, de la
registru la memorie şi de la memorie la registru.
Capitolul 3 – Procesoarele DSP Motorola 56300 75
Pot fi specificate două adrese efective independente în transferul paralel
al datelor dacă una din adrese foloseşte bancul inferior al registrelor de adrese
(r0-r3) iar cealaltă adresă, bancul superior de registre (r4-r7).
EXEMPLU:
Transferuri în paralel
instrucţiune operanzisursa 1 →
destinaţia 1
sursa 2 →
destinaţia 2
add x0,a a,x:(r0)+n0 y:(r4)– ,y0
Pot fi:
1. Operaţii ALU
2. Operaţii logice
3. Rotunjiri convergente
Sunt suportate:
1. Coduri condiţionale
Pot fi:
1. Până la două transferuri de date
2. Două moduri de adresare diferite
3. Acces la memoria X, Y, L, XY.
Sunt suportate:
1. Scalarea
2. Limitarea
3. Extensie de semn sau completarea cu
zeroruri a acumulatorului
4. Două surse identice
5. NU E PERMISĂ aceeaşi destinaţie
Aplicaţii ale procesoarelor de semnal în comunicaţii76
EXEMPLU:
Transferuri în paralel cu instrucţiuni aritmetice
Instrucţiunesursa 1 →
destinaţia 1
sursa 2 →
destinaţia 2
Transfer cu date imediate add a,b #$44,a1Transfer între registre add x0,a a1,y0Actualizare registru adresă add y1,a (r0)+n0Transfer cu memoria X sau Y add x1,b b,x:$100Transfer cu registre şi cu
memoria X sau Yadd y0,a a,x1 y:(r2)–,y0
Transfer cu memoria L add x,a a10,L:$300Transfer cu memoria X şi Y add y,b b,x:(r3)+n3 y:(r7)+n7,y1
mac x0,y0,a x:(r0)+,x0 y:(r4)–,y0Instrucţiuni de multiplicare şi
adunare macr –y0,y0,b x1,x:(r1)+ b,y:(r5)–
Capitolul 3 – Procesoarele DSP Motorola 56300 77
3.5 UNITATEA DE CONTROL AL PROGRAMULUI (PCU)
PCU efectuează încărcarea şi decodificarea instrucţiunilor, controlul
ciclurilor DO şi REP şi procesarea situaţiilor de excepţie într-un cadru de
execuţie pe şapte niveluri pipeline.
Arhitectura PCU este formată din trei blocuri:
GDB PDB PAB GDB
Cereri de ÎntrerupereRESET
CONTROLER DEÎNTRERUPERE APROGRAMULUI
CONTROLER DEDECODIFICARE APROGRAMULUI
GENERATORDE ADRESE
DE PROGRAM
Controler de întrerupere a programului (Program Interrupt Controller)
- arbitrează toate cererile de întrerupere (interne sau externe) şi
generează adresa vectorului de întrerupere corespunzătoare.
Controler de decodificare a Programului (Program Decode Controller)
- decodifică cei 24 de biţi de instrucţiune încărcaţi într-un latch şi
generează toate semnalele de control pipeline.
Generator de adrese de program (Program Address Generator)
- conţine tot hardware-ul necesar pentru generarea adreselor de program,
stiva sistemului şi controlul ciclurilor.
Aplicaţii ale procesoarelor de semnal în comunicaţii78
Facilităţile oferite de PCU sunt:
• Moduri de adresare optimizate pentru aplicaţiile DSP;
• Controler pentru cache de instrucţiuni;
• Extensia stivei sistemului;
• Cicluri DO suprapuse;
• Revenire rapidă din întreruperi.
Operaţiile Pipeline
Arhitectura organizată pe şapte niveluri de pipeline permite execuţia
majorităţii instrucţiunilor la o rată de o instrucţiune pe ciclu de ceas.
PreFetch
Nivelul pipeline Descrierea operaţiilor
PreFetch I • Generarea adresei pentru instrucţiune
• Incrementarea PC
PreFetch II • Instrucţiunea este citită din memorie
Decodificare
Nivelul pipeline Descrierea operaţiilor
Decodificare • Decodificarea instrucţiunii
Generarea Adreselor
Nivelul pipeline Descrierea operaţiilor
Address Gen I • Generarea adresei pentru operaţii de transfer a
datelor
Address Gen II • Actualizarea pointerului de adresă
Capitolul 3 – Procesoarele DSP Motorola 56300 79
Execuţie
Nivelul pipeline Descrierea operaţiilor
Execuţie I • Citirea operanzilor sursă pentru înmulţire sau
adunare
• Citirea registrelor sursă pentru scrierea în memorie
• Înmulţirea
• Scrierea registrelor destinaţie pentru citirea din
memorie
Execuţie II • Citirea operanzilor sursă pentru adunare dacă aceştia
au fost scrişi într-o operaţie ALU precedentă
• Adunarea
• Scrierea rezultatului adunării în registrul destinaţie
• Scrierea rezultatului înmulţirii în registrul destinaţie
Aplicaţii ale procesoarelor de semnal în comunicaţii80
Unele instrucţiuni necesită un timp suplimentar de execuţie şi anume:
• Toate instrucţiunile care ocupă două cuvinte de memorie.
• Instrucţiunile care folosesc un mod de adresare care necesită mai mult de
un ciclu pentru calculul adresei.
• Instrucţiunile care provoacă o schimbare în cursul programului.
Operaţiile pipeline ale PCU rămân ascunse utilizatorului, uşurând
programarea.
Hardware-ul prezent în fiecare unitate de execuţie a procesorului
detectează orice conflict pipeline şi opreşte desfăşurarea pipeline până când
rezultatele instrucţiunii precedente sunt disponibile pentru instrucţiunea
următoare.
Programatorul poate reduce întârzierile în pipeline şi îmbunătăţi viteza
de execuţie prin modificări adecvate ale programului.
Întârzieri datorate operaţiilor aritmetice
Apar când se încearcă citirea din acumulator dacă acelaşi acumulator
este destinaţia instrucţiunii aritmetice anterioare. Se poate introduce o altă
instrucţiune între cele două.
mac x0,y0,amove a1,x:(r0)+
mac x0,y0,a
mac x1,y1,bmove a1,x:(r0)+
Întârzieri datorate transferurilor de date
Apar când registrul sursă al unei instrucţiuni move este registrul
destinaţie al instrucţiunii move anterioare. Se poate introduce o altă
instrucţiune între cele două.
Capitolul 3 – Procesoarele DSP Motorola 56300 81
move y(r1)+,a1move a,x:(r0)+
move y(r1)+,a1
mac x1,y1,bmove a,x:(r0)+
Întârzieri datorate generării adreselor
Apar când o instrucţiune move foloseşte pentru generarea sau
calcularea adresei drept pointer unul din registrele de adresă R0-R7 şi una
din ultimele trei instrucţiuni modifică tripletul de registre R, N, M respectiv.
Se introduc până la trei instrucţiuni nop.
move $123456,r1move a,x:(r1)+ ; se introduc 3 instrucţiuni nop
Modelul de Programare PCU:
23 0 48 SSH 2423 SSL 0 23 0 0
CONTOR PROGRAM (PC) CONTOR CICLURI (LC)
23 16 15 8 7 0 23 16 15 8 7 0
REGISTRU MOD OPERARE (OMR) REGISTRU DE STARE (SR)
23 0 STIVA SISTEMULUI 4 0
REGISTRU ADRESĂ CICLU (LA) CONTOR STIVĂ (SC)
23 87 0 23 6 5 4 3 0 23 0
ADRESA DE BAZĂ A VECTORULUI INDICATOR STIVĂ (SP) DIMENSIUNEA STIVEI (SZ)DE ÎNTRERUPERI (VBA)
* BIŢII SUNT 0
SCS EOM COM
*
EMR MR CCR
Aplicaţii ale procesoarelor de semnal în comunicaţii82
Contor program (Program Counter)
Registru pe 24 de biţi care păstrează adresa din memoria de program a
instrucţiunii curente.
Este salvat în stivă
• la începerea unui ciclu hardware;
• la apelul unei subrutine;
• în cazul unei întreruperi lungi.
Contor ciclu (Loop Counter)
Contor pe 24 de biţi care specifică de câte ori este repetat un ciclu (DO
sau REP). Este stocat în stivă de instrucţiunea DO şi scos din stivă la sfârşitul
ciclului sau la ENDDO.
Registrul adresei de sfârşit de ciclu (Loop Address)
Registru pe 24 de biţi care indică adresa ultimei instrucţiuni din ciclu.
Este stocat în stivă de instrucţiunea DO şi scos din stivă la sfârşitul ciclului
sau la ENDDO.
Adresa de bază a vectorului de întreruperi (Vector Base Address)
Registru pe 24 de biţi (cu ultimii 8 LSB zero) care păstrează adresa de
bază a vectorului de întreruperi.
Stiva sistemului (System Stack)
Zonă de memorie de 16cuvinte pe 48 biţi împărţită în două zone (pe 24
biţi fiecare):
• System Stack High (SSH).
• System Stack Low (SSL).
Capitolul 3 – Procesoarele DSP Motorola 56300 83
Funcţiile stivei:
• păstrează adresa de revenire (PC) şi registrul de stare (SR) la apelul
unei subrutine.
• păstrează LA, LC, PC şi SR la efectuarea ciclurilor.
• păstrează variabile la apeluri de subrutine.
Stiva poate fi folosită pentru implementarea de cicluri suprapuse
deoarece la iniţierea unui ciclu hardware sunt stocate automat în stivă LA,
LC, PC şi SR anterioare, iar la terminarea ciclului acestea sunt restabilite
(permiţând continuarea unui eventual ciclu anterior).
endlp – 1
SYSTEM STACK (Registru adresa de salt)
(Contor ciclu)
(Registru de stare)
(Contor Program)
Comparator 0
LF=1 (Fanion ciclu) DO #count,endlp
PC
Ciclu
(Ultima LAInstructiune)
endlp instr
UNITATEA DE CONTROL AL PROGRAMULUI
COMPARATOR STIVA DE SISTEM 0
SP =
-1
(Contor ciclu) 15 ieşire la LC=1
LA
PC
LCSR
LA LC PC SR
instrinstrinstr:::::instrinstr
Aplicaţii ale procesoarelor de semnal în comunicaţii84
Dacă nu se realizează extensia stivei, se pot implementa 7 cicluri DO
suprapuse, 15 apeluri de subrutine sau 15 deserviri de întreruperi lungi, sau
combinaţii între ele.
La apelul unei subrutine (JSR) adresa de revenire (PC) este scrisă în
SSH iar registrul de stare (SR) este scris în SSL.
La revenirea din subrutină (RTS) numai PC este scris din stivă, SR
rămânând nemodificat.
La revenirea din subrutina de întrerupere (RTI), atât PC cât şi SR
sunt rescrise din stivă.
Extensia stivei poate fi activată de Stack Extension Enable (SEN),
bitul 20 din OMR.
Stack Extension Pointer (EP) aflat în AGU păstrează adresa din
memoria de date a extensiei de stivă.
Stack Size Register (SZ) determină numărul locaţiilor de memorie
alocate pentru extensia stivei în memoria de date.
Stack Counter Register (SC)
Registru pe 5 biţi folosit pentru a monitoriza câte intrări în stivă sunt
folosite.
Registrul indicator de stivă (Stack Pointer Register)
Registru care indică vârful stivei şi eventualele condiţii de eroare.
Ultimii 4 biţi sunt incrementaţi/decrementaţi la fiecare scriere/citire din
stivă.
Biţii 4 şi 5 indică posibile erori de tipul stivă goală sau plină precum şi
depăşirea limitelor stivei.
Capitolul 3 – Procesoarele DSP Motorola 56300 85
23 6 5 4 3 0
Indicator stivă Fanion Eroare-Stivă/P4 Fanion stivă goală/P5 P[23:6]
P[23:6] UF/P5 SE/P4 P[3:0]
Registrul de stare (Status Register)
Registru de 24 de biţi alcătuit din 3 părţi:
• Extended Mode Register (EMR)
• Mode Register (MR)
• Condition Code Register (CCR)
CP1 – Nivel Prioritate Bit 1 LF – Fanion buclă DO S – Bit scalare
CP0 – Nivel Prioritate Bit 0 DM – Înmulţire precizie dublă L – Limitare
RM – Mod de rotunjire SC – Copatibilitate 16-Biţi E – Extensie
SM – Saturare aritmetică S1 – Mod de scalare Bit 1 U – Nenormalizat
CE – Activare cache instr. S0 – Mod de scalare Bit 0 N – Negativ
SA – Aritmetică pe 16 biţi I1 – Mascare întreruperi Bit 1 Z – Zero
FV – Fanion DO-Forever I0 – Mascare întreruperi Bit 0 V – Depăşire
C – Depăşire
Registrul de condiţii (Condition Code Register)
Registru de control care defineşte rezultatele calculelor aritmetice
anterioare.
Biţii CCR sunt afectaţi de operaţii ALU, transferuri paralele sau
instrucţiuni care fac referire directă la acest registru.
Aplicaţii ale procesoarelor de semnal în comunicaţii86
Mode Register şi Extended Mode Register
Sunt registre de control care definesc starea curentă a sistemului.
Biţii MR şi EMR sunt afectaţi de resetarea procesorului, întreruperi,
DO, ENDDO, RTI şi alte instrucţiuni care modifică biţii din acest registru.
Instrucţiuni de ciclare
Repetarea unei instrucţiuni de n ori
REP n
n: valoarea aflată la o adresă efectivă sau absolută;
orice registru intern;
valoare imediată pe 8 biţi: #xxx;
Valoarea n este scrisă în LC şi decrementată la fiecare repetare a
instrucţiunii până când LC = 1.
Pentru instrucţiunea repetată se face fetch o singură dată, aceasta
rămânând în registrul de instrucţiune până la terminarea ciclului. De aceea
instrucţiunea REP este neîntreruptibilă.
Dacă LC este 0 instrucţiunea este repetată de 65536 ori.
Repetarea de n ori a instrucţiunilor aflate până la eticheta label
DO n,label
n: valoarea aflată la o adresă efectivă sau absolută;
orice registru intern;
valoare imediată pe 8 biţi: #xxx;
label: adresă absolută.
Capitolul 3 – Procesoarele DSP Motorola 56300 87
Pentru fiecare instrucţiune din ciclu face fetch de fiecare dată. De
aceea instrucţiunea DO este întreruptibilă.
Ciclurile DO pot fi suprapuse (efectuarea unui ciclu în interiorul altuia).
Adresa sfârşitului ciclului este calculată (şi scrisă în LA) prin evaluarea
adresei etichetei label şi scăzând unu (pentru cazul în care ultima instrucţiune
ocupă două cuvinte de memorie). De aceea eticheta sfârşitului de ciclu trebuie
să reprezinte adresa instrucţiunii de după ciclu.
Repetarea de n ori a instrucţiunilor aflate până la adresa PC+val
DOR n,val
n: valoarea aflată la o adresă efectivă sau absolută;
orice registru intern;
valoare imediată pe 8 biţi: #xxx;
val: valoarea relativă adunată la PC reprezentând
sfârşitul ciclului adresă absolută.
Repetarea continuă a instrucţiunilor aflate până la adresa etichetă
DO FOREVER,label
Repetarea continuă a instrucţiunilor aflate până la adresa PC+val
DOR FOREVER,val
Ieşirea din ciclurile DO, DOR, DO FOREVER, DOR FOREVER se
face cu instrucţiunile:
ENDDO se iese din ciclul curent înainte ca LC să ajungă la 1.
BRKcc se iese din ciclul curent dacă se îndeplineşte condiţia cc.
Aplicaţii ale procesoarelor de semnal în comunicaţii88
Condiţiile testate la execuţia instrucţiunilor condiţionale se determină
din biţii din registrul CCR (Condition Code Register) pe baza unor ecuaţii
prezentate mai jos:
Codul Condiţional Semnificaţia ‘cc’ Condiţia
CC(HS) Carry Clear (Higher or Same) C = 0
CS(LO) Carry Set (Lower) C = 1
EC Extension Clear E = 0
EQ EQual Z = 1
ES Extension Set E = 1
GE Greater than Equal N ⊕ V = 0
GT Greater Than Z + (N ⊕ V) = 0
LC Limit Clear L = 0
LE Less than or Equal Z + (N ⊕ V) = 0
LS Limit Set L = 1
LT Less Than N ⊕ V = 1
MI Minus N = 1
NE Not Equal Z = 0
NR NoRmalized Z + (U • E) = 1
PL PLus N = 0
NN Not Normalized Z + (U • E) = 1
Unde:
+ reprezintă operatorul SAU
⊕ reprezintă operatorul SAU-EXCLUSIV
• reprezintă operatorul ŞI
Capitolul 3 – Procesoarele DSP Motorola 56300 89
Alte instrucţiuni de control al programului
Aplicaţii ale procesoarelor de semnal în comunicaţii90
Capitolul 3 – Procesoarele DSP Motorola 56300 91
EXEMPLE DE PROGRAME:
Calculul sumei de produse
Să se realizeze programul care calculează suma de produse (convoluţie
sau corelaţie):
1
0
( ) ( ) ( )N
ks n x k y n k
−
=
= −∑
Pseudocodul pentru acest program este:
s(n)=0;
for (k=0,k<N,k++)
s(n) = s(n) + x(k) * y((n-k)%N);
În limbaj de asamblare suma se poate calcula repetând instrucţiunea
mac într-un ciclu do astfel:
...
clr a
do #N,_end
...
mac x0,y0,a
_end
• suma se calculează în acumulatorul a care se iniţializează cu 0.
• instrucţiunea mac calculează x0*y0 şi adună la valoarea din a.
În registrele de date x0 şi y0 trebuie transferaţi din memorie operanzii
( )x k şi ( )y n k− :
• avem nevoie de două registre de adresă r0 şi r4 care să fie
iniţializate cu adresele de start ale celor două şiruri şi să indice pe
parcurs adresa elementului ( )x k respectiv ( )y n k− din şir.
Aplicaţii ale procesoarelor de semnal în comunicaţii92
• considerăm stocate în memorie şirurile de N valori ( )x k şi ( )y n k− ;
Registru adresă Memoria X Memoria Y
r0 (0)x
r4 ( )y n
• se va folosi modificarea modulo N a adresei pentru ca la sfârşitul
ciclului, registrele r0 şi r4 să indice adresele de unde s-a pornit.
• registrul de adresă r0 este incrementat pentru următorul ( )x k .
• registrul r4 este decrementat pentru ( )y n k− .
Etichetă Instr. OperanziMagistralade date X
Magistralade date Y
Cicluriceas
N equ 14 0
org x:0 0
x_addr dsm N 0
org y:0 0
y_addr dsm N 0
org p:$100 0
move #x_addr,r0 1
move #N-1,m0 1
move #y_addr,r4 1
move m0,m4 1
clr a 1
do #N,_end 5
move x:(r0)+,x0 1
move y:(r4)-,y0 1
mac x0,y0,a 1
_end
TOTAL 3N+10
Capitolul 3 – Procesoarele DSP Motorola 56300 93
Optimizarea programului.
Optimizarea programului se poate face prin utilizarea transferurilor
paralele şi a instrucţiunii rep care repetă de N ori o singură instrucţiune.
Cele două instrucţiuni de transfer care se efectuau înaintea înmulţirii cu
acumulare pot fi efectuate în paralel cu aceasta. Diferenţa este că transferul
operanzilor din memorie în registre se face după citirea operanzilor din
registrele x0 şi y0 şi începerea efectuării înmulţirii. De aceea pentru prima
înmulţire din ciclu, operanzii trebuie iniţializaţi înaintea ciclului (în paralel cu
ştergerea acumulatorului, de exemplu).
Etichetă Instr. OperanziMagistralade date X
Magistralade date Y
Cicluriceas
...
clr A x:(r0)+,x0 y:(r4)-,y0 1
rep #N-1 5
mac X0,y0,a x:(r0)+,x0 y:(r4)-,y0 1
macr X0,y0,a 1
TOTAL N+6
Ciclul este efectuat de 1N − ori pentru ca numărul transferurilor din memorie
să fie egale cu N. Ultima înmulţire şi acumulare se face în afara ciclului
folosind şi rotunjirea rezultatului pe 24 de biţi.
Aplicaţii ale procesoarelor de semnal în comunicaţii94
Calculul valorii unui polinom
Să se realizeze programul care calculează polinomul:
1
0
( ) ( )N
k
kp x a k x
−
=
= ⋅∑
Pseudocodul pentru acest program este:
x_k = x;
p(x) = a(0);
for (k=1,k<N,k++)
{ p(x) = p(x) + a(k) * x_k;
x_k = x_k * x;
}
• registrul de adresă r0 este iniţializat cu adresa coeficienţilor ( )a k .
• valoarea lui x este păstrată în registrul y1.
• calculul lui kx se face păstrând pe 1kx − în registrul x0 şi înmulţind
această valoarea cu valoarea lui x din registrul y1.
• noua valoare kx se transferă apoi în registrul x0 pentru următoarea
iteraţie.
• polinomul se calculează în acumulatorul a cu instrucţiunea
mac y0,x0,a. La valoarea anterioară din a se adună produsul între
coeficientul ( )a k din registrul y0 şi kx din registrul x0.
Capitolul 3 – Procesoarele DSP Motorola 56300 95
Etichetă Instr. OperanziMagistralade date X
Magistralade date Y
Cicluriceas
N equ 10 0
org x:0 0
a_addr dsm N 0
org p:$100 0
move #a_adr,r0 1
move x:#val_x,y1 1
move x:(r0)+,a 1
move x:(r0)+,y0 1
move y1,x0 1
do #N-1,_end 5
mac y0,x0,a x:(r0)+,y0 1
mpyr x0,y1,b 1
move b,x0 2 i’lock
_end
TOTAL 4N+6
• deoarece rezultatul înmulţirii 1kx x− ⋅ este în acumulatorul b, acesta
trebuie transferat în registrul x0 (o instrucţiune de transfer
suplimentară).
• deoarece registrul sursă de transfer b este acelaşi cu destinaţia
instrucţiunii anterioare de înmulţire, apare o întârziere de o
instrucţiune în execuţia programului (transfer stall).
Aplicaţii ale procesoarelor de semnal în comunicaţii96
Optimizarea programului.
Se poate efectua în avans calculul 1kx x− ⋅ astfel ca transferul din b să
nu se facă pentru valoarea calculată în instrucţiunea anterioară, ci în paralel cu
aceasta (deci pentru valoarea din b înaintea înmulţirii).
Etichetă Instr. OperanziMagistralade date X
Magistralade date Y
Cicluriceas
move #a_adr,r0 1
move x:#val_x,x0 1
move x:(r0)+,a 1
mpyr x0,x0,b x:(r0)+,y0 1
move b,y1 2 i’lock
do #N-1,_end 5
mac y0,x0,a x:(r0)+,y0 1
mpyr y1,x0,b b,x0 1
_end
macr y0,x0,a 1
TOTAL 2N+10
Succesiunea operaţiilor este:
x0 = x
a = a(0)
b = x2 y0 = a(1)
y1 = b = x2
a = a(1) * x + a(0) y0 = a(2)
b = x2 * x = x3 x0 = x2
a = a + a(2) * x2 y0 = a(3)
b = x2 * x2 = x4 x0 = x3
a = a + a(3) * x3 y0 = a(4)
b = x2 * x3 = x5 x0 = x4
Capitolul 3 – Procesoarele DSP Motorola 56300 97
Sortarea unui vector prin selecţie directă
Algoritmul sortează elementele unui vector aflate în memoria X. Sortarea este
efectuată “in place” (în aceeaşi zonă de memorie) şi nu necesită memorie
suplimentară.
Algoritmul caută minimul elementelor ne-sortate din vector pe care îl schimbă
cu primul element de după secvenţa sortată.
Timpul de execuţie este proporţional cu pătratul numărului de elemente din
vector şi este constant chiar dacă vectorul este deja ordonat crescător,
descrescător sau elementele sunt în ordine aleatoare.
iniţializării = 0j = 0
a>b
a = bk = j
j = j + 1
NU
DA
a = data[i]
j = i + 1k = i
b = data[j]
data[k] = data[i]data[i] = a
i = i + 1
Aplicaţii ale procesoarelor de semnal în comunicaţii98
Registre folosite:
• indexul elementelor: r0 = j , r1 = k , r2 = i
• ciclul de căutare a minimului (numărul de elemente nesortate): r4 = j.
Instrucţiunea cmp b,a face diferenţa între a şi b şi modifică biţii de
condiţii din CCR în funcţie de rezultatul scăderii. Dacă a – b < 0 bitul n = 1.
Instrucţiunea tge y0,a r0,r1 transferă valoarea din y0 în a şi valoarea
din r0 în r1 dacă rezultatul comparaţiei anterioare este mai mare sau egal ca
0.
move #N_ITEMS,r4
move #ARRAY,r2
move #-2,n1
nop
do #N_ITEMS-1,_loop2
lua (r2)+,r0
nop
nop
move x:(r2),a y:(r4)-,b
move x:(r0)+,b
move r0,r1
do r4,_loop1
cmp b,a x:(r0)+,b b,y0
tge y0,a r0,r1
_loop1
nop
move x:(r2),y0
move a,x:(r2)+
move y0,x:(r1+n1)
_loop2
Capitolul 3 – Procesoarele DSP Motorola 56300 99
Instrucţiunea IFcc
Execută instrucţiunea aritmetică dacă este îndeplinită condiţia din IFcc
(bazată pe operaţia anterioară). Altfel nu se execută instrucţiunea ALU.
move #>2,a ; a = 2
move #>1,x0 ; x0 = 1
add x0,a ; a = 2 + 1 = 3
sub x0,a ifne ; dacă rezultatul anterior
; nu e 0 se scade x0 din a
move #>-2,a ; a = -2
move x0,b ; b = 1
addl a,b ; b = 2*b + a = 0
sub x0,a ifne ; rezultatul anterior e 0
; nu se executa scaderea
nop
Instrucţiunea DEBUGcc
Dacă este îndeplinită condiţia se intră în modul “debug” (depanare) şi
se asteaptă o comandă OnCE (“run” sau “step” din debugger).
move y0,a ; init a
neg a ; a = -a
add y0,a ; a = 0
debugeq ; opreste executia si asteapta
nop ; comanda OnCE (run sau step)
Aplicaţii ale procesoarelor de semnal în comunicaţii100
Instrucţiunea BRKcc
Se iese condiţionat din ciclu do (dacă este îndeplinită condiţia cc).
a y0
a a – 1
a = 0? NU
LC = 1 NULC--
DABRKeqZ=0
DA
do #loop_c,loop1
loop1
move #>3,a ; init accumulator
do #6,loop1 ; init ciclu (LC = 6)
sub #1,a ; decrementare acumulator
brkeq ; iese din ciclu daca a=0
nop ; ultimele trei linii din cilu
nop ; nu trebuie sa contina brkcc
nop ; (conflict pipeline)
loop1
nop
Capitolul 3 – Procesoarele DSP Motorola 56300 101
3.6 CONTROLERUL DMA (DIRECT MEMORY ACCESS)
Controlerul de acces direct la memorie (DMA) asigură transferul de
date între memoria internă şi/sau externă sau dispozitive de I/O în orice
combinaţie fără nici o intervenţie externă.
Deoarece există magistrale de date şi adrese dedicate DMA, precum şi
datorită modului de împărţire a memoriei interne rezulta că operaţiile de acces
direct la memorie nu interferă cu restul operaţiilor ce au loc în interiorul
DSP56300.
Unitatea de interfaţă cu magistrala (BIU) primeşte comenzile necesare
de la controlerul DMA şi poate prelucra activităţile externe cu maximum de
flexibilitate şi performanţă.
Controlerul DMA are 6 canale, fiecare cu setul propriu de registre
mapate în zona memoriei interne de I/O.
Tipurile de transfer de date efectuate de controlerul DMA sunt:
Sursa / destinaţia transferuluiNumărul minim de cicluri de ceas
pentru transferul unui cuvânt
Memorie internă → Memorie internă 2
Memorie externă ↔ Memorie internă 2 + timp acces memoria externă
Memorie externă → Memorie internă 2 + timp acces memoria externă
Memorie internă ↔ Porturi I/O 2
Memorie externă ↔ Porturi I/O 2 + timp acces memoria externă
Porturi I/O → Porturi I/O 2
Aplicaţii ale procesoarelor de semnal în comunicaţii102
Transferul de date pentru un singur canal ocupă minimum 2 tacturi de
ceas pentru un singur cuvânt.
Numărul de tacturi de ceas per transfer poate fi mai mare dacă există un
conflict între activitatea DMA şi nucleul DSP56300 (de exemplu dacă ambele
accesează aceiaşi 1/4K de RAM intern în acelaşi tact de ceas, sau dacă ambele
vor să acceseze memoria externă).
Controlerul de DMA are 6 canale identice. Fiecare canal are 6 registre
dedicate:
• DSRi – registrul sursa DMA pentru canalul i care conţine adresa de bază
a sursei următorului transfer DMA.
• DDRi – registrul destinaţie DMA pentru canalul i care conţine adresa de
bază a destinaţiei următorului transfer DMA.
• DCOi – registrul contor DMA pentru canalul i care conţine numărul de
transferuri DMA rămase de executat.
• DCRi – registrul de control DMA pentru canalul i care conţine biţii
necesari controlului operaţiilor de pe canal.
Mai sunt 5 registre nededicate:
• 4 registre DMA de ofset (DOR0, DOR1, DOR2, DOR3) care conţin
ofseturile pentru adrese ce vor putea fi folosite de orice canal, dacă este
necesar, folosind modurile de adresare specifice.
• un registru read-only de stare DMA (DSTR).
Capitolul 3 – Procesoarele DSP Motorola 56300 103
Registrul de control DMA (DCR)
Aplicaţii ale procesoarelor de semnal în comunicaţii104
Registrul contor DMA (DCO)
Modul A – un singur contor (transfer unidimensional).
23 0
DCO
Numărul de transferuri este egal cu DCO+1. Înainte de fiecare transfer
DMA, registrul DCO este testat astfel:
• DCO > 0 – este iniţiat transferul de la adresa sursă, DCO este decrementat
şi registrul de adresă DSR este actualizat în funcţie de modul de adresare a
sursei din registrul de control DCR.
• DCO = 0 – ultimul transfer este iniţiat de la adresa sursă, registrul de
adresă este actualizat şi DCO este încărcat cu valoarea iniţială.
Înaintea transferului După transfer
DSR DCO Adresa sursă atransferului
DSR DCO
S 5 S S+1 4
S+1 4 S+1 S+2 3
S+2 3 S+2 S+3 2
S+3 2 S+3 S+4 1
S+4 1 S+4 S+5 0
S+5 0 S+5 S+6 5
În exemplul de mai sus am considerat că adresa sursă este modificată
(incrementată) în timpul transferului. Acelaşi lucru se poate întâmpla şi cu
adresa destinaţie a transferului în funcţie de modul de adresare destinaţie din
registrul de control DCR
Capitolul 3 – Procesoarele DSP Motorola 56300 105
Transferuri DMA multidimensionale
DMA-ul este capabil de transferuri de date aflate în structuri complexe.
Modul de adresare al sursei sau destinaţiei poate fi bi sau tridimensional (2D
sau 3D).
Transferul bidimensional (2D)
Pentru transferul 2D, numărătorul DCO este divizat în DCOL şi
DCOH.
Modul B – două contoare (transfer bidimensional):
23 12 11 0
DCOH DCOL
Un registru de ofset DOR este folosit pentru a calcula saltul de adresă.
Adresa transferului DMA este conţinută de registrul de adrese (DSRi
sau DDRi).
Acest mod este util în transferuri bidimensionale (de exemplu liniile
unei matrice). Înainte de fiecare transfer DMA, registrele DCOH şi DCOL
sunt testate dacă au ajuns la 0 astfel:
• DCOH > 0 şi DCOL > 0 – este iniţiat transferul de la adresa sursă, DCOL
este decrementat şi registrul de adresă DSR este incrementat.
• DCOH > 0 şi DCOL = 0 – este iniţiat transferul de la adresa sursă,
registrul de adresă DSR este incrementat cu valoarea aflată într-un registru
ofset DOR asociat transferului bidimensional în registrul de control,
DCOH este decrementat şi DCOL este încărcat cu valoarea iniţială.
• DCOH = 0 şi DCOL = 0 – ultimul transfer este iniţiat de la adresa sursă,
registrul de adresă este actualizat şi DCOH şi DCOL sunt încărcate cu
valorile iniţiale. Odată cu acest ultim transfer de bloc de date, DMA-ul ori
Aplicaţii ale procesoarelor de semnal în comunicaţii106
încetează să mai execute orice operaţie, ori aşteaptă o nouă declanşare a
transferului.
Înaintea transferului După transfer
DSR DCOH:L Adresa sursă atransferului
DSR DCOH:L
S 1:2 S S+1 1:1
S+1 1:1 S+1 S+2 1:0
S+2 1:0 S+2 S+O+2 0:2
S+O+2 0:2 S+3 S+O+3 0:1
S+O+3 0:1 S+4 S+O+4 0:0
S+O+4 0:0 S+5 S+2O+4 1:2
Numărul total de transferuri efectuat este (DCOH + 1) x (DCOL + 1).
EXEMPLU:
Salt cu ofset
Transfer liniar 2D
Capitolul 3 – Procesoarele DSP Motorola 56300 107
Transferul tridimensional (3D)
Pentru transferul 3D, registrul contor este împărţit în trei registre
DCOH, DCOM şi DCOL, având dimensiuni diferite.
Modurile C, D, E – trei contoare (transfer tridimensional):
23 12 11 6 5 0
DCOH DCOM DCOL
23 18 17 6 5 0
DCOH DCOM DCOL
23 18 17 12 11 0
DCOH DCOM DCOL
Acest mod de transfer utilizează 2 registre de ofset pentru calculul
adresei de salt.
Înainte de fiecare transfer DMA, registrele contor sunt testate dacă au
ajuns la 0 şi se efectuează următoarele operaţii:
• DCOH > 0, DCOM > 0 şi DCOL > 0 – este iniţiat transferul de la adresa
sursă, DCOL este decrementat şi registrul de adresă este incrementat.
• DCOH > 0, DCOM > 0 şi DCOL = 0 – este iniţiat transferul de la adresa
sursă, registrul de adresă este incrementat cu valoarea aflată în primul
registru ofset DOR specificat pentru transferul 3D în registrul de control,
DCOM este decrementat şi DCOL este încărcat cu valoarea iniţială.
• DCOH > 0, DCOM = 0 şi DCOL = 0 – este iniţiat transferul de la adresa
sursă, registrul de adresă este incrementat cu valoarea aflată în al doilea
registru ofset DOR specificat pentru transferul 3D în registrul de control,
DCOH este decrementat şi DCOM şi DCOL sunt încărcate cu valorile
iniţiale.
• DCOH = 0, DCOM = 0 şi DCOL = 0 – ultimul transfer este iniţiat de la
adresa sursă, registrul de adresă este incrementat cu al doilea ofset şi
Aplicaţii ale procesoarelor de semnal în comunicaţii108
DCOH, DCOM şi DCOL sunt încărcate cu valorile iniţiale. După acest
ultim transfer, DMA-ul aşteaptă o nouă declanşare.
Înaintea transferului După transfer
DSR DCO Adresa sursă atransferului
DSR DCO
S 1:1:2 S S+1 1:1:1
S+1 1:1:1 S+1 S+2 1:1:0
S+2 1:1:0 S+2 S+O0+2 1:0:2
S+O0+2 1:0:2 S+O0+2 S+O0+3 1:0:1
S+O0+3 1:0:1 S+O0+3 S+O0+4 1:0:0
S+O0+4 1:0:0 S+O0+4 S+O0+O1+4 0:1:2
S+O0+O1+4 0:1:2 S+O0+O1+4 S+O0+O1+5 0:1:1
S+O0+O1+5 0:1:1 S+O0+O1+5 S+O0+O1+6 0:1:0
S+O0+O1+6 0:1:0 S+O0+O1+6 S+2O0+O1+6 0:0:2
S+2O0+O1+6 0:0:2 S+2O0+O1+6 S+2O0+O1+7 0:0:1
S+2O0+O1+7 0:0:1 S+2O0+O1+7 S+2O0+O1+8 0:0:0
S+2O0+O1+8 0:0:0 S+2O0+O1+8 S+2O0+2O1+9 1:1:2
Numărul total de transferuri este (DCOH+1)x(DCOM+1)x(DCOL+1).
Capitolul 3 – Procesoarele DSP Motorola 56300 109
EXEMPLU:
Salt cu ofsetul 1
Salt cuofsetul 1
Salt cuofsetul 1
Salt cuofsetul 1
Salt cuofsetul 1
Salt cuofsetul 1
Salt cu ofsetul 2
Transfer 3D 2D
Registrul de stare DMA (DSTR)
23 22 21 20 19 18 17 16 15 14 13 12
11 10 9 8 7 6 5 4 3 2 1 0
DCH2 DCH1 DCH0 DACT DTD5 DTD4 DTD3 DTD2 DTD1 DTD0
• Biţii DCH indică ce canal DMA este activ (000 – 101 reprezintă canalele
DMA 0 - 5).
• Bitul DACT indică dacă există cel puţin un canal DMA activ.
• Biţii DTDi indică transfer terminat pe canalul i şi sunt setaţi la transferarea
ultimului cuvânt la destinaţie.
Aplicaţii ale procesoarelor de semnal în comunicaţii110
Exemple de folosire a DMA
În aceste exemple se foloseşte un singur canal DMA fără interferenţe
din alte surse, cum ar fi alte canale DMA, conflicte cu nucleul DSP56300 etc.
Transferul de la memoria de date x la y
Următorul program foloseşte canalul 0 al DMA pentru a transfera liniar
un bloc de N cuvinte din memoria interna X in memoria interna Y:
movep #source_addr,x:M_DSR0 ;adresa sursă
movep #dest_addr,x:M_DDR0 ;adresa destinaţie
movep #(N-1),x:M_DCO0 ;se vor efectua N transferuri
movep #%100110000000001011010100,x:M_DCR0
nop
nop
jclr #0,x:M_DSTR,* ;interogarea lui DTD0
În acest program, în DSR0 este înscrisă adresa primei valori ce
urmează să fie transferată.
Nu este necesar să specificăm că adresa este internă. Partea hardware a
DMA evaluează această informaţie în mod automat în concordanţă cu harta
memoriei.
Numărul N de transferuri de efectuat este (DCO+1), deci valoarea
scrisă în DCO0 este N-1.
Conţinutul registrului de control DCR0 este următorul:
• DE = 1 începe un transfer DMA.
• DIE = 0 dezafectează întreruperea către procesor la sfârşitul unui bloc.
• DTM = 011 transferul blocului este activat software de DE prin setarea
bitului DE.
Capitolul 3 – Procesoarele DSP Motorola 56300 111
• DPR = 00 nivel de prioritate zero (cel mai mic).
• DCON = 0 modul continuu nu este activat.
• DRS = 00000 in modul activat software acest câmp este ignorat.
• D3D = 0 mod ne-tridimensional.
• DAM = 101101 adresa sursă este post incrementată cu 1 (adresare
liniară), adresa destinaţie este de asemenea incrementată în mod liniar.
• DDS = 01 destinaţia este în memoria Y.
• DSS = 00 sursa în memoria X.
În acest exemplu, nucleul procesorului este inactiv în timpul în care
DMA-ul transferă blocurile de date.
Programul testează bitul DTD0 al acestui canal şi continuă execuţia
programului după ce DMA termină de transferat datele.
Datorită structurii de tip pipeline a execuţiei şi deoarece procesorul
interoghează bitul DTD0 până când acesta este egal cu 0, programul trebuie
să aştepte 2 cicluri de ceas până ce DE este scris iar DTD0 este resetat la
începutul blocului de transfer pentru a indica ocuparea canalului.
O altă opţiune este aceea de a interoga bitul DACT (bitul 8) din DSTR
până ce acesta este setat. Acest bit indică daca pe orice canal DMA se
efectuează un transfer de date. Programul trebuie să aştepte 3 cicluri de ceas
(3 instrucţiuni NOP) până când acest bit este setat şi poate fi interogat.
Transferul datelor de la portul ESSI
Canalul DMA5 este programat pentru a recepţiona date de la un port
periferic ESSI.
Aplicaţii ale procesoarelor de semnal în comunicaţii112
În acest caz adresa sursă trebuie să fie în modul "fără actualizare"
deoarece DMA-ul citeşte registrul de recepţie de date mapat la o adresă fixă
în memoria perifericelor.
Datele sunt transferate într-un buffer de tip circular în memoria X
internă. Buffer-ul circular este implementat folosind adresarea liniară; la
terminarea transferului este generată o întrerupere iar adresa destinaţie este
reiniţializată.
În acest exemplu se ignoră conţinutul contorului DCO5, care este însă
folosit pentru generarea unei întreruperi pentru a se face saltul la începutul
buffer-ului după ce acesta este umplut.
M_RX1 equ $ffffa8 ;registrul de recepţie ESSI1
movep #M_RX1,x:M_DSR5 ;adresa sursă
movep #$int_addr,x:M_DDR5 ;adresa destinaţie
movep #(N-1),x:M_DCO5 ;buffer circular de lungime N
movep #111011100110001011000000,x:M_DCR5
;transferul cuvintelor declanşat de ESSI1 Rx
;din memoria X fără actualizare in X act. liniara
;DE nu este şters la terminarea blocului
;intreruperea este generata la sfarsitul blocului
;prioritatea canalului este 3 (nu conteaza aici)
...
;rutina intreruperii terminării transferului pe DMA5
I_DMA5
movep #$int_addr,x:M_DDR5
;se modifică adresa de inceput a buffer-ului
;realizând o adresare circulară
Capitolul 3 – Procesoarele DSP Motorola 56300 113
Exemple pentru realizarea altor moduri de adresare cu DMA
Adresare circulară folosind transferul 2D
Se transferă un cuvânt de date pe cerere până la sfârşitul cadrului
circular, după aceea se efectuează un salt înapoi (registru de ofset are valoare
negativă) la începutul cadrului.
M_RX1 equ $ffffa8 ;registrul de recepţie
ESSI1
movep #-(N-1),x:M_DOR0 ;offset de salt inapoi
movep #M_RX1,x:M_DSR5 ;adresa destinatie
movep #int_addr,x:M_DDR5 ;adresa de inceput buffer
movep #$(fff000+(N-1)),x:M_DCO5
movep #$ae6040,x:M_DCR5
;transferul declansat de ESSI1 Rx
;x no update -> x 2D cu DOR0
;DE nu este resetat la sfarsitul blocului de date
;intreruperea nu este generata
;prioritate canal: 3 (nu conteaza aici)
În acest exemplu registrul contor DCO5 este încărcat cu N-1 în DCOL şi cu
$fff în DCOH pentru un număr total mare de transferuri.
Transfer cu ofset echidistant
Modul de adresare postincrementare cu ofset Nn care are sintaxa
(Rn)+Nn poate fi folosit, de exemplu, pentru a efectua o decimare a datelor.
Folosind DMA-ul pentru a efectua aceeaşi operaţie se poate elibera
registrul Rn.
Transfer 3D 2D
Aplicaţii ale procesoarelor de semnal în comunicaţii114
Se programează canalul DMA pentru transfer 2D cu DCOL=0. La
fiecare transfer, registrul de adrese este modificat cu ofsetul N aflat în
registrul de ofset DORi.
Programând acelaşi canal pentru transfer 3D cu DCOH=0 si DCOL=0,
dar cu DCOM>0 şi DORi=N (ofset) şi DORj=–(N*DCOM) se
implementează un buffer circular care efectuează un algoritm de decimare
asemănător (modul de adresare rezultat este similar cu cel rezultat în urma
folosirii adresării ((Rn) + Nn) mod Mn.
Operarea cu mai multe canale DMA
Deoarece un canal DMA poate fi controlat din 32 de surse, transferuri
DMA multiple pot fi efectuate în serie sau paralel.
Orice canal poate fi controlat de întreruperi venite din 32 de surse:
• 4 externe (IRQA, IRQB, IRQC şi IRQD),
• 22 de evenimente sosite de la periferice,
• 6 moduri "sfârşit de transfer pe canalul A declanşează transferul pe canalul
B".
Ultimele 6 moduri sunt folositoare în cazul în care 2 transferuri
trebuiesc efectuate secvenţial, adică un canal DMA efectuează un transfer,
timp în care celuilalt canal i se setează toţi parametrii necesari pentru un al
doilea transfer.
Când primul transfer s-a efectuat, începe al doilea, iar primul DMA este
setat pentru un nou transfer programat să înceapă când al doilea canal DMA
termină transferul.
Capitolul 3 – Procesoarele DSP Motorola 56300 115
EXEMPLU: Compresia imaginilor color
În televiziunea în culori fiecare pixel este reprezentat prin 3 octeţi
corespunzători culorilor roşu, verde, albastru.
În sistemul PAL reprezentarea RGB este transformată într-o
reprezentare YUV în care Y este luminanţa iar U si V sunt componentele de
crominanţă, conform ecuaţiilor:
Y = 0.299*R + 0.587*G + 0.114*B
U = (B – Y) / 2.03
V = (R – Y) / 1.14
Folosind sistemul YUV se poate ajunge la o compresie de 50% fără a
se reduce calitatea imaginii.
Datele sunt stocate conform standardului MPEG în cuvinte de 16 biţi
conform următoarei hărţi de memorie:
ADRESA DATA
000000 Y00, Y01
000001 Y02, Y03
000002 U0, V0
000003 Y10, Y11
000004 Y12, Y13
000005 U1, V1
Aplicaţii ale procesoarelor de semnal în comunicaţii116
Y00 Y01
Y02 Y03
U0 V0
Y10 Y11
Y12 Y13
U1 V1
Y20 Y21
Y22 Y23
U2 V2
Y30 Y31
Y32 Y33
Memoriasistemului
Y00 Y01
U0 V0
Y10 Y11
U1 V1
Y20 Y21
U2 V2
Y30 Y31
Memoria video(o linie de imagine)
Primul canal DMA transferă datele din Y00, Y01 deoarece acestea
diferă de structura celorlalte.
Al doilea canal DMA este declanşat de primul şi transferă din 2D în
liniar când DCOL=1 (o incrementare şi un salt).
Priorităţi între canale
Fiecare canal DMA are un nivel de prioritate definit de biţii DPR1,
DPR0 din DCR al canalului respectiv. Nivelul poate fi 0, 1, 2 sau 3.
Prorităţile sunt necesare deoarece un singur canal DMA poate efectua
un transfer într-un ciclu de ceas deoarece există o singură magistrală DMA de
adrese (DAB).
În cazul în care canalele DMA active au priorităţi diferite atunci
canalul cu prioritatea cea mai mare efectuează transferul, celelalte canale
aşteaptă.
Capitolul 3 – Procesoarele DSP Motorola 56300 117
Dacă sunt două canale active cu aceeaşi prioritate se foloseşte o
metodă în care fiecare canal transferă cate un cuvânt periodic. Acest
algoritm denumit "round-robin" nu asigură că numărul de cuvinte transferate
de canalul A este egal cu cele transferate de B în acelaşi timp. Aceasta
deoarece un al treilea canal cu o prioritate mai mare poate interveni, iar
sistemul nu îşi aminteşte care canal a efectuat ultimul transfer înainte de
intervenţie.
EXEMPLU:
0 0 0 1 0 1 2 2 2 3 2 3 4 4 4 4 4 2 3 5 2 3 5 2 3 5 3 5 3 5 3 5 5 5 0 1 0 1 0 1 1 1 1
↑ ↑ ↑ ↑ ↑ ↑ ↓ ↓ ↓ ↓ ↓ ↓
Sta
rt C
h0
Sta
rt C
h1
Sta
rt C
h2
Sta
rt C
h3
Sta
rt C
h4
Sta
rt C
h5E
nd C
h4
End
Ch2
End
Ch3
End
Ch5
End
Ch0
End
Ch1
Round robin
În acest exemplu:
• Canalele 0 şi 1 au prioritatea 0
• Canalele 2, 3 şi 5 au prioritatea 1
• Canalul 4 are prioritatea 2.
Modul de transfer continuu
Un canal DMA poate lucra în modul continuu dacă bitul DCON din
registrul de control al canalului respectiv este setat.
Celelalte canale cu aceeaşi prioritate nu pot interveni până când nu se
termină transferul unui bloc întreg sau a unei linii.
Canalele cu prioritate mai mare întrerup transferul canalului chiar
dacă acesta este în modul continuu.
Aplicaţii ale procesoarelor de semnal în comunicaţii118
EXEMPLU:
0 0 0 1 0 1 2 2 2 3 2 3 4 4 4 4 4 2 3 5 5 5 5 5 5 5 5 2 3 2 3 3 3 3 0 1 0 1 0 1 1 1 1
↑ ↑ ↑ ↑ ↑ ↑ ↓ ↓ ↓ ↓ ↓ ↓
Sta
rt C
h0
Sta
rt C
h1
Sta
rt C
h2
Sta
rt C
h3
Sta
rt C
h4
Sta
rt C
h5E
nd C
h4
End
Ch5
End
Ch2
End
Ch3
End
Ch0
End
Ch1
Modul continuu
În acest exemplu
• canalele 2, 3 şi 5 au prioritatea 1;
• canalul 5 este setat în modul continuu.