Sunteți pe pagina 1din 20

SC140 - INTRODUCERE

† Procesorul de semnal StarCore 140, produs al


firmei Freescale, prezintă un nou tip de
arhitectură, cu un plus de putere de calcul.
† SC140 poate fi implementat pe o gamă largă
de configuraţii SoC (System On Chip).
3.1 PREZENTARE GENERALĂ † Pe un singur chip pot fi integrate, în funcţie de
necesităţi, zone de memorie suplimentare, dar
şi o gamă variată de porturi de I/O sau alte
periferice.

2 3

SC140 - INTRODUCERE SC140 – CARACTERISTICI


Level-1 Memory Expansion Area
† frecvenţa de ceas a nucleului este
System
Unified Data and Program Memory Expansion Area
„ 300 MHz la 1,5V şi
ROM, RAM

Star*Core 140 DSP Core External Memory „ 120 MHz la 0,9V;


Interface
DSP Engine
DMA
† până la 1200 Milioane operaţii MAC pe secundă
True 16-bit instruction set
Variable Length Execution Set (VLESTM ) Model
CACHE
(1.2 GMACS);
Interrupt Ctrl. † până la 3000 RISC MIPS (MAC se consideră ca
4 Arithmetic 2 Address
& Logic Units Arithmetic Units Level-2 Memory 2 instrucţiuni RISC);
Expansion

Peripheral and Accelerators Expansion Area


Standard Input/Output Peripherals
Application Specific Accelerators
General Purpose Programmable Accelerator

„ Schema bloc a unei configuraţii tipice SoC (System On Chip)


4 5
SC140 – CARACTERISTICI SC140 – CARACTERISTICI
† 4 unităţi aritmetico-logice (ALU) care includ † 2 unităţi de adresare
circuite dedicate de înmulţire şi adunare şi „ Pot realiza operaţii aritmetice cu numere întregi
unităţi de operare pe bit; „ Moduri de adresare specifice procesoarelor de
„ 16 registre generale de date pe 40 biţi pentru semnal;
operaţii cu numere întregi şi fracţionare; „ 16 Registre de adresă pe 32 biţi, dintre care 8 pot
fi folosite ca adrese de bază;
† fiecare ALU conţine
„ 4 Registre de offset pentru adrese şi
„ un circuit MAC (Multiply and ACcumulate) şi
„ 4 Registre pentru adresare circulară;
„ un shifter (structură de deplasare) care pot lucra cu
orice registru de date de 40 biţi;

6 7

SC140 – CARACTERISTICI SC140 – CARACTERISTICI


† suport hardware pentru tipurile de date întreg † Set de instrucţiuni ortogonal
şi fracţionar; „ instrucţiuni codate pe 16 biţi;

† memoria poate fi accesată în cuvinte cu „ Fiecare instrucţiune codifică o operaţie elementară;

dimensiune variabilă (1 până la 4 octeţi); † Model de execuţie Variable Length Execution


† memorie comună de program şi de date Set (VLES)
„ magistrale de program: PAB, PDB „ instrucţiunile sunt grupate astfel încât să se obţină o
performanţă maximă în utilizarea procesorului
„ 2 magistrale de date: XABA, XDBA XABB, XDBB;
„ până la 6 instrucţiuni pot fi executate intr-un singur
ciclu de ceas.
† circuit dedicat pentru controlul execuţiei
programului - PSEQ (Program SEQuencer Unit)
8 9
SC140 – SCHEMA BLOC A NUCLEULUI SC140 – SCHEMA BLOC A NUCLEULUI
move.w #$100,r0

Spaţiul unificat de memorie pentru MEMORIE move.w #$200,r1


date şi program $200

16 16 16 16 move.4f (r0)+,d0:d1:d2:d3
$100

XDBA
XABA

XABB

XDBB
PDB

PAB

64 64 move.4f (r1)+,d4:d5:d6:d7
128 32 32 32
128

XABB
XABA
loopstart0
64 64 [ mac d0,d4,d8 mac d1,d5,d9

XDBB

XDBA
Registre
mac d2,d6,d10 mac d3,d7,d11
Secvenţiator Setul de registre pentru Registre ALU OnCE Accelerator Registre date move.4f (r0)+,d0:d1:d2:d3
de Program Generarea Adreselor pentru date pentru setul de adresa D15
D0
Controlul instrucţiuni R0=$100
R0 D1
ALU1 move.4f (r1)+,d4:d5:d6:d7 ]
Puterii R1=$200 D2 loopend0

D3 ALU2
StarCore 140 Generatorul R7 [ add d8,d9,d0 add d10,d11,d1 ]
de ceas
D4
2 AAU BMU 4 ALU 24 D5 add d0,d1,d0
PLL D6 ALU3 move.f d0,($400)
Instruction Bus 128 AAU D7

D15
ALU4
10 11

SC140 – FORMATUL DATELOR


† Reprezentarea datelor se face în complement
faţă de 2:
„ numere fracţionare cu semn
„ numere întregi
† cu semn
† fără semn
3.2 UNITATEA ARITMETICĂ ŞI
† Precizia de reprezentare poate fi
LOGICĂ PENTRU DATE
„ simplă: 1 word = 16 biţi
„ dublă: 2 words = 32 biţi

12 13
SC140 – FORMATUL DATELOR SC140 – FORMATUL DATELOR
† numere fracţionare cu semn: † numere întregi cu semn:
„ pe 16 biţi: „ pe 16 biţi:
-20 2–1 2–2 2–14 2–15 -215 214 213 21 20
s. fracţie s întreg .
15 14 13 • • • 1 0 15 14 13 • • • 1 0

† domeniu de valori: -1:2-15:1-2-15 † domeniu de valori: -215:1:215-1


„ pe 32 biţi: „ pe 32 biţi:
-20 2–1 2–2 2–30 2–31 -231 230 229 21 20
s. fracţie s întreg .
31 30 29 • • • 1 0 31 30 29 • • • 1 0

† domeniu de valori: -1:2-31:1-2-31 † domeniu de valori: -231:1:231-1

14 15

SC140 – FORMATUL DATELOR ARHITECTURA ALU


† numere întregi fără semn: Magistrala de date 1 (XDBA)
Magistrala de date 2 (XDBB)
„ pe 16 biţi:
215 214 213 21 20 64 64

întreg . scalare / limitare (8)


15 14 13 • • • 1 0 64 64

† domeniu de valori: 0:1:216-1 40 40 40 40 40 40 40 40

„ pe 32 biţi:
Set de Registre de date (16)
231 230 229 21 20
întreg . 40 40 40 40 40 40 40 40 40 40 40 40

31 30 29 • • • 1 0
ALU ALU ALU ALU
† domeniu de valori: 0:1:232-1

16 17
REGISTRELE ALU REGISTRELE DE DATE: D0 – D15
LIMIT EXT HP LP
L0 D0.e D0.h D0.l D0
† numere întregi cu semn (pe 40 biţi):
L1 D1.e D1.h D1.l D1
L2 D2
L3 D3
-239 ••• 232 231 • • • 216 215 • • • 20
L4 D4 Dn.e Dn.h Dn.l .
L5 D5
39 ••• 32 31 • • • 16 15 • • • 0
L6 D6
L7 D7
L8 D8 „ domeniu de valori: -239:1:239-1
L9 D9
L10 D10
L11 D11
L12 D12
L13 D13
L14 D14
L15 D15.e D15.h D15.l D15
39 32 31 16 15 0
1bit 40 biţi

18 19

REGISTRELE DE DATE: D0 – D15 REGISTRELE DE DATE: D0 – D15


† numere raţionale cu semn (pe 40 biţi): † Pot fi folosite în instrucţiuni ca:
„ operanzi sursa
-28 27 • • • 21 20 2-1 • • • 2-15 2-16 • • • 2-31 „ operanzi destinaţie
Dn.e . Dn.h Dn.l „ acumulatori
39 38 ••• 32 31 30 • • • 16 15 • • • 0 „ buffer de intrare între XDBA sau XDBB si ALU
← ÎNTREG → ← FRACŢIE → † Pot fi accesate pentru transferul cu memoria a unui:
„ cuvânt lung: operanzi de 32 biţi
„ domeniu de valori: -256:2-31:256-2-31 „ cuvânt scurt: operanzi de 16 biţi
„ byte: operanzi de 8 biţi
† Pot apărea operaţii precum:
„ limitare (saturare) şi
„ extindere automata de semn

20 21
TRANSFERUL DATELOR TRANSFERUL DATELOR
DIN MEMORIE ÎN REGISTRELE DE DATE DIN MEMORIE ÎN REGISTRELE DE DATE

† Întreg pe 16 biţi în memorie: † Fracţie pe 16 biţi în memorie:


-215 214 20 -20 2-1 2-15
MOVE.W (Rn),Dn s întreg . s. fracţie MOVE.F (Rn),Dn

-239 232 231 216 215 214 20 -28 21 20 2-1 2-15 2-16 2-31
s • • • s • • • s s întreg . s • • • s. fracţie 0 0 • • • 0
Dn.e Dn.h Dn.l Dn.e Dn.h Dn.l

† Reprezentarea în registrele de date (D0 – D15) † Reprezentarea în registrele de date (D0 – D15)
pe 40 de biţi (cu extensie de semn) pe 40 de biţi (cu extensie de semn şi
completare cu zerouri în LP)
22 23

TRANSFERUL DATELOR
DIN REGISTRELE DE DATE ÎN MEMORIE LIMITAREA
† La transferul datelor din registrele D0 – D15 † fără limitare: MOVE.F Dn,(Rn)
spre magistrale de date XDBA sau XDBB prin
-28 21 20 . 2-1 2-2 2-15 2-16 2-31 Rezultatul în registru
unitatea de scalare/limitare se poate face: 1 0 • • • 0 1.0 0 • • • 0 0 0 • • • 0 = 1.0
„ limitare (prin saturare) a datelor; Ln Dn.e Dn.h Dn.l

„ scalare
† prin înmulţire – datele sunt shiftate cu un bit la stânga -20.2-1 2-2 2-15 Rezultatul în memorie

† prin împărţire – datele sunt shiftate cu un bit la dreapta 1.0 0 • • • 0 = –1.0 |Eroare| = 2.0

„ datele nu sunt scalate/limitate.


„ valoarea scrisă în memorie ca fracţie pe 16 biţi are
MSB =1 ceea ce corespunde numărului negativ -1.

24 25
LIMITAREA LIMITAREA
† cu limitare: MOVES.F Dn,(Rn) † este activată numai pentru instrucţiunile
MOVES.F, MOVES.2F, MOVES.4F, MOVES.L;
-28 21 20 . 2-1 2-2 2-15 2-16 2-31 Rezultatul în registru

1 0 • • • 0 1.0 0 • • • 0 0 0 • • • 0 = 1.0
† se desfăşoară în doi paşi:
Ln Dn.e Dn.h Dn.l „ în primul pas este calculat bitul Ln atunci când
registrul Dn este scris de către o operaţie ce a avut
-20.2-1 2-2 2-15 Rezultatul în memorie loc în ALU
0.1 1 • • • 1 = +0.99..9 |Eroare| = 0.00..1 „ în al doilea pas are loc limitarea datelor la transferul
pe magistrală, dacă bitul Ln este setat.

„ se limitează rezultatul la valoarea maximă pozitiv㠆 Calcularea bitului Ln:


(sau minimă negativă) care poate fi reprezentată în „ dacă biţii din zona de extensie de semn nu sunt toţi 0
memorie pentru o fracţie pe 16 biţi sau toţi numai 1 bitul Ln va fi setat.

26 27

LIMITAREA - EXEMPLU SCALAREA


† Modul de scalare se setează prin intermediul
Instrucţiune Rezultat Observaţii
biţilor S0 şi S1 din registrul de stare al
move.w #$0020,r0 r0 $0000 0030 adresa dest. procesorului SC140 (SR – Status Registrer).
moveu.w #$7fff,d0.h d0 $7fff 0000 valoarea max. † Scalarea afectează numai datele transferate în
moveu.w #$7fff,d1.h d1 $7fff 0000 pozitivă memorie, nu şi datele din registre.
add d0,d1,d3 d3 $1:00 fffe 0000 apare depăşire, † Scalarea afectează modul de calcul al bitului de
bitul L3 e setat limitare Ln şi nu se poate folosi atunci când
($0030) fără limitare
move.f d3,(r0)+ $fffe
este utilizată aritmetica cu saturaţie.
($0032) cu limitare
moves.f d3,(r0) $7fff
† este activată numai pentru instrucţiunile
MOVES.F, MOVES.2F, MOVES.4F, MOVES.L;

28 29
SCALAREA SCALAREA - EXEMPLU

Instrucţiune Rezultat Observaţii


S1 S0 Modul de scalare r0 $0000 0030
move.w #$0030,r0
d0 $0200 0000
0 0 Fără scalare moveu.w #$0200,d0.h

0 1 Scalare în jos bmset #$10,sr.l sr $0000 0010 setare mod de


(împărţire cu 2) scalare în jos
moves.f d0,(r0)+ ($0030) $0100 împărţire cu 2
1 0 Scalare în sus
sr $00e4 0020 setare mod de
(înmulţire cu 2) move.l #$00e40020,sr
scalare in sus
moves.f d0,(r0) ($0032) $0400 înmulţire cu 2

30 31

UNITATEA DE ÎNMULŢIRE ŞI ACUMULARE UNITATEA DE ÎNMULŢIRE ŞI ACUMULARE


† Multiply and Accumulate (MAC) † Adunarea şi scăderea se fac similar pentru
„ conţine un multiplicator, un sumator, precum şi alte operanzi întregi sau fracţionari
circuite aritmetice pentru realizarea rotunjirii,
comparării, saturării sau shiftării. Adunarea
† Operanzi sursă: ADD Da,Db,Dn Da + Db → Dn
„ registre sau
„ valori imediate din corpul instrucţiunii. add d0,d1,d2
† Operandul destinaţie: D0 $00 72E3 8F2A
„ numai un registru de 40 biţi d0 – d15 D1 $00 7216 EE3C
† Ieşirea multiplicatorului (40 de biţi) poate fi L2:D2 $1:$00 E4FA 7D66
adunată la registrul destinaţie.
32 33
UNITATEA DE ÎNMULŢIRE ŞI ACUMULARE UNITATEA DE ÎNMULŢIRE ŞI ACUMULARE
† Adunarea şi scăderea se fac similar pentru † Alinierea rezultatului este diferită pentru
operanzi întregi sau fracţionari înmulţirea operanzilor întregi şi fracţionari
Înmulţire de numere întregi Înmulţire de numere fracţionare
Scăderea
SUB Da,Db,Dn Db – Da → Dn S . S . . S .
S

X Înmulţire cu semn X Înmulţire cu semn


sub d1,d0,d2
D0 $00 0000 0005 S S MSP
.. LSP . . S MSP
.. LSP 0
D1 $00 0000 0008 2N–1 biţi rezultat 2N–1 biţi rezultat
Extensia semnului Completare cu 0
L2:D2 $0:$FF FFFF FFFD
2N Biţi 2N Biţi

34 35

UNITATEA DE ÎNMULŢIRE ŞI ACUMULARE UNITATEA DE ÎNMULŢIRE ŞI ACUMULARE


† Instrucţiunile MPY, MAC, MPYR şi MACR † Instrucţiunile MPY, MAC, MPYR şi MACR
execută înmulţirea numerelor fracţionare execută înmulţirea numerelor fracţionare

Înmulţirea numerelor fracţionale Înmulţirea cu acumulare


MPY Da,Db,Dn Da.H * Db.H → Dn MAC ±Da,Db,Dn Dn ± (Da.H*Db.H) → Dn

0.010 $2000 1/4 0.001 $1000


mpy d4,d5,d6 mac d4,d5,d6
x 1.100 $C000 –1/2 x 0.011 $3000
D4 $FF C000 0000 D4 $00 1000 0000
1.111 $F000 –1/8 0.0000110 $0600
D5 $00 2000 0000 D5 $00 3000 0000
+0.1000000 $4000
L6:D6 $0:$FF F000 0000 L6:D6 $0:$00 4000 0000 $0:$00 4600 0000
0.1000110 $4600

36 37
UNITATEA DE ÎNMULŢIRE ŞI ACUMULARE ROTUNJIREA
† Instrucţiunile IMPY şi IMAC execut㠆 Se face în cazul instrucţiunilor RND, ADR,
înmulţirea numerelor întregi SBR, MPYR, MACR.
† Valoarea fracţionară de dublă precizie este
Înmulţirea numerelor întregi
rotunjită la precizie simplă (pe 16 biţi) şi scris
IMPY Da,Db,Dn Da.L * Db.L → Dn
în Dn.H.
514 $0202 † Există două tipuri de rotunjire:
impy d3,d4,d0
x -2 x $FFFE „ Rotunjire convergentă
D3 $00 0000 0202
„ Rotunjire în complement faţă de 2
D4 $FF FFFF FFFE -1029 $FBFC
L0:D0 $0:$FF FFFF FBFC † Diferenţa între cele două moduri constă în cum
se rotunjeşte ½ LSB.

38 39

SATURAREA ARITMETICĂ SATURAREA ARITMETICĂ - EXEMPLU


† Rezultatul scris în urma unei instrucţiuni ALU
Instrucţiune Rezultat Observaţii
este limitat la 32 de biţi (nu se permite
reprezentarea cu depăşire în Dn.E). bmset #$0004,sr.l SR $00e4 0004 setare saturare

† Modul de lucru cu saturare aritmetică este moveu.w #$7fff,d0.h d0 $7fff 0000 val. max. pozitivă

setat prin bitul SM din Status Register (SR). moveu.w #$7fff,d1.h d1 $7fff 0000 val. max. pozitivă

add d0,d1,d3 d3 $0:00:7fff ffff apare depăşire Æ


rezultat saturat
emr $0000 0004 bitul de depăşire

40 41
UNITATEA LOGICĂ UNITATEA LOGICĂ - INSTRUCŢIUNI
† Bit Field Unit (BFU) Instrucţiune Descriere
„ contine un shifter paralel bidirectional (40 de biţi) o AND Logical AND
unitate de mascare şi o unitate logică. ASLL Multi-bit arithmetic shift left
† Folosit pentru: ASLW Word arithmetic shift left (16-bit shift)

„ Deplasare multi-bit stînga/dreapta (aritmetică sau ASRR Multi-bit arithmetic shift right

logică) ASRW Word arithmetic shift right (16-bit shift)


CLB Count leading bits (ones or zeros)
„ Rotaţie cu un bit (stînga sau dreapta)
EOR Bit-wise exclusive OR
„ Inserare şi extragere de cîmp de biţi
EXTRACT Extract signed bit-field
„ Numărarea biţilor cei mai semnificativi (de 1 sau 0)
EXTRACTU Extract unsigned bit-field
„ Operaţii logice
INSERT Insert bit-field
„ Operaţii de extensie de semn sau de zero LSLL Multi-bit logical shift left

42 43

UNITATEA LOGICĂ - INSTRUCŢIUNI EXEMPLE

Instrucţiune Descriere † Înmulţirea numerelor † Programul optimizat


complexe
LSR Logical shift right by one bit
move.f #A_Re,d0 move.f #A_Re,d0
LSRR Multi-bit logical shift right
move.f #A_Im,d1 move.f #A_Im,d1
LSRW Word logical shift right (16-bit shift)
move.f #B_Re,d2 move.f #B_Re,d2
NOT One’s complement (inversion)
move.f #B_Im,d3 move.f #B_Im,d3
OR Bit-wise inclusive OR
ROL Rotate one bit left through the carry bit
mpy d0,d2,d4 mpy d0,d2,d4 mpy d0,d3,d5
ROR Rotate one bit right through the carry bit
mac -d1,d3,d4
SXT.B .L .W Sign extend byte, long or word
mpy d0,d3,d5 mac -d1,d3,d4 mac d1,d2,d5
ZXT.B .L .W Zero extend byte, long or word mac d1,d2,d5

44 45
ARHITECTURA AGU

3. UNITATEA DE ADRESARE
(ADDRESS GENERATING UNIT)

46 47

MODELUL DE PROGRAMARE AGU REGISTRELE AGU


31 0 31 0
R0 N0 † Rn = registru de adrese R0-R15
R1 N1
R2 N2 † Bn = registru de adrese de baza B0-B7
R3 N3
R4 † Ni = registru de offset N0-N3
R5 OFFSET REGISTERS
R6 † Mj = registru de modificare M0-M3
R7
31 0
SP (NSP, ESP)
M0 † registru de control al modificării (MCTL)
ADDRESS REGISTERS M1
31 0 M2 † 2 pointeri de stivă (NSP, ESP) dintre care doar
R8 / B0 M3
R9 / B1 MCTL unul este activ la un moment dat (SP)
R10 / B2
R11 / B3 MODIFIER and MODIFIER
R12 / B4 CONTROL REGISTERS
R13 / B5
R14 / B6
R15 / B7
ADDRESS REGISTERS / BASE ADDRESS REGISTERS 48 49
TRANSFERUL PE MAGISTRALELE DE DATE TRANSFERUL PE MAGISTRALELE DE DATE
† Instrucţiunile MOVE pot transfera date
XABA 32
reprezentate pe:
XDBA
„ byte (8 biţi),
64 Memoria
Nucleul „ word (16 biţi),
32 comună
SC140 XABB
(date/program) „ long word (32 biţi),
XDBB
„ double-long word sau four-word (64 biţi).
64
† Suffixul de după instrucţiunea MOVE semnifică:
„ B = Byte
† Transferurile între memorie şi nucleu se pot
„ W = Întreg (word) pe 16 biţi
face pe două magistrale de date de 64 biţi.
„ L = Întreg lung (double word) pe 32 biţi
† Memoria este adresabilă la nivel de byte.
„ F = Fracţionar pe 16 biţi
50 51

TRANSFERUL PE MAGISTRALELE DE DATE TRANSFERUL PE MAGISTRALELE DE DATE

63 8biţi 0
† Datele trebuie să fie aliniate în memorie la
$0 MOVE.B ($4),D0
$8
adrese multiplu (în octeţi) de lăţimea
$10 MOVE.W ($16),D0 magistralei folosită pentru transfer.
$18 MOVE.2W (R0),D0:D1 ;R0=$18
Å 8 octeţi Æ
$20 MOVE.4W (R0),D0:D1:D2:D3
$0 MOVE.W ($0),D0
$28 ;R0=$20
$0 MOVE.W ($1),D0 ; greşit
$30 MOVE.L ($34),D0
$38 MOVE.2L (R0),D0:D1 ;R0=$38
R0=$10
Å 64 biţi Æ $10 MOVE.2W (R0),D0:D1

$10 MOVE.2W (R0+2),D0:D1 ; greşit


† MOVE.F accesează memoria la fel ca MOVE.W
52 53
UNITĂŢILE DE CALCUL A ADRESELOR UNITĂŢILE DE CALCUL A ADRESELOR
† Cele 2 unităţi AAU sunt identice. † Un sumator modulo poate efectua aceleaşi
† Fiecare conţine un sumator pe 32 biţi numit şi operaţii ca sumatorul precedent dar modulo M
sumator offset ce poate executa următoarele sau –M, unde M este stocat în registrul de
operaţii: modificare M0–M3 selectat.
„ Adună sau scade două registre AGU, † Rezultatul este comparat cu adresa de bază
„ Adună o valoare imediată, stocată în registrul de bază Bn astfel ca adresa
„ Incrementează sau decrementează un registru AGU, să rămână într-un buffer de lungime M.
„ Adună cu reverse-carry.

54 55

MODURI DE ADRESARE ADRESARE DIRECTĂ


† SC140 poate realiza 4 tipuri de moduri de
‰ cu registru de date mac d4,d5,d6
adresare:
sau de control
„ Adresare directă cu registru
‰ cu registru de adrese addl1a r0,r1
„ Adresare indirectă
„ Adresare relativă la PC
„ Alte moduri speciale

56 57
ADRESARE INDIRECTĂ CU REGISTRU ADRESARE INDIRECTĂ CU REGISTRU

‰ fără modificare (Rn) move.w #$004f,(r4) ‰ cu deplasament (Rn+xx) move.l d4,(r3+$1c)

‰ cu post-incrementare (Rn)+ move.f (r3)+,d2 ‰ deplasament faţă de (SP+xx) move.w #$ffff,(sp–$3e)


stivă SP
‰ cu post-decrementare (Rn)- move.l (r3)-,d2

‰ post-incrementare cu (Rn)+Ni move.w d3,(r2)+n3


offset
‰ indexare cu offset (Rn+Ni) move.b d6,(r3+n0)

‰ indexare cu registru (Rn+Rm) move.l (r0+r2)


de adresă

58 59

ADRESARE RELATIVĂ LA PC MODURILE DE MODIFICARE A ADRESEI


† Registrul de control MCTL
‰ salt în program relativ la bra _label2
instrucţiunea curentă
31 28 27 24 23 20 19 16
R7 AM[3:0] R6 AM[3:0] R5 AM[3:0] R4 AM[3:0]

MODURI SPECIALE DE ADRESARE


15 12 11 8 7 4 3 0
‰ adresare imediată doen2 #$40
R3 AM[3:0] R2 AM[3:0] R1 AM[3:0] R0 AM[3:0]
move.l #$f00d0d01,n0

† Se pot seta moduri de calcul a adresei numai


‰ adresare absolută move.w ($8),d0
move.w ($34008a20),d0 pentru primele 8 registre de adresă R0-R7.
Celelalte 8 registre R8-R15 pot fi folosite doar
pentru modificare liniară.
60 61
MODURILE DE MODIFICARE A ADRESEI
† Semnificaţia biţilor AM
AM3 AM2 AM1 AM0 Modul de modificare al adresei
0 0 0 0 Modificare liniară
0 0 0 1 Modificare cu transport invers (bit-reverse)
1 0 0 0 Modificare modulo – se foloseşte M0
1 0 0 1 Modificare modulo – se foloseşte M1
4. UNITATEA DE CONTROL AL
1 0 1 0 Modificare modulo – se foloseşte M2
1 0 1 1 Modificare modulo – se foloseşte M3 EXECUŢIEI PROGRAMULUI
1 1 0 0 Modificare modulo multiplă – M0
1 1 0 1 Modificare modulo multiplă – M1
1 1 1 0 Modificare modulo multiplă – M2
1 1 1 1 Modificare modulo multiplă – M3
62 63

MODELUL DE PROGRAMARE REGISTRUL DE STARE (SR)

31 0 31 0 31 0 31 30-27 26-24 23-21 20 19 18 17-12 11-8 7 6 5 4 3 2 10


PC SR EMR SLF LF[3:0] Rsvd I[2:0] OVE DI EXP Rsvd VF[3:0] Rsvd S S1 S0 RM AS T C

PROGRAM COUNTER STATUS REGISTER EXCEPTION AND MODE SLF - Short Loop Flag
REGISTER LF[3:0] - Loop Flags
I[2:0] - Interrupt Mask
31 0 31 0 OVE - Overflow Exception Enable
SA0 LC0 DI - Disable Interrupts
EXP - Exception Mode bit
SA1 LC1 VF[3:0] - Viterbi Flags
SA2 LC2 S - Scaling Bit
SA3 LC3 S1, S0 - Scaling Mode Bits
RM - Rounding Mode
START ADDRESS REGISTERS LOOP COUNTER REGISTERS AS -Arithmetic Saturation Mode
T - True Bit
C - Carry Bit
*Rsvd - Reserved (derivative dependant)
64 65
REGISTRUL DE EXCEPŢII ŞI MOD (EMR) ETAPELE DE EXECUŢIE PIPELINE

31-24 23-17 16 15-4 3 2 1 0 PROGRAM


Reserved GP[6:0] BEM Reserved NMID DOVF ILST ILN PRE-FETCH
PROGRAM
FETCH
GP - General Purpose Flags
BEM - Big Endian Memory DISPATCH
NMID - NMI Disable & DECODE
DOVF - DALU overflow ADDRESS
ILST - Illegal Execution Set GENERATION
ILN - Illegal Instruction
„ Lungime pipeline mică EXECUTE
„ Fără întârzieri aritmetice
„ Timp scurt pentru salturi

66 67

ETAPELE DE EXECUŢIE PIPELINE ETAPELE DE EXECUŢIE PIPELINE


Pre-fetch ƒ Se generează adresa pentru citirea din memoria de
Etapă Ciclu instructiune program
pipeline 1 2 3 4 5 6 7 8 ƒ Se actualizează fetch counter (FC)
Pre-fetch i1 i2 i3 i4 Fetch ƒ Se citesc opt cuvinte din memorie (fetch set)

Fetch i1 i2 i3 i4 Dispatch ƒ Se extrag instrucţiunile pentru execuţie


ƒ Se decodifică instrucţiunile AGU
Decode i1 i2 i3 i4
Generare ƒ Se decodifică instrucţiunile DALU
Address adrese ƒ Se generează adresele pentru transferul datelor
i1 i2 i3 i4
Generation
ƒ Se calculează noile valori pentru registrele de adresă
Execution i1 i2 i3 i4
Execuţie ƒ Se citesc operanzii sursă (pentru DALU sau memorie)
ƒ Se execută operaţiile aritmetice (înmulţire si adunare)
ƒ Se scriu rezultatele în registrele destinaţie

68 69
FETCH SET –> SET DE EXECUŢIE FETCH SET –> SET DE EXECUŢIE
Program Memory Data Bus - PDB
Spaţiul Unificat de memorie
Date/Program † Instruction Fetch Set
(8 cuvinte)

Adresa pe 32-biţi PAB 32 128 PDB 128-bit Fetch Set


Eight-word Fetch Set Instr Instr Instr Instr Instr Instr Instr Instr
#N #N+1 #N+2 #N+3 #N+4 #N+5 #N+6 #N+7

Nucleu SC140
† Set de execuţie de VLES (Variable Length
lungime variabilă Execution Set)
† La fiecare ciclu de ceas se citeşte din memorie un set de
8 instrucţiuni de 16 biţi – fetch set.
Instr Instr Instr Instr Instr Instr Instr Instr
† Unitatea de control al execuţiei programului - PSEQ #N #N+1 #N+2 #N+3 #N+4 #N+5 #N+6 #N+7
(Program SEQuencer Unit) detectează câte instrucţiuni End of VLES #M-1 VLES #M Start of VLES #M+1
7 words 4 words 8 words
din cele 8 pot fi executate în paralel - set de execuţie.
70 71

GRUPAREA INSTRUCŢIUNILOR EXECUŢIA BUCLELOR


START ADDRESS REGISTERS
† SC140 conţine 4 ALU şi 2 AGU ceea ce permite † Bucla lungă
SA0 _start0
execuţia a maxim 6 instrucţiuni pe ciclu de ceas dosetup0 _start0
doen0 #$10
LOOP COUNTER REGISTERS
† Pot fi executate în paralel instrucţiuni move.w (r3)+,d1
LC0 $10
independente din punct de vedere al rezultatului skipls _end0
loopstart0 STATUS REGISTER
„ Exemplul 1:
_start0
1
macr -d0,d1,d7 and d4,d5 move.l (r0)+n0,r6 adda r2,r3 SA Æ mac d0,d1,d2 move.w (r0)+,d0
SLF LF0 LF1 LF2 LF3
add d5,d6,d4 move.w (r1)+,d5
Instr DALU Instr DALU Instr AGU Instr AGU
sub d3,d2,d4 inc d5 Å LPMARKB
mac d0,d1,d6 move.w (r0)+,d7
„ Exemplul 2:
LA Æ sub d5,d4,d4 inc d7
[ mac d0,d4,d8 mac d1,d5,d9 mac d2,d6,d10 mac d3,d7,d11 loopend0
move.4f (r0)+,d0:d1:d2:d3 move.4f (r1)+,d4:d5:d6:d7 ] _end0

72 73
EXECUŢIA BUCLELOR EXECUŢIA BUCLELOR
† Bucla scurtă (două seturi de execuţie) † Buclele pot fi intercalate una intr-alta
doensh0 #$10
...
† Intercalarea se face in ordine crescătoare astfel
loopstart0 că o buclă poate fi inclusă intr-o buclă cu
SA Æ mac d0,d1,d2 move.w (r0)+,d0 Å LPMARKB număr mai mic:
LA Æ add d5,d6,d4 move.w (r1)+,d5
loop0
loopend0
loop2
† Bucla scurtă (un singur set de execuţie)
doensh0 #$10
loop3
...
loopstart0
SA, LA Æ mac d0,d1,d2 move.w (r0)+,d0 Å LPMARKA
loopend0

74 75

STIVA STIVA

Normal mode stack:


PUSH De

De → (SP) SP
NSP SP + 8 → SP Increasing
Increasing De addresses
1 Shadow
Shadow NSP
NSP Last stacked value - 8 bytes addresses
Valid bit
Exception mode stack:
PUSH Do

Do → (SP+4) SP
ESP SP + 8 → SP Increasing
Increasing Do addresses
1 Shadow
Shadow ESP
ESP Last stacked value - 8 bytes addresses
Valid bit

76 77
STIVA STIVA
† Există instrucţiuni speciale pentru a accesa
POP De
stiva normală, inclusiv în execuţia “excepţiilor”:
„ PUSHN De
(SP - 8) → De
SP-8 → SP Increasing „ PUSHN Do
SP De
addresses
† Se poate transfera (modifica) indicatorul stivei
altul decât stiva activă (Other Stack Pointer):
POP Do „ TFRA R0,OSP
dacă SP curent este ESP, atunci OSP va fi NSP
(SP - 4) → Do
SP-8 → SP SP Increasing
Do addresses

78 79

INSTRUCŢIUNI CONDIŢIONALE INSTRUCŢIUNI CONDIŢIONALE


† Există un bit (fanion) de adevăr folosit în † Execuţia condiţionată a instrucţiunilor:
execuţia salturilor condiţionate sau a grupurilor „ IFT/IFF: se execută dacă True bit este True/False.
de instrucţiuni: „ IFA: se execută întotdeauna în paralel cu IFT/IFF.
„ BT/BF: Branch relative if True bit is True/False.
„ BTD:BFD: Branch delayed relative if True bit is
True/False.
„ JT/JF: Jump if True bit is True/False.
„ JTD/JFD: Jump delayed if True bit is True/False.

80 81

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