Sunteți pe pagina 1din 8

Laborator 1.

Introducere n realizarea proiectelor pentru DSP SC140

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.

LABORATOR 1. INTRODUCERE N REALIZAREA PROIECTELOR PENTRU DSP STARCORE 140

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.

Laborator 1. Introducere n realizarea proiectelor pentru DSP SC140


N INPUT OUTPUT equ equ equ 32 $100 $400

APLICAII ALE PROCESOARELOR DE SEMNAL N COMUNICAII

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

; processing 8 samples move.w #INPUT+32,r1 move.w #OUTPUT+32,r3

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.

move.4f (r1)+,d4:d5:d6:d7 moves.4f d4:d5:d6:d7,(r3)+

Obs. Pentru nelegerea semnificaiei directivelor de asamblare equ, org etc. se va citi seciunea Assembler Directives din StarCore Assembler User Guide (vezi Help > StarCore).

Laborator 1. Introducere n realizarea proiectelor pentru DSP SC140

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.

Laborator 1. Introducere n realizarea proiectelor pentru DSP SC140

APLICAII ALE PROCESOARELOR DE SEMNAL N COMUNICAII


Spaiul unificat de memorie pentru date i program
XABA XDBA XABB 64 XDBB

PDB

PAB

128

32

32

32

64 128

Secveniator de Program

Setul de registre pentru Generarea Adreselor

Registre ALU pentru date

OnCE
Controlul Puterii

Accelerator pentru setul de instruciuni

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

Generatorul de ceas PLL

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

214 215 fractie


pe 32 bii: (domeniu de valori: -1:2-31:1-2-31)


-20 21 22 s.
31 30 29

230 231 fractie


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

APLICAII ALE PROCESOARELOR DE SEMNAL N COMUNICAII


EXT D0.e D1.e HP D0.h D1.h LP D0.l D1.l

21 ntreg

20 .
0

L2 L3 L4 L5 L6 L7

pe 32 bii: (domeniu de valori: -231:1:231-1)


-231 230 229 s
31 30 29

21 ntreg

20 .
0

L8 L9 L10 L11 L12

1.2.2 Arhitectura ALU


Magistrala de date 1 (XDBA) Magistrala de date 2 (XDBB)
64 64

L13 L14 L15 39 D15.e 32 31 D15.h 16 15 D15.l 0

D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 D13 D14 D15

1bit

40 biti

scalare / limitare (8)


64 40 40 40 40 40 40 40 40 64

Set de Registre de date (16)


40 40 40 40 40 40 40 40 40 40 40 40

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

216 215 214


20 ntreg
Dn.l

Dn.e

Dn.h

Transferul numerelor fracionare din memorie n registre:


-20 2-1 s. fractie 2-15

$18 MOVE.2W (R0),D0:D1

;R0=$18

$20 MOVE.4W (R0),D0:D1:D2:D3

MOVE.F (Rn),Dn

$28 $30 MOVE.L ($34),D0 $38 MOVE.2L (R0),D0:D1

;R0=$20

;R0=$38

-28 s

21 20 2-1

2-15 2-16 fractie


Dn.h

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

Memoria comuna (date/program)

R0=$10 $10 MOVE.2W (R0),D0:D1 $10 MOVE.2W (R0+2),D0:D1 ; gresit

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

$0:$00 4600 0000

EXERCIII: 1. Iniializai variabila INPUT cu urmtoarele valori fracionare (N=16):


dc 0.1,-0.9,0.2,-0.8,0.3,-0.7,0.4,-0.6 dc 0.6,-0.4,0.7,-0.3,0.8,-0.2,0.9,-0.1

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

Scderea SUB Da,Db,Dn Exemplu: sub d0,d1,d2


D0 D1 $00 0000 0005 $00 0000 0008 L2:D2 $0:$FF FFFF FFFD

Verificai valoarea din registrul de sumare dup primele 8 elemente. Db Da Dn


N INPUT OUTPUT equ equ equ 16 $100 $400

org p:INPUT dc 0.1,-0.9,0.2,-0.8,0.3,-0.7,0.4,-0.6 dc 0.6,-0.4,0.7,-0.3,0.8,-0.2,0.9,-0.1 org p:0 jmp $1000

nmulirea numerelor fracionare MPY Da,Db,Dn Exemplu: mpy d4,d5,d6


D4 D5 $FF C000 0000 $00 2000 0000

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

; procesare esantion cu esantion

Laborator 1. Introducere n realizarea proiectelor pentru DSP SC140


kernel: type func clr d1 loopstart0 move.f (r0)+,d0 add d0,d1,d1 loopend0 moves.f d1,(r7) Fkernel_end

15

3. Optimizai codul anterior pentru o execuie mai rapid:


doensh0 #N/4 ; procesare 4 esantioane simultan

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

4. Modificai programul pentru a calcula suma ptratelor elementelor vectorului INPUT.


OUTPUT = INPUT 2 [i ]
i =0 15

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

S-ar putea să vă placă și