Documente Academic
Documente Profesional
Documente Cultură
APLICAII ALE PROCESOARELOR DE SEMNAL N COMUNICAII 4. Se alege tipul de proiect i pentru ce platform este destinat. Se va alege proiect pentru Simulatorul SC100 n limbaj Asm formatul datelor n memorie de tip Big_Endian.
1.1 Mediul CodeWarrior pentru dezvoltarea proiectelor 1.1.1 Proiecte prefabricate (Stationery) n dezvoltarea proiectelor pentru DSP SC140 se pot folosi exemple de proiecte create de CodeWarrior. Pentru a crea un proiect nou se urmeaz paii: 1. Se selecteaz File > New i se alege StarCore Stationery 5. Rezultatul este un proiect care conine un singur fiier blkmov.asm.
;******************************************************************* ; ALGORITHM : Block move, copy one array to another ; a(i) = b(i) i=0..N-1 ; ;******************************************************************* ; ; Constants Used: ; INPUT : $100 Initial address of input vector ; OUTPUT : $400 Address of output vector. ; N : 32 Vector length. ; ; registers used: ; d0-d11 r0,r1,r7 ; r0 points to the first half of the input vector ; r1 points to the second half of the input vector ; r7 points to the output vector ; r3 points to the second half of the output vector ; ; assumptions: ; All registers used could be written to. ; Number of elements in the vector is dividsible by 8. ; Both vectors addresses are 4-word aligned. ;
2. Se scrie un nume pentru proiect (Ex1) 3. Se alege folderul n care urmeaz s se creeze proiectul.
1.1.2 Simularea proiectului 1. Pentru a compila proiectul curent 1) se selecteaz meniul Project > Make 2) sau se apas tasta F7 3) sau se apas butonul Make din partea superioar a ferestrei proiectului.
org p:INPUT dc $fdc1,$f2,$401,$fea3,$3f8,$596,$2fc,$fe10 dc $ff58,$3b9,$ff89,$fa4e,$f9d5,$65e,$fa2b,$5d5 dc $1b3,$7e8,$5b2,$fe96,$2b9,$f95f,$73,$ffeb dc $fd77,$369,$fa0a,$fa42,$21,$58b,$fb7f,$78 org p:0 jmp $1000 org p:$1000 init: type func doensh0 #N/8 move.w #INPUT,r0 move.w #OUTPUT,r7 Finit_end kernel: type func loopstart0 move.4f (r0)+,d0:d1:d2:d3 moves.4f d0:d1:d2:d3,(r7)+ loopend0 Fkernel_end out: type func debug nop Fout_end ; debugging purpose
2. Pentru simularea pas cu pas a execuiei programului 4) se selecteaz meniul Project > Debug, 5) sau se apas tasta F5 , 6) sau se apas butonul Debug din partea superioar a ferestrei proiectului.
Obs. Pentru nelegerea semnificaiei directivelor de asamblare equ, org etc. se va citi seciunea Assembler Directives din StarCore Assembler User Guide (vezi Help > StarCore).
APLICAII ALE PROCESOARELOR DE SEMNAL N COMUNICAII Apoi se face dublu click pe General Purpose Registers
Observaie: Prima instruciune a oricrui program este un salt la adresa $1000 (jump $1000). Dac dup rularea comenzii Debug sgeata albastr nu este pe primul rnd dup instruciunea init, se mut unde trebuie cu ajutorul mouse-ului (click pe sgeat, inei apsat i ducei sgeata in dreptul instruciunii init).
3. Rularea pas cu pas a programului se face n modul Debug prin: 7) meniul Debug > Step Over , 8) sau cu tasta F10, 9) sau se apas butonul Step Over din partea superioar a ferestrei Debug. 4. Vizualizarea evoluiei registrelor pe parcursul execuiei se face selectnd meniul View > Registers
Se poate observa cum la fiecare StepOver registrele modificate de instruciunile executate i schimb valoarea i se nroesc. 5. Vizualizarea memoriei se face selectnd Data > View Memory. De exemplu pentru a vedea vectorul de intrare INPUT care este stocat n memorie la adresa $100 (n hexazecimal) i care conine elemente pe 16 bii se scrie adresa 0x100 la linia Display i se selecteaz WordSize 16.
PDB
PAB
128
32
32
32
64 128
Secveniator de Program
OnCE
Controlul Puterii
StarCore 140
Se poate verifica, dup execuia programului, c vectorul de ieire OUTPUT de la adresa 0x400 conine aceleai valori ca i vectorul de intrare.
2 AAU
Instruction Bus
BMU
128
4 ALU
24
1.2.1 Formatele de reprezentare a datelor 1.2 Arhitectura DSP StarCore140 Nucleul procesorului de semnal SC140 conine 4 uniti aritmetico-logice (ALU) care includ circuite dedicate de nmulire i adunare i uniti de operare pe bit; 16 registre generale de date pe 40 bii pentru operaii cu numere ntregi i fracionare; 2 uniti de adresare; circuit dedicat pentru controlul execuiei programului - PSEQ (Program SEQuencer Unit) SC140 se interfaeaz cu memoria prin 2 magistrale de date (XDBA, XDBB), o magistral de instruciuni (PDB) i magistralele de adrese asociate. Reprezentarea datelor se face n complement fa de 2: numere fracionare cu semn numere ntregi o cu semn o fr semn Precizia de reprezentare poate fi simpl: 1 word = 16 bii dubl: 2 words = 32 bii Numere fracionare cu semn: pe 16 bii: (domeniu de valori: -1:2-15:1-2-15)
-20 21 22 s.
15 14 13
Laborator 1. Introducere n realizarea proiectelor pentru DSP SC140 Numere ntregi cu semn: pe 16 bii: (domeniu de valori: -215:1:215-1)
-215 214 213 s
15 14 13
10
LIMIT L0 L1
21 ntreg
20 .
0
L2 L3 L4 L5 L6 L7
21 ntreg
20 .
0
1bit
40 biti
Registrele de date D0 D15 Pot fi folosite n instruciuni ca: operanzi sursa operanzi destinaie acumulatori buffer de intrare ntre XDBA sau XDBB si ALU Pot fi accesate pentru transferul cu memoria a unui: cuvnt lung: operanzi de 32 bii cuvnt scurt: operanzi de 16 bii byte: operanzi de 8 bii La transferul datelor reprezentate n memorie pe 8, 16 sau 32 de bii n registrele de date care au o capacitate de 40 de bii se aplic automat regulile de aliniere i extensie de semn.
ALU
ALU
ALU
ALU
Fiecare ALU conine un circuit MAC (Multiply and ACcumulate) cu care se pot face nmuliri, adunri, scderi i nmulirea cu acumulare. un shifter (structur de deplasare) care face deplasare aritmetic la dreapta sau la stnga. Setul de registre generale de date conine 16 registre pe 40 bii pentru operaii cu numere ntregi i fracionare;
Laborator 1. Introducere n realizarea proiectelor pentru DSP SC140 Transferul numerelor ntregi din memorie n registre:
-215 214 20 ntreg .
11
12
APLICAII ALE PROCESOARELOR DE SEMNAL N COMUNICAII Suffixul de dup instruciunea MOVE semnific: B = Byte W = ntreg (word) pe 16 bii W = ntreg lung (double word) pe 32 bii F = Fracionar pe 16 bii
63 8biti 0 $0 $8 $10 MOVE.W ($16),D0 MOVE.B ($4),D0
MOVE.W (Rn),Dn
-239 s
232 231
20 ntreg
Dn.l
Dn.e
Dn.h
;R0=$18
MOVE.F (Rn),Dn
;R0=$20
;R0=$38
-28 s
21 20 2-1
2-31 0
s.
64 biti
Dn.e
Dn.l
MOVE.F acceseaz memoria la fel ca MOVE.W Datele trebuie s fie aliniate n memorie la adrese multiplu (n octei) de limea magistralei folosit pentru transfer.
8 octeti $0 $0 MOVE.W ($0),D0 MOVE.W ($1),D0 ; gresit
1.2.3 Transferul pe magistralele de date Transferurile ntre memorie i nucleu se pot face pe dou magistrale de date de 64 bii. Memoria este adresabil la nivel de byte.
XABA XDBA 32
Nucleul SC140
64 XABB XDBB 64 32
Instruciunile MOVE pot transfera date reprezentate pe: byte (8 bii), word (16 bii), long word (32 bii), double-long word sau four-word (64 bii).
Laborator 1. Introducere n realizarea proiectelor pentru DSP SC140 1.2.4 Instruciuni aritmetice
13
14
APLICAII ALE PROCESOARELOR DE SEMNAL N COMUNICAII nmulirea cu acumulare MAC Da,Db,Dn Exemplu: mac d4,d5,d6
D4 D5 L6:D6 $00 1000 0000 $00 3000 0000 $0:$00 4000 0000
Instruciunile ALU folosesc unitatea de nmulire i acumulare care conine un multiplicator, un sumator, precum i alte circuite aritmetice pentru realizarea rotunjirii, comparrii, saturrii sau shiftrii. Operanzii surs pentru instruciuni sunt tocai n: registre sau valori imediate din corpul instruciunii. Operandul destinaie: numai un registru de 40 bii d0 d15. Ieirea multiplicatorului poate fi adunat la registrul destinaie. Adunarea ADD Da,Db,Dn Exemplu: add d0,d1,d2
D0 D1 $00 72E3 8F2A $00 7216 EE3C L2:D2 $1:$00 E4FA 7D66
Dn (Da.H*Db.H) Dn
Da + Db Dn
Verificai reprezentarea datelor n memorie i n registre. 2. Modificai programul pentru a calcula suma elementelor vectorului INPUT. Rezultatul (o singur valoare) trebuie scris la adresa OUTPUT.
OUTPUT = INPUT[i ] .
i =0 15
Da.H * Db.H Dn
0.010 x 1.100 1.111 L6:D6 $0:$FF F000 0000 $2000 $C00 0 $F000 1/4 1/2 1/8
org p:$1000 init: type func doensh0 #N move.w #INPUT,r0 move.w #OUTPUT,r7 Finit_end
15
kernel: type func [ clr d4 clr d5 clr d6 move.4f (r0)+,d0:d1:d2:d3 loopstart0 [ add d0,d4,d4 add d1,d5,d5 move.4f (r0)+,d0:d1:d2:d3 ] loopend0 [ add d4,d5,d5 add d6,d7,d7 ] add d5,d7,d7 moves.f d7,(r7) Fkernel_end
clr d7 ]
add d2,d6,d6
add d3,d7,d7
5. Definii un al doilea vector cu 16 elemente aleatoare (de ex. 0.1,-0.1,...). Modificai programul astfel ca vectorul rezultat OUTPUT s fie suma element cu element a celor doi vectori.
OUTPUT[i] = INPUT[i ] + VECTOR[i ]
6. Modificai programul de la punctul 4 pentru a calcula suma produselor elementelor celor doi vectori n variabila OUTPUT.
OUTPUT = INPUT[i ] VECTOR[i ]
i =0 15