Vous êtes sur la page 1sur 99

Architecture d’un

processeur DSP

• Accès mémoire et
E/S
• Unités du CPU
• Pipelining
1
Architecture générale d’un processeur

Processeur

CPU
Unité de Unités de
contrôle traitement

Bus internes

Mémoire Unité de Périphériques


interne Communication et mémoire externes

2
Accès à la mémoire

3
Rappels : Bus

• Le CPU est le maître du


CPU BUS Périphérique bus
– Il est le seul à écrire sur
les bus adresse et
contrôle
• Le périphérique
adresses obtempère sur le bus
CPU
données
Périphérique données
contrôle
– Lecture: il fournit la
donnée demandée
Adresses : sélection du périphérique – Ecriture : il récupère la
et d’une donnée en son sein donnée fournie par le
CPU
Données : valeur de la donnée à échanger
– Haute impédance: il
Contrôle : lire / écrire / haute impédance se déconnecte du bus

4
Etapes d’une opération de calcul

2
1

3
CPU Mémoir
5
e

(1) Charger une (Fetch)


instruction
(2) Décoder l’instruction (Decode)
(3) Charger les opérandes (Read)
(4) Effectuer les calculs (Execute)
(5) Stocker le résultat
5
Architecture Von Neuman

Mémoire
CPU BUS Programme
+ Données

• Un seul chemin d'accès à la mémoire


• Architecture des processeurs d’usage général (Pentium,
68000)
• Goulot d'étranglement pour l'accès à la mémoire
• Pas de sécurisation matérielle du programme
– Responsabilité dévolue au système d’exploitation (logiciel)

6
Architecture Harvard

Mémoire Programme

CPU

Mémoire Données

• Séparation des mémoires programme et


données
• Moins de risque de corruption du programme
• Meilleure utilisation du CPU
– Chargement du programme et des données en
parallèle

7
Architecture Harvard modifiée

Mémoire
Mémoire Programme
Programme
+ Données
CPU
Mémoire Données

• Mémoire programme contient des


données
• Possibilité de charger 2 données en un
cycle
• Utilisation classique en TNS
– Mémoire → coefficients des filtres
Programme+Données
– Mémoire Données → échantillons d’entrée
8
Accès mémoire multi-port

Mémoire
Programme
+ Données
CPU
Mémoire Données

• Plusieurs bus de données


– Accès simultané à plusieurs données
– Nécessite une mémoire multi-accès ou multi-
blocs
• Exemple du TMS320C54xx :
– 1 bus programme (P)
– 2 bus de lecture des données (C et D)
– 1 bus d’écriture des données (E)
9
Exemple

Bus C
Mémoire Données
CPU b[0]…b[N-1]
x[0]…x[N-1]
Bus D

Pour l’opération
y[n] ← b[n] * x[n]
On souhaite récupérer b[n] et x[n]

Chaque bus est capable de transmettre 1 donnée par

cycle La limite est imposée par les capacités de la

mémoire:
- Mémoire à Simple Accès (SARAM) => 2 cycles
- Mémoire à Double Accès (DARAM) => 1 cycle
- Mémoire externe => temps de latence dépend de la qualité de la
mémoire 10
Architecture interne du CPU

11
Schéma de principe des échanges
CPU pilotag
e
Registres
Génératio Génératio et Unités
Séquenceu decalcul
n
adresses n
adresses
r
P D

programme
addr

Bus
dat
a
ctrl

addr

données
dat

Bus
a
ctrl
Mémoire P Mémoire D périphérique
s 12
Détail des unités

• Séquenceur
– Décodage des instructions
– Pilotage les autres unités
• Unité de génération d’adresse
programme
– Compteur de programme (PC)
– Gestion matérielle des boucles
• Unité de génération d’adresses données
– Adressage indirect efficace (*p++)
– Adressage circulaire, bit-reverse
• Unités de traitement
– Effectuent les calculs
– Registres pour résultats intermédiaires
13
Fetch (lecture instruction)

Génératio Génératio Unités de


Séquenceu
n
adresses n
adresses calcul
r
P D
PC
Instructio
n

programme
addr

Bus
data
ctrl

addr

données
data

Bus
ctrl

Mémoire P Mémoire D
14
Read/Write (lecture/écriture donnée)

Génératio Génératio Unités de


Séquenceu
n
adresses n
adresses calcul
r
P D
ARi Donnée

programme
addr

Bus
data
ctrl

addr

données
data

Bus
ctrl

Mémoire P Mémoire D
15
Diagramme bloc du TMS320C5416

Program/Data ROM Program/Data RAM


Mémoire
16K Words 128K Words interne
JTAG Test/
D(15-0) Emulation
Control
MUX

Bus externe Program/Data Buses


Timer
A(23-0)

MAC ALU DMA Muxed GP I/O


17 x 17 MPY 40-Bit ALU Ch 0
CMPS 8/16-bit Host Port
40-Bit Adder Interface (HPI)
Operator Ch 1
Unités (VITERBI)

Peripheral Bus
RND, SAT
Ch 2 Multichannel
de EXP Encoder Buffered Serial
Shifter Accumulators Ch 3 Port (McBSP)
calcul Multichannel
40-Bit Barrel 40-Bit ACC A
Ch 4 Buffered Serial
(-16, 31) 40-Bit ACC B Port (McBSP)
Ch 5 Multichannel
Addressing Unit Buffered Serial
Génératio Port (McBSP)
8 Auxiliary Registers PLL Clock
n Generator
2 Addressing Units
d’adresse S/W Waitstate
s Power Management Generator Entrée
s
CPU Sorties

16
Structure interne
du
TMS320C54x

Source : Texas
Instruments
TMS320C54x DSP
Reference Set
Vol 1 : CPU and
Peripherals 17
Zero overhead Adressage indirect :
looping Pré- et post-
incrémentation
automatique
Génération
d'adresses Génératio
Unité de controle programme n
d'adresse
s
données

Bus P
programme

Bus C / D
lecture
donnée
s

Bus E
écriture
donnée
s
4 bus : Accès simultané à 1 instruction + 2 opérandes + 1 59
écriture
Registre
s

ALU

Shifte
r
Viterbi
MAC

Calcul MAC en un Multiplication par 2k en un


cycle cycle 19
Pipelining

20
Pipelining

• Instructions segmentées • Exemple du TMS320C54xx


en étages : pipeline à 6 étages
• Exécution entrelacée de – Prefetch (P)
plusieurs instructions • Incrémentation du
– Chacune à une étage différent PC (Program
Counter)
• Augmentation de la – Fetch (F)
fréquence d'horloge • Lecture de l’instruction
– Etages plus simples donc en mémoire
plus rapides – Decode (D)
• Décodage de l’instruction
• Géré par le séquenceur – Access (A)
• Calcul des adresses
des opérandes
– Read (R)
• Lecture des opérandes
en mémoire
• Calcul de l’adresse du résultat
– Execute (X)
• Exécution du calcul
• Ecriture en mémoire
21
Séquentiel vs pipeline

t1 t2 t3 t4 t5 t6 t7 t8 F1
- MemP
Instruction Instruction 1 Instruction 2
Fetch F1 F2
-
D1

CPU
Decode D1 D2
Read R1 R2 R1
- MemD
Execute X1 X2

X1
- MemD
Exécution
séquentielle
t1 t2 t3 t4 t5 t6 t7 t8 F4
F5 MemP
Fetch F1 F2 F3 F4 F5 … … …

Decode D1 D2 D3 D4 D5 … … D3
D4

CPU
Read R1 R2 R3 R4 R5 …

Execute X1 X2 X3 X4 X5 R2
R3 MemD

Amorçage du
pipeline X1
X2 MemD
Exécution avec pipeline : entrelacement des
instructions 22
Retards dans le pipeline
• Le pipeline atteint son plein rendement une fois
qu’il est amorcé
• Une retard peut se produire
– en cas de rupture de séquence (vidange du pipeline)
• branchement mal prédit
• appel de sous-programme
• interruption
– s’il existe un conflit de ressources (retard ponctuel,
“bulle” dans le pipeline)
• accès à la mémoire
• utilisation des bus

23
Exemple de rupture de séquence
Code à exécuter
1:
: Instr1
2: Si B==1 Alors GOTO …
10: 10 Instr1
3: Instr3 : 0
4: Instr4 11: Instr11
5: Instr5 12: Instr1
6: Instr6 … 2

Etat du pipeline avec prédiction que B≠1


:
Si prédiction incorrecte (B=1) Si prédiction correcte (B≠1)
t1 t2 t3 t4 t5 t6 t7 t8 t1 t2 t3 t4 t5 t6 t8
F1 F2 F3 F4 F5 F10 F11 F12 F1 t7
F2 F3 F4 F5 F6 … …
F F

D D1 D2 D3 D4 ! D10 D11 D D1 D2 D3 D4 D5 D6 …

R R1 R2 R3 ! ! R10 R R1 R2 R3 R4 R5 R6

X X1 X2 ! ! ! X X1 X2 X3 X4 X5

Evaluation du prédicat (B==1) Vidange du Evaluation du prédicat (B==1)


=> rupture de séquence pipeline: Perte de => pas de rupture
24
3 cycles
Exemple de conflit d'accès mémoire

Programmes et Données dans la même mémoire à 1 accès par cycle


t1 t2 t3 t4 t5 t6 t7 t8
Fetch F1 F2 conflit conflit
F3 F4 ! !
Decode D1 D2 ! ! D3 D4

! Read R1 R2 ! ! R3
R4

Execute X1 X2 ! ! X3

Conflitpour l’accès mémoire entre Fetch et Read


Les lectures de données R1/R2 empêchent les chargements d'instruction
F3/F4
Réductions des performances d'au moins 50%

Problème réglé si
Mémoire multi-accès
Programmes et Données dans des mémoires différentes (ou multi-bloc)
8
Effets du pipeline lors du débogage

Code à exécuter Watch Window


:1: A= A La flèche indique la position du
2: 1 PC Plusieurs cycles sont
B= 1 B nécessaires
avant que la variable soit modifiée
3: C=1
1
… NOP … : Cela n’intervient qu’à l’étape X
1
Watch Window
10: A= (exécution)
C
A 11
11: 2
B= B ??
12:
2 C ?
13:
14: C=2 1
t1 t2 t3 t4 t5 t6 t7 t8
… D=2 Watch 1
F F1 F1 F1 F1 F1 … … …
E=2 A
Window 2 0 1 2 3 4
B D D10 D11 D12 D13 … …
!! D14
C ! R R10 R11 R12 R13 …
R14
1 X A=2 B=2 C=2 D=2
Watch 1 E=2

Window
A 2
B 2
C 1
26
Résumé caractéristiques des DSP

• Câblage des opérations les plus critiques


– Unités de calculs spécialisées
• Opération MAC cablée
– Modes d’adressages spécialisés
• Accès en mémoire selon des schéma prédéfinis
– Boucle matérielle
• Pas de perte de temps pour les instructions
répétées

• Gestion des entrées/sorties intégrée


– Mémoire, DMA, timers
– Interfaces série / parallèle
– Interruptions à faible latence
27
Résumé caractéristiques des DSP (2)
• Augmentation du parallélisme
– Calculs
• Unités de calcul en parallèle
– Mémoire à accès multiples
• Lecture/Écriture de plusieurs données simultanément
• Augmentation de la fréquence d’horloge
– Pipelining
• Découpage des instructions de façon à les exécuter à
intervalles plus rapprochés

28
Mesures des performances
Mesure le nombre d’opérations
Million Floating–Point arithmétiques à virgule flottante que le
MFLOPS DSP à virgule flottante peut réaliser
Operation Per
Second en une seconde

Mesure le nombre total d’opérations


Million (calcul, accès DMA, transferts, etc.) que
MOPS
Operation le DSP peut réaliser en une seconde
Per Second
Mesure le nombre de codes machine
Million (instructions) que le DSP peut réaliser
MIPS
Instructions en une seconde
Per Second Mesure le nombre d’opérations MAC
Million of (Multiply+Accumulate) que le DSP peut
MMACS réaliser en une seconde
MAC per
Second
Mesure la bande passante d’un bus
Mega-Bytes particulier ou d’un dispositif d’E/S
MBPS
Per
Second

29
Performances pour une application
(benchmarking)
• Pour avoir une idée des performances concrètes des DSP,
seul reste le benchmarking
• Benchmarks effectués par des sociétés de conseil telles que
– Berkeley Design Technology Inc. (www.bdti.com)
– Embedded Microproc. Benchmark Consortium (www.eembc.org)
• Spécifications générales des benchmarks:
– SPEC95: couvre plusieurs domaines tels que les vocodeurs,
les modems,
les applications multimédia

Algorithme Standard
de Traitement du Signal

Temps d’exécution
Consommation
électrique

30
Architecture d’un
DSP 2171
• Architecture Générale
• UAL
• MAC
• Décaleur à Barillet
• Séquenceur
• Interruption
• Générateur d’adresse 31
Architecture générale d’un DSP 2171

32
Architecture générale d’un DSP 2171
Il s'agit d’un DSP à virgule fixe, dont les données sont sur 16 bits. Les nombres sont soit
entiers positifs (sans signe), soit en format 1.15. Pour ce format, le bit de poids fort
représente le signe et les 15 bits restants correspondent à un nombre décimal de module
inférieur ou égal à l’unité. Si ce nombre est négatif il sera en complément à 2.

Le bus de données de la mémoire programme (PMD bus) est sur 24 bits, le bus de
données de la mémoire de données (DMD) a une largeur de 16 bits, alors que les bus
d'adresses de la mémoire de données (DMA) ou de la mémoire de programme (PMA) sont
sur 14 bits.

La famille ADSP21xx comporte un noyau DSP composé:


− d'une unité arithmétique et logique (ALU) pouvant être chargée par deux sous-registres,
de 16 bits : AX0 ou AXI, pour l'entrée X, et AY0 ou AYI pour l'entrée Y Les sous registres
jouent des rôles équivalents vis-à-vis de l’ALU. Le résultat des opérations de l'ALU va dans
le registre AR, relié au bus résultat R-bus, et au bus de données DMD de 16 bits. Les
résultats ainsi obtenus vont pouvoir être accessibles par d'autres unités de calcul en
utilisant ces bus. Cette unité de calcul est également prévue pour effectuer des divisions
numériques ;
33
Architecture générale d’un DSP 2171
La famille ADSP21xx comporte un noyau DSP composé:
− d'une unité arithmétique et logique (ALU)
- d’une unité de multiplication et d’accumulation (MAC) pouvant être chargée par deux
sous-registres de 16 bits: MX0 ou MX1, pour X, et MY0 ou MY1 pour Y. Comme
précédemment, les sous-registres jouent des rôles équivalents vis-à-vis du MAC. Le
résultat des opérations de multiplication et d'accumulation vont dans le registre MR relié
au bus résultat R-bus, composé de trois sous-registres, deux de 16 bits MR1 pour les poids
forts et MR0 pour les poids faibles (en double précision), et un de 8 bits MR2 pour
l'expression du signe étendu qui permet de gérer les dépassements et les signes du
résultat. Par multiplexage, le registre MR a accès au bus de données DMD de 16 bits et au
bus résultat R-bus. Comme pour l'ALU, il peut communiquer avec les autres unités de
calcul de deux manières : le R-bus et le bus DMD ;
− d’une unité de décalage à barillet ou décaleur (Barrel Shifter). Cette unité est chargée
soit par le bus résultat R-bus, soit par un registre (noté SI par le constructeur) de 16 bits.
Les opérations consistent à décaler à droite ou à gauche pour diviser ou multiplier par
deux les données, en effectuant éventuellement un « ou logique » avec la donnée avant
décalage. En utilisant le « ou exclusif » de l'ALU, il permet de générer des séquences
pseudo-aléatoires, très pratiques en traitement ou transmission du signal. D'autre part le
détecteur d'exposant utilise le registre (noté SE par le constructeur) comme
enregistrement de la puissance de 2, correspondant à un décalage. C'est l'opération34de
Architecture générale d’un DSP 2171
La famille ADSP21xx comporte un noyau DSP composé:
− d'une unité arithmétique et logique (ALU)
- d’une unité de multiplication et d’accumulation (MAC)
− d’une unité de décalage à barillet ou décaleur (Barrel Shifter)
− de deux générateurs d’adresses (DAG : Data Address Generator) comportant chacun 12
registres indépendants sur 14 bits, dont quatre pour les pointeurs (I), I0 à I3 pour DAG1 et
I4 à I7 pour DAG2, et d'autre part 4 registres (M pour chaque générateur pour modifier
les pointeurs et 4 autres registres (L) pour définir les buffers circulaires bitreverse.
Le générateur DAG1 adresse seulement la mémoire de données et peut fonctionner en
bit-reverse pour les calculs en FFT. Le générateur DAG2 adresse les deux types de
mémoire, et peut fonctionner en branchements indirects (Jump et Call). Par exemple AX0
= DM(I0,M0) est une lecture indirecte chargée dans AX0 d'une donnée située en mémoire
de données, dont l'adresse est pointée par I0. La valeur suivante (pointée par I0), sera I0
(précédent) + M0. Par contre, Jump (I4) est un saut indirect;
− d'un séquenceur de programme contrôlant les sous-programmes, les boucles et les
interruptions. Quatre niveaux de boucle sont possibles. Les boucles sont contrôlées par le
registre CNTR. Le nombre placé dans ce registre indique le nombre de boucles prévues. À
chaque Reset, les interruptions sont automatiquement validées, il est donc important de
bien configurer le registre IMASK dans le programme. Les registres d’état SSTAT, ASTAT et
MSTAT sont accessibles par les instructions assembleur ENA ou DIS. 35
Architecture générale d’un DSP 2171
La famille ADSP21xx comporte un noyau DSP composé:
− d'une unité arithmétique et logique (ALU)
- d’une unité de multiplication et d’accumulation (MAC)
− d’une unité de décalage à barillet ou décaleur (Barrel Shifter)
− de deux générateurs d’adresses (DAG : Data Address Generator)
− d'un séquenceur de programme
− des registres d'entrée et de sortie des unités de calcul (ALU, MAC, ou décaleur) sont
dédoublés, ce qui permet une utilisation plus souple du processeur en cas d'exécution
d'un sous-programme. Chaque ensemble dédoublé de ces registres est déterminé par un
bit d'état dans le registre MSTAT. On utilise soit l'ensemble primaire (par défaut, bit
d'état = 0), soit le secondaire (bit d'état = 1). Un seul fonctionne à la fois ;
− des registres de transfert de données. Le registre PX reçoit ou fournit les 8 bits de poids
faible lors du transfert de données entre le bus DMD (16 bits) et le bus PMD (24 bits).
Les autres registres utilisables pour transférer les données sont les registres AY0 ou AY1
de AY, ou bien MY0 ou MY1 de MY, qui permettent le passage des 16 bits de poids fort
du bus de données PMD de la mémoire de programme vers le bus de données DMD de
la mémoire de données.
− un timer qui peut être considéré comme un périphérique car il n’est pas indispensable
au fonctionnement du DSP. Son rôle est de provoquer des interruptions dans le
programme selon une période Tint qui est toujours un multiple de la période interne du
processeur. Ce facteur de multiplication dépend des registres de contrôle du Timer ; 36
Architecture générale d’un DSP 2171
La famille ADSP21xx comporte un noyau DSP composé:
− d'une unité arithmétique et logique (ALU)
- d’une unité de multiplication et d’accumulation (MAC)
− d’une unité de décalage à barillet ou décaleur (Barrel Shifter)
− de deux générateurs d’adresses (DAG : Data Address Generator)
− d'un séquenceur de programme
− des registres d'entrée et de sortie des unités de calcul
− des registres de transfert de données.
− un timer
- un générateur d’adresse de démarrage (Boot Address Generator) permettant grâce aux
pins d’entrées complémentaires MMAP et BMODE ainsi qu’au registre de contrôle
MEMWAIT (15 : ROM ENABLE) le démarrage direct d’un programme d’application en
EEPROM externe ou le moniteur en ROM interne.
− un contrôleur d’état de consommation (Power Down Control Logic) permettant de
mettre le DSP en veille, c’est-à-dire dans un état de très base consommation. Le contrôle
de l’état de consommation peut se faire par hardware (entrée : PWD, sortie : PWDACK) ou
par software (registre ; SPORT1(15,14,13,12)).
− Deux ports sériels synchrones (Serial Ports 0 et 1) permettant la transmission sérielle
d’information. Le moniteur résident en ROM interne au DSP utilise les ports sériels durant
la phase d’enclenchement (Power Up), Le port SPORT1 est utilisé pour le chargement d’un
programme d’application par l’intermédiaire du debugger (via un PC).
Le port SPORT0 est utilisé pour le chargement d’un programme d’application résident 37
Comportement d’un DSP 2171
- mise sous tension (enclenchement des alimentations) ;
− comportement du reset ;
− fréquence de l’horloge de base (composants externes) ;
− mise en veille basse consommation.
Un mauvais fonctionnement de l’un de ces points peut avoir un effet catastrophique sur le
comportement du système quel que soit le type de circuit (FPGA, microcontrôleur DSP, …).

Horloge de base du DSP


L’horloge de base du DSP est choisie en fonction de plusieurs critères. La vitesse
d’exécution (MIPS) est directement proportionnelle à la fréquence de l’horloge. Les
temps d’accès des composants externes comme les mémoires, et les périphériques
peuvent également limiter la fréquence de l’horloge. Une autre contrainte importante est
imposée par les UARTs utilisés pour la transmission sérielle. En effet pour avoir des
vitesses (bauds rate) de transmission standard (1200Bd/s, 2400Bd/s, …9600Bd/s,
…115200Bd/s), la fréquence de l’horloge est divisée par des grandeurs entières.
Baud rate = CLK/SCLKDIV+1
Avec CLK, fréquence de l’horloge de base et SCLKDIV valeur de division (grandeur entière).

38
Comportement d’un DSP 2171
- mise sous tension (enclenchement des alimentations) ;
− comportement du reset ;
− fréquence de l’horloge de base (composants externes) ;
− mise en veille basse consommation.
Un mauvais fonctionnement de l’un de ces points peut avoir un effet catastrophique sur le
comportement du système quel que soit le type de circuit (FPGA, microcontrôleur DSP, …).

Horloge de base du DSP


L’horloge de base du DSP est choisie en fonction de plusieurs critères. La vitesse
d’exécution (MIPS) est directement proportionnelle à la fréquence de l’horloge. Les temps
d’accès des composants externes comme les mémoires, et les périphériques peuvent
également limiter la fréquence de l’horloge. Une autre contrainte importante est imposée
par les UARTs utilisés pour la transmission sérielle. En effet pour avoir des vitesses (bauds
rate) de transmission standard (1200Bd/s, 2400Bd/s, …9600Bd/s, …115200Bd/s), la
fréquence de l’horloge est divisée par des grandeurs entières.
Baud rate = CLK/SCLKDIV+1
Avec CLK, fréquence de l’horloge de base et SCLKDIV valeur de division (grandeur entière).

39
UAL d’un DSP 2171

40
UAL d’un DSP 2171
Structure
L’ALU est constitué de deux ports d’entrées X et Y de 16 bits de largeur. Le
port de sortie R de 16 bits également correspond au résultat. Pour les calculs
en multiprécision, l’ALU accepte une entrée supplémentaire de retenue
nommée CI (Carry Input). Cette entrée est issue du registre d’état
arithmétique ASTAT. −

Le port d’entrée X de l’ALU accepte des données (16 bits) de deux sources,
soit du double registre AX (AX0 ou AX1) ou des registres liées au bus résultat
R-Bus. Ces registres peuvent être utilisés directement comme opérandes. Les
deux registres contenus dans AX peuvent être lus ou écrits depuis le bus
DMD. L’ensemble des instructions disponible permet également la lecture de
ces registres par le bus PMD, mais il n’y a pas de connexion directe. Ces
opérations utilisent l’unité de transfert de données entre le bus DMD (16
bits) et le bus PMD (24 bits). La sortie du registre AX, grâce à un double port,
peut être simultanément lue par le port d’entrée X et disponible sur le bus
DMD. 41
UAL d’un DSP 2171
− Le port d’entrée Y de l’ALU accepte également des données (16 bits) de
deux sources, soit du double registre AY (AY0 et AY1) ou du registre de «
feedback » AF. Les deux registres contenus dans AY peuvent être lus ou écrits
depuis le bus
DMD ou écrits directement depuis le bus PMD. L’ensemble des instructions
disponibles permet également la lecture de ces registres par le bus PMD mais
dans ce cas c’est l’unité de transfert de données entre le bus DMD (16 bits) et
le bus PMD (24 bits) qui est utilisée. La sortie registre AY, grâce à un double
port, peut être simultanément lu par le port d’entrée Y et disponible sur le
bus DMD.

42
UAL d’un DSP 2171
− Le port de sortie R de l’ALU est connectée au registre de « feedback » AF et au registre
de résultat AR. La sortie registre AR, grâce à un double port, peut simultanément être
envoyée au bus résultat R-Bus et au bus DMD. L’ensemble des instructions disponible
permet également la lecture du registre AR par le bus PMD, mais il n’y a pas de connexion
directe. Cette opération utilise l’unité de transfert de données entre le bus DMD (16 bits)
et le bus PMD (24 bits).
N’importe quel registre associé à L’ALU peut être lu et écrit dans un même cycle d’horloge.
Les registres sont lus au début du cycle et écrits à la fin du même cycle. Dans un cycle
donné, la valeur contenue dans un registre quelconque a été chargée à la fin du cycle
précédent. Par conséquent, une nouvelle valeur écrite dans un registre ne peut pas être
lue avant le début du cycle suivant. Cette caractéristique permet à un registre de fournir
un opérande sur une entrée de l’ALU au début d’un cycle et être rafraîchit par un nouvel
opérande issu de la mémoire à la fin du cycle. Ceci permet aussi de stocker en mémoire le
contenu d’un registre résultat et de rafraîchir ce dernier par un nouveau résultat issu de
l’ALU dans le même cycle.
Les registres de l’ALU sont doubles (2 banks). Seul un bank est accessible à la fois. Le
second bank peut être activé, par exemple dans un sous-programme ou une routine
d’interruption, ce qui évite le stockage des données contenues dans les registres. La
sélection du bank primaire ou secondaire est commandée par le bit MSTAT[0] ).
43
UAL d’un DSP 2171
Fonctions standards de l’UAL
Les fonctions standards de l’ALU sont les suivantes (R=AR ou AF) :
R = X+Y : Addition simple
R = X+Y+CI : Addition avec retenue sur 1 bits
R = X-Y : Soustraction simple
R = X-Y+CI-1 : Soustraction avec retenue et décalage de 1 bit
R = Y-X : Soustraction simple
R = Y-X+CI-1 : Soustraction avec retenue et décalage de 1 bit
R = -X : Changement de signe de X (complément à deux)
R = -Y : Changement de signe de Y (complément à deux)
R = Y+1 : Incrémentation de Y par 1
R = Y-1 : Décrémentation de Y par 1
R = PASS X : Passe X dans R avec modification des flags AZ et AN
44
UAL d’un DSP 2171
Fonctions standards de l’UAL
R = PASS Y : Passe Y dans R avec modification des flags AZ et AN
R = 0 (PASS 0) : Mise à zéro de R
R = ABS X : Valeur absolue de X avec modification du flag AS
R = X AND Y : ET logique bit à bit entre X et Y
R = X OR Y : OU logique bit à bit entre X et Y
R = X XOR Y : OU exclusif logique bit à bit entre X et Y
R = NOT X : NON logique bit à bit de X (complément à 1)
R = NOT Y : NON logique bit à bit de Y (complément à 1)

45
UAL d’un DSP 2171
Les registres connectés aux ports de l’ALU sont les suivants :

46
UAL d’un DSP 2171
Calculs simple précision

47
UAL d’un DSP 2171
Mode saturation ou limitation de l’ALU
Le fonctionnement de l’ALU suppose l’absence de saturation ce
qui correspond à des données ne pouvant varier (en format 1.15)
que de 1000 0000 0000 0000 (valeur la plus négative), pour
laquelle AV=AC=1, à la valeur 0111 1111 1111 1111 (valeur la
plus positive), pour laquelle AV=1 et AC=0

48
UAL d’un DSP 2171
Bits d’état de l’ALU
Les bits d’état définis dans le registre d’état arithmétique ASTAT
sont les suivants :

49
MAC d’un DSP 2171

50
MAC d’un DSP 2171
Structure
Le multiplicateur est constitué de deux ports d’entrée X et Y de 16 bits de
largeur. Le port de sortie P de 32 bits correspond au résultat. Ce résultat
passe ensuite au travers d’un additionneur / soustracteur de 40 bits, lequel
peut ou non ajouter ou soustraire au résultat le contenu du registre MR. Le
résultat global est ensuite chargé dans le registre MR par une remise à jour.
Le registre MR de sortie est constitué de trois registres, deux de 16 bits MR0
et MR1 et un de 8 bits, MR2.

La capacité de l’additionneur / soustracteur est supérieure à 32 bits afin de


permettre un dépassement de capacité lors de calculs intermédiaires faisant
intervenir une suite de multiplications et additions / soustractions. Le bit
ASTAT[6] permet de signaler un dépassement de capacité sur les 32 bits de
MR0 et MR1.

51
MAC d’un DSP 2171
Port d’entrée X
Le port d’entrée X du MAC accepte des données (16 bits) de deux sources,
soit du double registre MX (MX0 ou MX1) ou des registres liées au bus
résultat R-Bus. Ces registres peuvent être utilisés directement comme
opérandes. Les deux registres contenus dans MX peuvent être lus ou écrits
depuis le bus DMD. La sortie registre MX, grâce à un double port, peut être
simultanément lu par le port d’entrée X et disponible sur le bus DMD.
Port d’entrée Y
Le port d’entrée Y du MAC accepte également des données (16 bits) de deux
sources, soit du double registre MY (MY0 et MY1) ou du registre de «
feedback » MF. Les deux registres contenus dans MY peuvent être lus ou
écrits depuis le bus DMD, ou écrits directement depuis le bus PMD.
L’ensemble des instructions
disponibles permet également la lecture de ces registres par le bus PMD mais
dans ce cas c’est l’unité de transfert de données entre le bus DMD (16 bits) et
le bus PMD (24 bits) qui est utilisée. La sortie registre MY, grâce à un double
port, peut être simultanément lu par le port d’entrée Y et disponible sur le 52
MAC d’un DSP 2171
Port de sortie de MAC
- Le port de sortie P du MAC (32 bits) est connecté au 32 bits de poids faibles
de l’additionneur / soustracteur de 40 bits, la seconde entrée n’est rien
d’autre que les registres MR2, MR1, MR0.
L’additionneur / soustracteur a deux entrées, l’une de 32 bits directement
connectée à la sortie du multiplicateur, l’autre de 40 bits permet la lecture
du registre MR.

53
MAC d’un DSP 2171
Les sorties de l’additionneur / soustracteur
Les sorties de l’additionneur / soustracteur vont soit au registre de résultat MR soit au
registre de « feedback » MF. Le registre MF permet aux bits 16 à 31 du résultat d’être
directement utilisés par l’entrée Y du multiplicateur lors du prochain cycle de
l’horloge. Le registre de résultat est constitué de trois registres, deux de 16 bits (MR0
et MR1) et un de 8 bits (MR2). Ces registres peuvent être chargés directement par le
bus DMD. Leurs sorties sont directement connectées (driver tri-state) au bus DMD ou
au bus résultat R.
N’importe quel registre associé au MAC peut être lu et écrit dans un même cycle
d’horloge.
Les registres sont lus au début du cycle et écrits à la fin du même cycle. Dans un cycle
donné, la valeur contenue dans un registre quelconque a été chargée à la fin du cycle
précédent. Par conséquent, une nouvelle valeur écrite dans un registre ne peut pas
être lue avant le début du cycle suivant. Cette caractéristique permet à un registre de
fournir un opérande sur une entrée du MAC au début d’un cycle et être rafraîchit par
un nouvel opérande issu de la mémoire à la fin du cycle. Ceci permet aussi de stocker
en mémoire le contenu d’un registre résultat et rafraîchir ce dernier par un nouveau
résultat issu du MAC dans le même cycle.
54
MAC d’un DSP 2171
Fonctions standards de MAC
Les fonctions standards du MAC sont les suivantes (R=MR ou MF) :
R = X*Y : Multiplication simple
R = MR+X*Y : Multiplication et accumulation additive
R = MR-X*Y : Multiplication et accumulation soustractive
R= 0 : Mise à zéro du résultat (MR)
La famille des ADSP21xx permet deux modes pour le multiplicateur /
accumulateur, soit le mode fractionnaire (1.15) et le mode entier (16.0).
En mode fractionnaire 32 bits le port de sortie P du multiplicateur subit un
ajustement de format par un décalage de 1 bit vers la gauche (LSB mis à « 0
») afin de supprimer l’extension inutile du bit de signe avant de passer dans le
bloc additionneur / soustracteur.
En mode entier, aucun décalage n’est nécessaire avant de passer dans le bloc
additionneur / soustracteur.
Les modes entier ou fractionnaire sont validés par le bit MSTAT[4] du registre
d’état des modes de fonctionnement (MSTAT).
55
MAC d’un DSP 2171
Format d’entrée des opérandes
Afin de facilité les multiplications multiprécision, l’unité MAC accepte sur ces
ports d’entrées X et Y des nombres entiers ou fractionnaires, signés
(complément à deux) ou non signés.
La définition des formats d’entrées fait partie intégrante de l’instruction et
doit être précisée pour chaque multiplication.

Le mode SS (signé x signé) est utilisé lors de la multiplication de deux


nombres signés en simple précision (16 bits x 16 bits) ou lors de la
multiplication partielle des deux bytes de poids forts lors d’un calcul en
multiprécision.
MR=MR+MX0*MY0 (SS) ;
Le mode US ou SU(non-signé x signé) ou (signé x non-signé) est utilisé lors
de la multiplication de deux nombres en simple précision (16 bits x 16 bits)
donc l’un est signé et l’autre pas ou lors de la multiplication partielle d’un
byte de poids forts et d’un byte de poids faible lors d’un calcul en
multiprécision. 56
MAC d’un DSP 2171
Le mode UU (non-signé x non-signé) est utilisé lors de la multiplication de
deux nombres non-signés en simple précision (16 bits x 16 bits) ou lors de la
multiplication partielle des deux bytes de poids faibles lors d’un calcul en
multiprécision.
MR=MR+MX0*MY0 (UU) ;

Le mode RND (arrondi) du résultat du MAC L’accumulateur à la possibilité


d’exécuter une fonction d’arrondi sur les 40 bits du résultat à la frontière
entre les bits N°15 et 16. Cette fonction est directement spécifiée dans le
code d’instruction. Les deux opérandes doivent être en mode signé

57
MAC d’un DSP 2171
Registres d’entrées et de sortie du MAC

58
MAC d’un DSP 2171
Mode saturation ou limitation du MAC
L’additionneur / soustracteur du MAC génère un signal d’état de
dépassement de capacité (MV), lequel est chargé dans le registre d’état
arithmétique ASTAT[6] à la fin de chaque opération exécutée dans le MAC.
Le résultat placé dans les registres MR (MR2, MR1, MR0) est considéré
comme un mot signé de 32 bits. Un dépassement de capacité peut donc
être détecté si les 8 bits du registre MR2 ne sont pas tous égaux et
identiques au bit de poids fort (MSB) du registre MR1.

59
Décaleur À BARILLET (BARREL SHIFTER) d’un DSP
2171

60
Décaleur À BARILLET (BARREL SHIFTER) d’un DSP
2171
Structure
Cette unité de décalage peut être décomposée en quatre
zones distinctes :
- la zone de décalage (shifter array) ;
- la zone de fonction logique OU / PASSE (OR /PASS) ;
- la zone de détection de l’exposant (exponent detector) ;
- la zone de comparaison logique d’exposant (exponent COMPARE logic).

La zone de décalage est constituée d’un décaleur à barillet de 1632 bits. Il


permet de placer un mot de 16 bits dans un champ de 32 bits.

61
Décaleur À BARILLET (BARREL SHIFTER) d’un DSP
2171
Structure
Les blocs de décalage et la logique associée sont contrôlés par l’ensemble de
registres suivants :
− Le registre SI fournit la grandeur de 16 bits à décaler à l’entrée du bloc de
décalage et à l’entrée du détecteur d’exposent. Ce registre de 16 bits peut
être lu et écrit directement par le bus DMD. Comme le montre la structure
générale du décaleur à barillet, les entrées du bloc décaleur et du détecteur
d’exposent peuvent également provenir des registres connectés au bus de
résultat (R-bus), soit MR, AR, SR.
− Le registre SR, connecté à la sortie de bloc de décalage via le bloc logique
OR / PASS est un registre de 32 bits divisé en deux registres de 16 bits SR0 et
SR1. Ces deux registres peuvent être chargés par le bus DMD et lus soit par le
même bus ou par le bus résultat R. Le registre SR peut également être utilisé
en «feedback » comme entrée du bloc logique OR / PASS pour les décalages
en double précision.

62
Décaleur À BARILLET (BARREL SHIFTER) d’un DSP
2171
Structure
Le registre SE (Shifter exponent) a une largeur de 8 bits et contient l’exposent
du nombre contenu dans SI durant une opération de normalisation
/dénormalisation. Le registre SE peut être lu et écrit par le bus DMD (8 bits
LSB). Son contenu est un nombre binaire en complément à deux de format
8.0 (entier signé). En lecture les bits de poids forts (8 bits MSB) représentent
l’extension du signe de la valeur de SE
− Le registre SB (Shifter block) est important pour les opérations en virgule
flottante. Il contient la valeur de décalage nécessaire à la normalisation du
nombre contenu dans SI.
Le registre SB peut être lu et écrit par le bus DMD (5 bits LSB). Son contenu
est un nombre binaire en complément à deux de format 5.0 (entier signé). En
lecture les bits de poids forts (11 bits MSB) représentent l’extension du signe
de la valeur de SI

63
Décaleur À BARILLET (BARREL SHIFTER) d’un DSP
2171
Registres d’entrées et de sortie du décaleur à barillet

64
Décaleur À BARILLET (BARREL SHIFTER) d’un DSP
2171
Opération de décalage
Le décaleur à barillet exécute les fonctions suivantes :

− décalage arithmétique (Arithmetic Shift : ASHIFT ;

− décalage logique (Logical Shift : LSHIFT) ;

− normalisation (Normalize : NORM) ;

− définition de l’exposant (Derive Exponent : EXP) ;

− ajustement de l’exposant (Block Exponent Adjust : EXPADJ)

65
Décaleur À BARILLET (BARREL SHIFTER) d’un DSP
2171
Ajustement de l’exposant EXPADJ:
Cette fonction détecte le plus grand exposant entre un ensemble de
nombres.

Décalage immédiat
Un décalage immédiat permet simplement de décaler un mot de 16 bits soit
vers la gauche (left : upshift) soit vers la droite (right : downshift) d’un
nombre entier de bits. Le nombre contrôlant le décalage est un nombre signé
de 8 bits. Le registre SE n’est ni utilisé ni modifié par une opération de
décalage immédiat.

Dénormalisation
L’opération de dénormalisation effectue le décalage d’une mantisse en
fonction de son exposant, ce dernier se trouvant dans le registre SE. Il s’agit
donc d’une opération permettant de passer un nombre en virgule flottante
en virgule fixe. La valeur du décalage doit être explicitement chargée ou être
le résultat d’une ou de plusieurs opérations précédentes. 66
Décaleur À BARILLET (BARREL SHIFTER) d’un DSP
2171
Normalisation
Les nombres avec un nombre de bits de signe redondant peuvent être
normalisés. Il s’agit ni plus ni moins que d’une conversion entre les
représentations en virgule fixe et virgule flottante. L’opération de
normalisation se déroule en deux étapes. La première permet de connaître la
valeur de l’exposant en observant les nombres de bits d’extension de signe et
la deuxième permet grâce à des décalages de normaliser la mantisse du
même nombre. Pour la seconde partie de l’opération, le nombre issu de la
détection de l’exposant est chargé dans le registre SE, puis grâce à
l’instruction NORM, permet le contrôle du décalage de la mantisse en
utilisant la valeur contenue dans SE mais changée de signe (bloc NEGATE).

67
Séquenceur de programme d’un DSP 2171

68
Séquenceur de programme d’un DSP 2171

Caractéristique
Le séquenceur de programme de l'ADSP2171 crée les adresses des
instructions à exécuter et gère les divers contrôles de fonctionnement du
programme.
Les instructions sont adressées grâce au bus PMA et les données programme
correspondant à ces adresses sont envoyées vers le registre des instructions.
Le compteur de programme (Program Counter incrémenter ou PC
incrémenter) permet l'adressage de manière progressive et ordonnée des
instructions du programme principal.

69
Séquenceur de programme d’un DSP 2171

Le rôle du séquenceur intervient surtout pour des programmes secondaires, durant le


fonctionnement des sous-programmes, des boucles ou des interruptions.
− Une boucle « démarre » après chaque instruction DO UNTIL.
− Une instruction de branchement est introduite après chaque instruction JUMP
− Un sous programme est « appelé » par l'instruction CALL.
− Le retour du sous-programme impose l'instruction RTS (ReTurn from a Subroutine).
− Le retour d'une interruption impose l'instruction RTI (ReTurn from an Interrupt).
Toutes ces instructions font fonctionner le processeur en programme secondaire.
Pour sauvegarder la future instruction du programme principal, le processeur utilise
des piles (stack).
Pour chaque nouvelle instruction située dans la mémoire de programme, le
multiplexeur « adresse suivante » envoie l'adresse nécessaire par l'intermédiaire du
bus PMA.
Il sélectionne la source d'adresse à utiliser, selon la commande venant du
registre d'instruction (JUMP / CALL), du comparateur de boucle, du système
de logique de décision conditionnelle ou du registre de contrôle
d'interruption.
70
Séquenceur de programme d’un DSP 2171

La source d'adresses principale est le compteur de programme et


d'incrémentation (PC d'incrémentation) qui fournit l'adresse de l'instruction
suivante, lorsque le processeur fonctionne en programme principal. Quand
l'adresse est envoyée sur le bus PMA, elle est aussi rechargée dans le
compteur pour commencer un nouveau cycle.
Une autre source d'adresses est la pile du compteur (PC Stack), qui fournit
l'adresse de l'instruction suivante, lorsque le processeur fonctionne à la fin
d'un programme secondaire: retour de sous-programme (RTS) ou
d'interruption (RTI). Le haut de la pile est aussi utilisé en source d'adresses en
fin de boucle (DO UNTIL).
Le contrôleur d'interruption fournit l'adresse suivante du programme quand
une interruption est en fonctionnement.
Une dernière source d'adresses possible est le générateur d'adresses DAG2,
qui peut pointer vers la mémoire programme (registres d'index pointeurs I4 à
I7).

71
Instruction de contrôle de séquence de programme

Instruction de saut direct JUMP


L’adresse de saut (14 bits) est intégrée dans l’instruction JUMP. Lorsque
cette instruction est décodée, l’adresse de saut représentant l’adresse de la
prochaine instruction est fournie par la sortie du séquenceur de
programme (multiplexeur). L’adresse est aiguillée puis chargée dans le
compteur de programme, via le bus PMA, pour le cycle suivant.
− Instruction de saut (JUMP) direct :
JUMP fir_start ;
« fir » est l'étiquette d'une partie de programme permettant au
programmeur de préciser la réalisation effectuée par le processeur.

− Instruction de saut conditionnel :


IF(condition) JUMP fir_start

72
Instruction de contrôle de séquence de programme

- Instruction de saut indirect JUMP()


Le saut peut également être indirect. L’adresse est alors contenue dans un des
registres pointeurs Ix de l’unité DAG2 (I4 à I7). L’adresse est transmise via le bus
PMA (adresse de la mémoire de programme). C'est pour cela qu’il est nécessaire
d'utiliser le générateur d'adresses DAG2, en association avec le séquenceur.
JUMP (I4) ;
- Instruction d'appel de sous-programme CALL
L’adresse du sous-programme (subroutine) est associée avec l'instruction CALL, et
une fois extraite du registre d'instruction, cette adresse est chargée dans le
compteur de programme (PC) au cycle suivant, en passant par le multiplexeur de
sortie. Par ailleurs, le compteur de programme est incrémenté et sauvegardé dans
la pile du compteur. Au retour du sous programme, on extrait l'adresse
sauvegardée dans la pile du compteur ce qui permet de continuer ainsi le
programme.
CALL fir ;

73
Instruction de contrôle de séquence de programme

- Instruction de boucle DO UNTIL


La forme la plus utilisée de la création de boucle DO UNTIL utilise le registre de contrôle
(CNTR) comme compteur d’itération. Lorsque le registre CNTR est utilisé pour le
contrôle d’itération de boucle, la condition de fin de boucle CE (counter expired) doit
être utilisée.
L0=10 ; {définition de longueur d’un buffer}
I0=^data-buffer ; {I0 = adresse de début du buffer}
M0=1 ; {défini l’incrément du pointeur I0}
CNTR = 10 ; {CNTR = longueur du buffer}
DO end_of_loop UNTIL CE ; {répète la boucle jusqu’à CNTR=0}
DM(I0,M0)=0 ; {exécute une instruction}
…………… ;
end_of_loop : MR =............... ;
Cette instruction utilise le registre compteur CNTR pour fixer le nombre de boucles à
effectuer. Ici l'étiquette « end_of_loop » indique que toutes les instructions écrites
entre DO... UNTIL et « end_of_loop » sont exécutées dans la boucle.
Lorsque l’instruction CNTR=10 ; est exécutée, le compteur est chargé via le bus DMD. Si
la boucle est imbriquée dans une autre (CNTR≠0 ), la valeur présente de CNTR est
sauvée dans la pile du compteur de boucle (count stack).
L’instruction DO end_of_loop UNTIL CE ; fixe les conditions de boucle. L’exécution d’une74
boucle DO UNTIL sauve l’adresse de l’instruction suivante (PC+1) immédiatement DO
Instruction de contrôle de séquence de programme

- Instruction de boucle DO UNTIL


A chaque exécution d’une instruction à l’intérieur de la boucle, le comparateur de boucle vérifie
l’adresse de l’instruction en cours avec l’adresse de fin de boucle (end_of_loop). Chaque fois que la
fin d’une boucle est atteinte, le comparateur de boucle, démarre une évaluation de la condition de
terminaison de boucle.
− Si la condition de terminaison est fausse, l’adresse de l’instruction suivante n’est pas une
incrémentation du compteur de programme, mais l’adresse suivant l’instruction DO UNTIL. Cette
adresse se trouve dans la pile du compteur de programme (PC stack).
− Si la condition de terminaison est vraie, les piles du compteur de programme et de boucle
restituent la valeur supérieure de la pile (mise à jour). Le compteur de programme prend l’adresse
de l’instruction suivante par une simple incrémentation.

- Instruction d'attente d'interruption (IDLE)


Elle permet de réduire la consommation du processeur pendant l'attente d'une interruption. Il
est possible, selon l'instruction, de diviser la fréquence de l'horloge interne, selon un rapport n
parmi n = 16, 32, 64 ou 128.
IDLE(n) ;
Par défaut on écrit IDLE sans préciser n. Dans ce cas le DSP se met en mode de veille et
attend une interruption pour continuer. La fréquence d’horloge interne ne change pas. Le
délai avant le traitement de l’interruption est d’un cycle d’horloge. IDLE(n) augmente de
délai de réponse d’un facteur n.

75
Les interruptions

Le contrôleur d’interruptions du séquenceur de programme répond à une interruption


en
sauvant le contenu du compteur de programme dans une pile (PC stack) et en
chargeant le compteur de programme avec l’adresse de la première instruction de la
routine à exécuter.
Les interruptions activent un vecteur d’interruption associé à l’interruption à exécuter.
Les emplacements pointés par le vecteur d’interruption sont espacés de quatre
positions mémoire, autorisant l’intégration d’une routine d’interruption très courte.
Pour des routines
d’interruption de plus de quatre instructions, le contrôle de la routine d’interruption
peut être transféré à un autre endroit de la mémoire à l’aide d’une instruction de saut
direct (JUMP).
Après qu’une interruption eut été exécutée, une instruction de retour d’interruption
(RTI) permet le retour au programme précédemment interrompu en effectuant la mise
à jour du compteur de programme à l’aide de la dernière valeur introduite dans la pile
(PC Stack).

76
Les interruptions

Les registres suivants sont utilisés pour la configuration des interruptions :


− ICNL : Interrupt CoNtroL register
Détermine si les interruptions peuvent être imbriquées ou non.
Définit la sensibilité des signaux (état ou transition) externes d’interruptions IRQ0 ,
IRQ1, IRQ2 .
− IMASK : Interupt MASK register
Permet de masquer ou non les interruptions de manière individuelle.
− IFC : Interrupt Force / Clear register
Force une interruption ou annule une interruption en attente
Les interruptions externes IRQ0 , IRQ1, IRQ2 peuvent être sensibles aux transitions
(flanc descendant) ou aux niveaux. Les interruptions internes doivent être comparées
aux interruptions sensibles aux transitions.
Pour les interruptions IRQx sensibles aux transitions, la demande d’interruption est
mémorisée jusqu’à ce cette dernière soit traitée, ensuite elle est automatiquement
supprimée.
Une interruption en attente peut être supprimée par software en écrivant un « 0 » dans
le bit correspondant du registre IFC.

77
Gestion des piles à l’aide des instructions PUSH et
POP
Les pointeurs des piles de programme (PC stack), d’état (Status stack) et de boucle
(Loop
Stack) peuvent être modifiés par les instructions suivantes :

PUSH STS incrémente le pointeur de pile d’état (Status Stack) de manière à pointer le
prochain emplacement disponible. Les registres d’état arithmétique (ASTAT), de mode de
fonctionnement (MSTAT) et de masquage des interruptions (IMASK) sont sauvés dans la
pile d’état. PUSH STS est exécutée automatiquement lorsqu’une interruption est activée.

POP STS décrémente le pointeur de pile d’état (Status Stack) de manière à pointer le
prochain emplacement disponible. Les registres d’état arithmétique (ASTAT), de mode de
fonctionnement (MSTAT) et de masquage des interruptions (IMASK) sont mis a jour avec le
contenu des emplacements respectifs de la pile d’état. PUSH STS est exécutée
automatiquement lors d’un retour d’interruption (RTI).

POP CNTR décrémente le pointeur de pile du décompteur (Count Stack) de manière à


pointer le prochain emplacement disponible. Le décompteur de boucle CNTR est mis à jour
avec le contenu de la pile.

POP PC et POP LOOP décrémente le pointeur de pile de programme (PC Stack) mais dans
ce cas l’information contenue dans la pile est perdue.
78
Registres d’état et de contrôle

- ASTAT : Arithmetic STATus register

- SSTAT : Stack STATus register

- MSTAT : Mode STATus register

D’autre part, les registres de contrôle des interruptions sont les suivants

- ICNTL : Interrupt CoNTroL register

- IMASK : Interupt MASK register

- IFC : Interrupt Force / Clear register

79
Registres d’état et de contrôle

- ASTAT : Arithmetic STATus register

80
Registres d’état et de contrôle

- SSTAT : Stack STATus register

81
Registres d’état et de contrôle

- MSTAT : Mode STATus register

82
Registres d’état et de contrôle

- ICNTL : Interrupt CoNTroL register

83
Registres d’état et de contrôle

- IMASK : Interupt MASK register

84
Registres d’état et de contrôle

- IFC : Interrupt Force / Clear register

85
Générateurs d’adresses (Data Address Generators)

86
Générateurs d’adresses (Data Address Generators)

Chaque DSP de la famille ADSP2100 contient deux générateurs d’adresses permettant


d’accéder simultanément aux mémoires d’adresses et de données. Les unités DAG
permettent l’adressage indirect. Il existe deux structures de buffers l’une linéaire, l’autre
circulaire avec un contrôle en modulo 2n.
Ces deux unités présentent chacun une particularité :

DAG1 : Contrôle uniquement les adresses de la mémoire de données. Possède la


particularité de l’inversion de bit pour le traitement de la FFT.

DAG2 : Contrôle autant les adresses de la mémoire de données que celles de la


mémoire de programme.

87
Générateurs d’adresses (Data Address Generators)

Chaque bloc de registre contient quatre registres de 14 bits qui peuvent être lus ou écrit
via le bus DMD. Le contenu des registres I et L est considéré comme non-signés, par
conséquent
les deux bits MSB du bus DMD sont mis à « 0 ». Par contre les registres M contiennent
des
grandeurs signées, les deux bits MSB du bus DMD prennent des valeurs correspondant
à
l’extension du signe.
− Les registres pointeurs I0 à I3 pour l’unité DAG1 et I4 à I7 pour l’unité DAG2
contiennent les adresses réelles utilisées pour accéder à des positions mémoire. Lors
d’un adressage en mode indirect l’adresse stockée dans le registre sélectionné Ix
devient l’adresse de la mémoire.

Pour l’unité DAG1, l’adresse générée passe à travers une logique permettant l’inversion
de bit. Cette caractéristique est activée en forçant le bit MSTAT[1] à « 1 » ou
en utilisant l’instruction EN BIT_REV. De plus, la sortie de cette unité n’est connectée
qu’au bus d’adresses de la mémoire de donnée DMA.

88
Générateurs d’adresses (Data Address Generators)

Pour l’unité DAG2, l’adresse générée peut activer les deux bus d’adresses, soit les bus
DMA et PMA.
− Les registres de modification (M), désignés par M0 à M3 pour l’unité DAG1 et M4 à
M7 pour l’unité DAG2 contiennent les incréments algébriques (grandeurs signées) à
ajouter aux registres pointeurs I juste après un adressage effectif. Les registres (M) de
l’unité DAG1 ne peuvent pas commander les registres (I) de l’unité DAG2 et
réciproquement. Par contre n’importe quel registre de modification M d’une unité peut
commander n’importe quels registres pointeurs de la même unité.

L’adressage peut être linéaire ou circulaire. Contrairement aux registres de


modifications
(M), les registres de longueurs (L) appartiennent aux registres pointeurs de même ordre
(L0 à I0, L1 à I1, ….L7 à I7).

89
Architecture d’un
BF533

• Architecture Générale
• UAL
• MAC
• Décaleur à Barillet
• Séquenceur
• Interruption
• Générateur d’adresse 90
Architecture générale d’un DSP BF533
Noyau MSA
Le principal avantage du noyau MSA (Micro Signal Architecture) réside dans la
fonctionnalité intégrée qui associe traitement multimédia, communication et interface
utilisateur sur une plate-forme unique facile à programmer. Ce noyau MSA hautement
polyvalent effectue des tâches DSP ainsi que des commandes utilisateur et des tâches de
contrôle. L'environnement de programmation comporte de nombreuses fonctionnalités
qui sont connues des programmeurs de microcontrôleurs et de DSP, accélérant ainsi
considérablement le développement de systèmes embarqués.
L'architecture MSA est également conçue pour fonctionner sur une large gamme de
vitesses d'horloge et de tensions de fonctionnement et comprend des circuits pour
assurer des transitions stables entre les états de fonctionnement. Un circuit de gestion
dynamique de l'alimentation surveille en permanence le logiciel en cours d'exécution sur
le processeur et ajuste de manière dynamique à la fois la tension fournie au noyau et la
fréquence à laquelle il s'exécute. Il en résulte une consommation d'énergie et des
performances optimisées pour les applications en temps réel.
Le processeur BlackFin ADSP-BF5xx est une famille de processeurs à virgulr fixe 16 bits
basés sur le cœur MSA. Ce processeur cible les applications sensibles à la consommation,
telles que les lecteurs audio portables, les téléphones cellulaires et les appareils photo
numériques. Blackfin est également adapté aux applications gourmandes en ressources
informatiques, notamment les équipements vidéo et les téléphones cellulaires 91de
troisième génération.
Architecture générale d’un DSP BF533
Noyau MSA
La première génération de la famille BF5xx est le BF535, qui atteint une vitesse d'horloge
allant jusqu'à 350 MHz à 1,6 V. Analog Devices a introduit trois familles de processeurs
(BF532, BF533 et BF561) en 2003. Ces processeurs peuvent fonctionner jusqu'à 750 MHz à
1,45 V. La vitesse d'horloge et les tensions de fonctionnement peuvent être commutées
dynamiquement pour des tâches données via un logiciel permettant d'économiser de
l'énergie. Le processeur BF561 intègre deux cœurs MSA pour améliorer les performances
lors du traitement en parallèle. Une version récente de la famille BF5xx est composée de
BF534, BF536 et BF537. Ces processeurs ajoutent une connectivité Ethernet intégrée et un
réseau de contrôleur au processeur Blackfin.
Le noyau Blackfin combine des MACs, un jeu d'instructions orthogonales ressemblant à un
ordinateur à instructions réduites (RISC), des fonctions de programmation à instruction
unique, SIMD (données multiples) et des fonctions de traitement multimédia dans une
architecture unifiée.

92
Architecture générale d’un DSP BF533
Noyau MSA
Le processeur Blackfin BF533 comprend des périphériques système tels qu'une interface
périphérique parallèle (PPI), une interface périphérique série (SPI), des ports série
(SPORT), des temporisateurs universels, un émetteur-récepteur universel asynchrone
(UART), horloge temps réel (RTC), horloge de surveillance et ports d’entrée / sortie (I / O)
à usage général. Outre ces périphériques système, le processeur Blackfin dispose
également d’un contrôleur DMA (accès direct à la mémoire) qui transfère efficacement les
données entre les périphériques / mémoires externes et les mémoires internes sans
intervention du processeur. Les processeurs Blackfin fournissent une mémoire cache L1
pour un accès rapide aux données et aux instructions.
En résumé, les processeurs Blackfin disposent de supports périphériques riches, d'une
unité de gestion de la mémoire (mmu) et d'instructions de type RISC, généralement
utilisées dans de nombreux microcontrôleurs haut de gamme.

93
Architecture générale d’un DSP BF533
Unité arithmétique de données

L'unité arithmétique de données contient les blocs matériels suivants:


1. Deux multiplicateurs à 16 bits représentés comme dans la Figure 5.2.
2. Deux accumulateurs 40 bits (ACC0 et ACC1). L’accumulateur 40 bits peut être partitionné en deux
parties: moitié inférieure 16 bits (A0.L, A1.L), moitié supérieure 16 bits (A0.H, A1.H) et extension 8
bits (A0.X , A1.X), où L et H désignent respectivement 16 bits inférieur et supérieur.
3. Deux unités logiques arithmétiques de 40 bits (ALU) représentées à la Figure ci-dessus.
4. Quatre ALU vidéo 8 bits représentées comme dans la Figure ci-dessus.
5. Un décaleur de baril de 40 bits.
6. Huit registres de données 32 bits (R0 à R7) ou 16 registres indépendants à 16 bits (R0.L à R7.L et
R0.H à R7.H).
94
Architecture générale d’un DSP BF533
Unité arithmétique de données
Les unités de calcul extraient les données des registres de données et effectuent des
opérations à point fixe. Les registres de données reçoivent des données des bus de
données et transfèrent les données aux unités de calcul pour traitement. De la même
manière, les résultats des calculs sont transférés dans les registres de données avant
d'être transférés dans la mémoire via des bus de données.
Ces blocs de calcul matériels sont largement utilisés pour exécuter des algorithmes DSP
tels que le filtrage FIR, la FFT, etc. Les multiplicateurs sont souvent combinés avec les
additionneurs à l'intérieur de l'ALU et les accumulateurs à 40 bits pour former deux unités
MAC de 16 sur 16 bits. Outre l'utilisation du multiplicateur, l'ALU effectue également des
opérations arithmétiques communes (add, soustraction) et logiques (AND, OR, XOR, NOT)
sur des données 32 bits à 16 bits. De nombreuses instructions ou options spéciales sont
incluses pour effectuer les opérations de saturation, d'arrondissement, de détection de
signe / exposant, de division, d'extraction de champ et autres.

95
Architecture générale d’un DSP BF533
Unité arithmétique de données

De plus, un décaleur à barillets effectue un décalage, une rotation, une normalisation et


une extraction logiques et arithmétiques dans l'accumulateur. Une expérience illustrative
utilisant les instructions de décalage est présentée ci-dessous dans l'expérience pratique.
Avec les doubles ALU et les multiplicateurs, le processeur Blackfin a la souplesse
nécessaire pour gérer simultanément deux paires de registres ou quatre registres de 16
bits.
Dans cette section, nous utilisons les instructions de montage de Blackfin pour décrire les
opérations arithmétiques dans plusieurs exemples. Les instructions d'assemblage utilisent
la syntaxe algébrique pour simplifier le développement du code d'assemblage.

96
Architecture générale d’un DSP BF533
Opération d'ajout / soustraction simple sur 16 bits

Deux registres quelconques de 16 bits (par exemple, R1.L et R2.H) peuvent être
ajoutés ou soustraits pour former un résultat de 16 bits, qui est stocké dans un
autre registre de 16 bits, par exemple, R3.H = R1.L+R2.H(ns), comme indiqué
dans la figure suivante. Notez que pour l'arithmétique sur 16 bits, un ou des
drapeaux à saturation ou un drapeau à non saturation (ns) doivent être placés à
la fin de l'instruction. Le symbole “;” indique la fin de l'instruction. Le processeur
Blackfin fournit deux unités ALU permettant d'effectuer deux opérations d'ajout
/ soustraction de 16 bits en un seul cycle. Cette double opération d'ajout /
soustraction de 16 bits double le débit arithmétique par rapport à l'opération
d'ajout / soustraction de 16 bits. 97
Architecture générale d’un DSP BF533
Opérations d'addition / soustraction doubles sur 16 bits

Deux registres de 32 bits quelconques peuvent être utilisés pour stocker quatre
entrées pour des opérations doubles d’addition / soustraction de 16 bits, et les
deux résultats de 16 bits sont sauvegardés dans un seul registre de 32 bits.
Comme le montre la figure suivante, l'instruction R3 = R1+|-R2 effectue
l'addition simultanément dans les moitiés supérieures de R1 et R2 et la
soustraction dans les moitiés inférieures de R1 et R2. Les résultats sont stockés
dans les mots haut et bas du registre R3, respectivement.

98
Architecture générale d’un DSP BF533
Opérations simples 32 bits
Le résultat de 32 bits de l'opération d'addition / soustraction de 32 bits est stocké dans un autre registre de 32 bits.
Par exemple, l'instruction R3 =R1+R2 effectue une addition sur 32 bits de R1 et R2 et place le résultat dans R3 comme illustré à la figure suivante.

Semblable à la double addition / soustraction 16 bits, la double addition / soustraction 32 bits peut également être effectuée
avec les doubles ALU 40 bits.

Opérations doubles 32 bits


L'exemple peut être étendu à une double addition / soustraction 32 bits.
Cette opération est également similaire à une opération double 16 bits, à la différence près que les entrées et les résultats sont tous 32 bits.

Par exemple, les instructions R3 = R1+R2, R4 = R1-R2 effectuent l'addition et la soustraction simultanées de R1 et R2 avec le résultat de l'addition
enregistré dans R3 et le résultat de la soustraction stocké dans R4, comme illustré à la figure suivante.

Dans les exemples ci-dessus d'opérations ALU, nous ajoutons / soustrayons des données dans une longueur de mot de 16 ou 32 bits.
Les résultats risquent de déborder en raison de la longueur de mot limitée utilisée.

99

Vous aimerez peut-être aussi