Académique Documents
Professionnel Documents
Culture Documents
CD\DSP\Cours\Chap4_8 M. Correvon
T A B L E D E S M A T I E R E S
PAGE
4. SET D’INSTRUCTIONS................................................................................................................................................1
4.1 INTRODUCTION ...........................................................................................................................................................1
4.2 NOTATIONS ET CONVENTIONS ...................................................................................................................................1
4.3 LES OPÉRATIONS DE TYPE MULTIFONCTION ..............................................................................................................2
4.3.1 Opération ALU / MAC avec lecture de la mémoire PM et DM............................................................ 2
4.3.2 Lectures simultanées en mémoire de données (DM et de programme (PM)......................................... 3
4.3.3 Opération avec l’ALU, le MAC ou le décaleur à barillet et lecture en mémoire .................................. 3
4.3.4 Opération avec l’ALU, le MAC ou le décaleur à barillet et écriture en mémoire ................................. 4
4.3.5 Opération avec l’ALU, le MAC ou le décaleur à barillet et un transfert de registre à registre ............. 4
4.4 L’UNITÉ ARITHMÉTIQUE ET LOGIQUE (ARITHMETIC/LOGIC UNIT)............................................................................5
4.4.1 Définition des registres xop et yop autorisés pour les instructions ALU .............................................. 5
4.4.2 Conditions autorisées ............................................................................................................................ 6
4.4.3 Notation sur les registres ASTAT, SSTAT, MSTAT............................................................................ 6
4.4.4 Addition X+Y simple et addition avec report ....................................................................................... 7
4.4.5 Soustraction X-Y simple et soustraction avec report ............................................................................ 8
4.4.6 Soustraction Y-X simple et soustraction avec report ............................................................................ 9
4.4.7 Fonction logique AND, OR, XOR ...................................................................................................... 10
4.4.8 Instruction sur un bit ........................................................................................................................... 11
4.4.9 Test de l’état d’une variable sans la modifier...................................................................................... 12
4.4.10 Complément à deux............................................................................................................................. 13
4.4.11 Complément à un ................................................................................................................................ 14
4.4.12 Valeur absolue..................................................................................................................................... 15
4.4.13 Incrémentation..................................................................................................................................... 16
4.4.14 Décrémentation ................................................................................................................................... 17
4.4.15 Division............................................................................................................................................... 18
4.4.16 Génération d’un état de l’ALU............................................................................................................ 20
4.5 LE MULTIPLIEUR ET ACCUMULATEUR (MULTIPLIER/ACCUMULATOR) ...................................................................21
4.5.1 Définition des registres xop et yop autorisés pour les instructions MAC ........................................... 21
4.5.2 Conditions autorisées .......................................................................................................................... 22
4.5.3 Notation sur le registre d’état ASTAT ................................................................................................ 22
4.5.4 Multiplication...................................................................................................................................... 23
4.5.5 Multiplication /addition....................................................................................................................... 24
4.5.6 Multiplication/soustraction.................................................................................................................. 25
4.5.7 Multiplication par 0 (mise à zéro des registres résultat MR ou MF)................................................... 26
4.5.8 Transfert .............................................................................................................................................. 27
4.5.9 Limitation conditionnelle du résultat dans MR (saturation)................................................................ 28
4.6 LE DÉCALEUR À BARILLET (BARREL SHIFTER) ........................................................................................................29
4.6.1 Définition des registres xop autorisés pour les instructions du barrel shifter ...................................... 29
4.6.2 Conditions autorisées .......................................................................................................................... 30
4.6.3 Notation sur le registre d’état ASTAT ................................................................................................ 30
4.6.4 Décalage arithmétique......................................................................................................................... 31
4.6.5 Décalage logique................................................................................................................................. 32
4.6.6 Normalisation...................................................................................................................................... 33
4.6.7 Définition de l’exposant ...................................................................................................................... 34
4.6.8 Ajustement de l’exposant .................................................................................................................... 35
4.6.9 Décalage arithmétique immédiat......................................................................................................... 36
4.6.10 Décalage logique immédiat ................................................................................................................. 37
4.7 TRANSFERT DE DONNÉES .........................................................................................................................................38
4.7.1 Transfert de données de registre à registre .......................................................................................... 38
4.7.2 Chargement immédiat d’un registre .................................................................................................... 39
4.7.3 Lecture de la mémoire de données (adressage direct) ......................................................................... 40
4.7.4 Lecture de la mémoire de données (adressage indirect)...................................................................... 41
4.7.5 Lecture de la mémoire de programme (adressage indirect)................................................................. 42
4.7.6 Ecriture de la mémoire de données (adressage direct) ........................................................................ 43
4.7.7 Ecriture de la mémoire de données (adressage indirect) ..................................................................... 44
4.7.8 Ecriture de la mémoire de programme (adressage indirect)................................................................ 45
4.8 DÉROULEMENT SÉQUENTIEL D’UN PROGRAMME ....................................................................................................46
4.8.1 Saut...................................................................................................................................................... 46
4.8.2 Appel à un sous-programme ............................................................................................................... 47
4.8.3 Saut ou appel à un sous-programme sous condition externe............................................................... 48
4.8.4 Retour d’un sous programme .............................................................................................................. 49
4.8.5 Retour d’une routine d’interruption .................................................................................................... 50
4.8.6 Boucle ................................................................................................................................................. 51
4.8.7 Mise en veille ...................................................................................................................................... 53
4.9 INSTRUCTIONS ADDITIONNELLES .............................................................................................................................54
4.9.1 Contrôle des piles (stack) .................................................................................................................... 54
4.9.2 Lecture et écriture dans la pile du compteur de programme (PC stack).............................................. 56
4.9.3 Activation/désactivation des bits du registre de mode de contrôle MSTAT ....................................... 57
4.9.4 Modification des pointeurs des générateurs d’adresses DAG ............................................................. 58
4.9.5 Cycle sans instruction.......................................................................................................................... 59
4.9.6 Activation / désactivation des interruptions ........................................................................................ 60
4.10 EXÉCUTION DE PLUSIEURS INSTRUCTION EN UN CYCLE (MULTIFUNCTION) ...............................................61
4.10.1 Exécution d’une instruction ALU / MAC / SHIFTER et lecture simultanée en mémoire .................. 61
4.10.2 Exécution d’une instruction ALU / MAC / SHIFTER et modification simultanée de registre ........... 64
4.10.3 Exécution d’une instruction ALU / MAC / SHIFTER et écriture simultanée en DM / PM................ 66
4.10.4 Lecture simultanée en DM et PM........................................................................................................ 68
4.10.5 Exécution d’une instruction ALU / MAC et lecture simultanée en DM et PM................................... 69
5. DIRECTIVES ASSEMBLEUR...................................................................................................................................71
5.1 INTRODUCTION .........................................................................................................................................................71
5.2 DIRECTIVES DU PRÉPROCESSEUR C.........................................................................................................................73
5.2.1 Exemples de directive pour le préprocesseur C................................................................................... 73
5.2.2 Commentaires pour le préprocesseur C............................................................................................... 75
5.3 DIRECTIVES DU PRÉPROCESSEUR DE L’ASSEMBLEUR .............................................................................................75
5.3.1 Directives de module de programme .MODULE................................................................................ 76
5.3.2 Module chargé à partir de la mémoire de boot (ROM) ....................................................................... 76
5.3.3 Module défini avec l’attribut STATIC................................................................................................ 77
5.3.4 Directives des variables et des buffers .VAR...................................................................................... 79
5.3.5 Directives d’initialisation des variables et des buffers .INIT .............................................................. 82
5.3.6 Directive d’insertion d’autres fichier source .INCLUDE.................................................................... 82
5.3.7 Directives concernant la définition de macro .MACRO ..................................................................... 83
5.3.8 Directive concernant les étiquettes dans les macro .LOCAL .............................................................. 83
5.3.9 Directive de déclaration globale de variables et buffers .GLOBAL.................................................... 84
5.3.10 Directive de déclaration globale d’étiquettes de programme .ENTRY ............................................... 84
5.3.11 Directive de déclaration externe de variables, de buffers et d’étiquettes .EXTERNAL ..................... 84
5.3.12 Directive de déclaration de constante .CONST................................................................................... 84
6. CONSTRUCTION DE L’ARCHITECTURE MÉMOIRE (SYSTEM BUILDER) ...........................................85
6.1 INTRODUCTION .........................................................................................................................................................85
6.2 DIRECTIVE DU « SYSTEM BUILDER » ......................................................................................................................85
6.2.1 Directive principale du ficher de description :SYSTEM..................................................................... 86
6.2.2 Directive d’identification .ADSP21xx ................................................................................................ 86
6.2.3 Directive du plan mémoire .MMAP.................................................................................................... 86
6.2.4 Directive de déclaration des segments de mémoire .SEG ................................................................... 86
6.3 FICHIER DE DESCRIPTION D’ARCHITECTURE DU KIT D’ÉVALUATION DE L’ADMC401........................................87
6.4 FICHIER DE DESCRIPTION D’ARCHITECTURE DE LA CARTE CHPSE........................................................................88
7. EDITEUR DE LIEN (LINKER) ..................................................................................................................................90
7.1 INTRODUCTION .........................................................................................................................................................90
7.2 FONCTIONNEMENT DE L’ÉDITEUR DE LIEN ..............................................................................................................91
7.2.1 Allocation mémoire d’exécution ......................................................................................................... 91
7.2.2 Allocation de la mémoire de stockage................................................................................................. 92
7.2.3 Traduction des symboles..................................................................................................................... 92
7.3 UTILISATION DE LIBRAIRIES AVEC DES APPLICATIONS SPÉCIFIQUES ......................................................................92
7.3.1 Construction d’une librairie unique pour un accès rapide ................................................................... 93
8. CRÉATION DE FICHIERS DE COMMANDE ......................................................................................................94
Bibliographie
ADMC401 : 4. SET D’INSTRUCTIONS Page 1
4. SET D’INSTRUCTIONS
4.1 INTRODUCTION
Cette première partie décrit l’ensemble des instructions pouvant être réalisées par
l’ADMC401, Ces instructions codées sur 24 bits sont exécutées en un cycle d’horloge
(CLKOUT) pour autant que l’accès à la mémoire externe se fasse sous certaines conditions.
Les opérations principales sont :
− opérations avec l’ALU, le MAC ou le décaleur à barillet avec ou sans condition ;
− transfert de registre à registre ;
− lecture et écriture en mémoire ;
− opération avec l’ALU, le MAC ou le décaleur à barillet liée avec
un transfert de registre à registre ;
une lecture / écriture de la mémoire ;
une lecture de deux positions mémoire.
Pour le dernier point on parle de multifonctions. Les multifonctions sont également codées
sur 24 bits.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 2
Registres reg
SB Registres dreg
PX
I0 – I7, M0 – M7, L0 – L7 AX0, AX1, AY0, AY1, AR
CNTR MX0, MX1, MY9, MY1, MR0, MR1, MR2
ASTAT, MSTAT, SSTAT, SI, SE, SR0, SR1
IMASK, ICNTL, IFC
TX0, TX1, RX0, RX1
Tableau 4-1 : Définition des registres et des registres de données
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 3
La structure de l’ALU impose que la donnée transférée au registre AX0 soit issue de la
mémoire de données et que la donnée transférée au registre AY0 soit issue de la mémoire de
programme.
Il existe toutefois une restriction si plus d’une instruction de transfert se trouvent en mémoire
externe. Dans ce cas, les accès aux mémoires de données et de programme ne peuvent se
faire simultanément
Une opération d’addition et une lecture en mémoire de données (DM) en adressage indirect
sont exécutées dans un même cycle. Il est clair que le registre AR ne peut être utilisé comme
registre de destination de la lecture en mémoire.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 4
Dans ce cas les registres AR, AX0 et AY0 sont lus au début d’un cycle, le résultat de
l’addition et l’écriture en mémoire étant exécutés à la fin du cycle. La position mémoire
DM(I0,M3) va donc contenir la valeur de AR avant l’addition.
Dans cet exemple, la lecture des registres AX0, AY0 et MR2 sont exécuté au début de
chaque cycle, le résultat de l’opération de l’ALU, du MAC ou du décaleur à barillet et le
transfert du contenu du registre MR2 étant stocker et dans MR respectivement AX0 à la fin
du cycle. Le transfert de registre à registre peut se faire entre n’importe quels registres
exceptés les registres de boucle (feedback) AF et MF et le registre SB du décaleur à barillet.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 5
16 bits MUX
16 bits
Bank 2 Bank 2
Bank 1 Bank 1
AX REGISTERS AY REGISTERS
16 bits 2 x 16 2 x 16 16 bits
16 bits 16 bits
16 bits 16 bits
Bank 2
Bank 1
AF REGISTER
1 x 16
AZ
X Y
AN
AC
AV ALU CI
AS
AQ 16 bits
R
16 bits
MUX
16 bits
Bank 2
Bank 1
AR REGISTER
1 x 16
16 bits
16 bits
16 bits 16 bits
R BUS
4.4.1 Définition des registres xop et yop autorisés pour les instructions ALU
X opérande : xop AX0, AX1, AR
MR0, MR1, MR2
SR0, SR1
Y opérande : yop AY0, AY1, AF
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 6
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 7
4.4.4.1 Syntaxe
+ yop
+C
AR
[IFcond] = xop + yop + C ;
AF
+ constant
+ constant + C
4.4.4.3 Exemple
IF EQ AR = AX0 + AY0 + C ;
AR = AX0 + 512 ;
4.4.4.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction d’addition.
Faux : l’instruction d’addition n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction d’addition.
L’opération consiste à additionner la première opérande xop à la seconde opérande yop et, si
demandé à ajouter le bit de report (AC : ALU Carry).
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 8
4.4.5.1 Syntaxe
− yop
+ C −1
AR
[IFcond] = xop − yop + C − 1 ;
AF
+ constant
+ constant + C
4.4.5.3 Exemple
IF GE AR = AX0 − AY0 ;
4.4.5.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de soustraction.
Faux : l’instruction de soustraction n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction de soustraction.
L’opération consiste à soustraire la première opérande xop à la seconde opérande yop et, si
demandé à ajouter le bit de report (AC : ALU Carry) auquel on retranche 1.
L’addition de « +C-1 » pour les calculs en multiprécision correspond à un report d’addition
« C » auquel il faut soustraire 1 pour passer du complément à 2 au complément à 1 (voir
technique de soustraction en multiprécision).
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 9
4.4.6.1 Syntaxe
xop
yop −
xop + C − 1
AR
[IFcond] = − xop + C − 1 ;
AF
− xop + constant
− xop + constant + C − 1
4.4.6.3 Exemple
IF GT AR = AY0 − AX0 + C − 1 ;
4.4.6.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de soustraction.
Faux : l’instruction de soustraction n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction de soustraction.
L’opération consiste à soustraire la première opérande xop à la seconde opérande yop et, si
demandé à ajouter le bit de report (AC : ALU Carry) auquel on retranche 1.
L’addition de « +C-1 » pour les calculs en multiprécision correspond à un report d’addition
« C » auquel il faut soustraire 1 pour passer du complément à 2 au complément à 1 (voir
technique de soustraction en multiprécision).
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 10
4.4.7.1 Syntaxe
AND
AR yop
[IFcond] = xop OR ;
AF constant
XOR
4.4.7.3 Exemple
IF FLAG _ IN AR = MR0 AND 8192 ;
AR = AX0 XOR AY0 ;
4.4.7.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction logique bit à bit.
Faux : l’instruction logique bit à bit n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction logique bit à bit.
L’opération consiste réaliser une fonction logique ET, OU, OU exclusif bit à bit.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 11
4.4.8.1 Syntaxe
TSTBIT n OF xop
AR SETBIT n OF xop
[IFcond] = ;
AF CLRBIT n OF xop
TGLBIT n OF xop
4.4.8.3 Exemple
AF = TSTBIT 5 OF AR ;
AF = TGLBIT 13 OF AX0 ;
4.4.8.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction sur un bit.
Faux : l’instruction sur un bit n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction sur un bit.
Ces instructions sont définies de la manière suivante
TSTBIT : Fonction AND bit à bit avec un 1 sur le bit N°n sélectionné.
SETBIT : Fonction OR bit à bit avec un 1 sur le bit N°n sélectionné.
CLRBIT : Fonction AND bit à bit avec un 0 sur le bit N°n sélectionné.
TGLBIT : Fonction XOR bit à bit avec un 1 sur le bit N°n sélectionné.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 12
4.4.9.1 Syntaxe
xop
AR
[IFcond] = PASS yop ;
AF
constant
4.4.9.3 Exemple
IF GE AR = PASS AY0 ;
AR = PASS 0 ;
AR = PASS 8191 ;
4.4.9.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de passage au travers de l’ALU.
Faux : l’instruction de passage au travers de l’ALU n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction de passage au
travers de l’ALU.
PASS 0 est une méthode pour la mise à « 0 » (Clear) les registres AR ou AF.
Par rapport à une instruction de transfert (voir §4.7), l’instruction PASS permet de modifier
les flag du registre ASTAT.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 13
4.4.10.1 Syntaxe
AR xop
[IF cond] = − ;
AF yop
4.4.10.3 Exemple
IF LT AR = − AY0 ;
4.4.10.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction du complément à deux.
Faux : l’instruction du complément à deux n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction du complément à deux.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 14
4.4.11 Complément à un
4.4.11.1 Syntaxe
AR xop
[IF cond] = NOT ;
AF yop
4.4.11.3 Exemple
IF NE AF = NOT AX0 ;
4.4.11.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction du complément à un.
Faux : l’instruction du complément à un n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction du complément à un.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 15
4.4.12.1 Syntaxe
AR
[IF cond] = ABS xop ;
AF
4.4.12.3 Exemple
IF NEG AF = ABS AX0 ;
4.4.12.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de la valeur absolue.
Faux : l’instruction de la valeur absolue n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction de la valeur absolue.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 16
4.4.13 Incrémentation
4.4.13.1 Syntaxe
AR
[IF cond] = yop + 1 ;
AF
4.4.13.3 Exemple
IF GT AF = AF + 1 ;
4.4.13.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction d’incrémentation.
Faux : l’instruction d’incrémentation n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction d’incrémentation.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 17
4.4.14 Décrémentation
4.4.14.1 Syntaxe
AR
[IF cond] = yop − 1 ;
AF
4.4.14.3 Exemple
IF EQ AR = AY1 − 1 :
4.4.14.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de décrémentation.
Faux : l’instruction de décrémentation n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction de décrémentation.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 18
4.4.15 Division
4.4.15.1 Syntaxe
DIVS yop, xop;
DIVQ xop;
4.4.15.2 Exemple
DIVS = AY1, AX0 ;
DIVQ AX0 ; DIVQ AX0 ; DIVQ AX0 ; DIVQ AX0 ; DIVQ AX0 ;
DIVQ AX0 ; DIVQ AX0 ; DIVQ AX0 ; DIVQ AX0 ; DIVQ AX0 ;
DIVQ AX0 ; DIVQ AX0 ; DIVQ AX0 ; DIVQ AX0 ; DIVQ AX0 ;
ou
do _ div : DIVS = AY1, AX0 ;
CNTR = 15;
DO div _ loop UNTIL CE;
div _ loop : DIVQ AX0
4.4.15.4 Description
Cette instruction permet la division yop par xop à l’aide de ceux primitives , DIVS et DIVQ.
Une division simple précision est constituée d’un numérateur de 32 bits et d’un dénominateur
de 16 bits conduisant à un résultat sur 16 bits. Dans ce cas, l’exécution de la division prend
16 cycles.
La division peut être signée ou non-signée. Le numérateur et le dénominateur doivent être
soit les deux signés, soit les deux non-signés. Les 16 bits de poids forts du numérateur sont
dans le registre AF ou AY1, les 16 bits de poids faibles doivent être dans AY0. Les 16 bits du
dénominateur peuvent se trouver dans un des registres définis en 4.4.15.3. Le résultat de la
division se trouve dans le registre AY0.
Pour une division signée, la primitive DIVS est utilisée une fois afin de définir le signe du
quotient. Ensuite c’est la primitive DIVQ qui doit être utilisée autant de fois qu’il reste de bit
dans le quotient (pour une division simple précision, DIVQ est utilisé 15 fois).
Pour une division non-signée, il faut placer les 16 bits de poids fort du numérateur dans le
registre AF et les 16 bits de poids faibles dans le registre AY0. Ensuite il faut forcer le
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 19
ASTAT[5] (AQ) à « 0 » afin d’indiquer que le quotient est positif. La primitive DIVQ doit
ensuite être utilisée autant de fois qu’il reste de bit dans le quotient (pour une division simple
précision, DIVQ est utilisé 16 fois).
Le bit du quotient généré à chaque instruction DIVS ou DIVQ est le bit ASTAT[5] (AQ). Le
reste de la division n’est pas utilisable sans correction. Pour plus de détails se référer à [4],
Appendix :Division Exception.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 20
4.4.16.1 Syntaxe
NONE = < ALU > ;
4.4.16.2 Exemple
NONE = AX0 − AY0 ;
NONE = PASS SR0 ;
4.4.16.3 Description
Exécute l’opération programmée et met à jour les bits du registre ASTAT. Le résultat n’est
pas sauvé. Cette instruction permet de réaliser un test sur l’état d’une opération sans altérer le
contenu des registres de résultats AR et AF. Les instructions suivantes ne sont pas
autorisées :
xop + constant
xop − constant
− xop + constant
AND
xop OR constant
NONE = XOR ;
PASS (excepté − 1,0,+1)
TSTBIT
SETBIT
xop
CLRBIT
TGLBIT
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 21
16 bits MUX
16 bits
Bank 2 Bank 2
Bank 1 Bank 1
MX REGISTERS MY REGISTERS
16 bits 2 x 16 2 x 16 16 bits
16 bits 16 bits
16 bits 16 bits
Bank 2
Bank 1
MF REGISTER
1 x 16
X Y
MULTIPLIER
40 bits
P 16 bits
32 bits
16 bits
ADD / SUBTRACT MV
16 bits
4.5.1 Définition des registres xop et yop autorisés pour les instructions MAC
X opérande : xop AR
MX0, MX1, MX2, MR0, MR1
SR0, SR1
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 22
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 23
4.5.4 Multiplication
4.5.4.1 Syntaxe
(SS)
(SU)
MR yop
[IF cond] = xop ∗ (US) ;
MF xop
(UU)
(RND)
4.5.4.3 Exemple
IF EQ MR = MX0 + MF (UU) ; { xop ∗ yop }
MF = SR0 ∗ SR0 (SS) ; { xop ∗ xop }
4.5.4.4 Description
Les opérandes sont contenus dans les registres spécifiés dans la syntaxe de l’instruction. Lors
que le registre MF est la destination du résultat, seul les bits N°31 à 16 sont sauvés.
L’opération xop ∗ xop (élévation au carré), les deux opérandes xop doivent être stockés dans
le même registre.
Le format de chaque opérande est définit comme S : signé ou U : non-signé. La première et la
deuxième lettres en parenthèse se rapportent respectivement au premier et au deuxième
opérandes. Pour une élévation au carré ( xop ∗ xop ) les formats valides sont (UU) ou (SS).
Si (RND) est spécifié, le MAC multiplie les deux opérandes et arrondi le résultat pour ne
prendre en compte que les 16 bits de poids fort qui sont sauvés dans le registre de destination.
Les deux opérandes sont considérés comme des nombres en complément à deux. La fonction
d’arrondi est décalée. Pour plus de détails sur l’algorithme utilisé pour l’arrondi, voir [4]
Chapitre 2 § 2.3.2.6.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 24
4.5.5.1 Syntaxe
(SS)
(SU)
MR yop
[IF cond] = MR + xop ∗ (US) ;
MF xop
(UU)
(RND)
4.5.5.3 Exemple
IF EQ MR = MR + MX0 + MY1 (SS) ;
MF = MR + MX0 ∗ MX0 (SS) ;
4.5.5.4 Description
Les opérandes sont contenus dans les registres spécifiés dans la syntaxe de l’instruction. Lors
que le registre MF est la destination du résultat, seul les bits N°31 à 16 sur les 40 du résultat
sont sauvés.
L’opération xop ∗ xop (élévation au carré), les deux opérandes xop doivent être stockés dans
le même registre.
Le format de chaque opérande est définit comme S : signé ou U : non-signé. La première et la
deuxième lettres en parenthèse se rapportent respectivement au premier et au deuxième
opérandes. Pour une élévation au carré ( xop ∗ xop ) les formats valides sont (UU) ou (SS).
Si (RND) est spécifié, le MAC multiplie les deux opérandes, additionne le contenu courant
du registre MR et arrondi le résultat pour ne prendre en compte que les 16 bits de poids fort
qui sont sauvés dans le registre de destination. Les deux opérandes sont considérés comme
des nombres en complément à deux. La fonction d’arrondi est décalée. Pour plus de détails
sur l’algorithme utilisé pour l’arrondi, voir [4] Chapitre 2 § 2.3.2.6.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 25
4.5.6 Multiplication/soustraction
4.5.6.1 Syntaxe
(SS)
(SU)
MR yop
[IF cond] = MR − xop ∗ (US) ;
MF xop
(UU)
(RND)
4.5.6.3 Exemple
IF LT MR = MR − MX1 * MY0 (SU) ;
MR = MR − MX0 ∗ MX0 (SS) ;
4.5.6.4 Description
Les opérandes sont contenus dans les registres spécifiés dans la syntaxe de l’instruction. Lors
que le registre MF est la destination du résultat, seul les bits N°31 à 16 sur les 40 du résultat
sont sauvés.
L’opération xop ∗ xop (élévation au carré), les deux opérandes xop doivent être stockés dans
le même registre.
Le format de chaque opérande est définit comme S : signé ou U : non-signé. La première et la
deuxième lettres en parenthèse se rapportent respectivement au premier et au deuxième
opérandes. Pour une élévation au carré ( xop ∗ xop ) les formats valides sont (UU) ou (SS).
Si (RND) est spécifié, le MAC multiplie les deux opérandes, soustrait le contenu courant du
registre MR et arrondi le résultat pour ne prendre en compte que les 16 bits de poids fort qui
sont sauvés dans le registre de destination. Les deux opérandes sont considérés comme des
nombres en complément à deux. La fonction d’arrondi est décalée. Pour plus de détails sur
l’algorithme utilisé pour l’arrondi, voir [4] Chapitre 2 § 2.3.2.6.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 26
4.5.7.1 Syntaxe
MR
[IF cond] = 0;
MF
4.5.7.3 Exemple
IF GT MR = 0 ;
4.5.7.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de mise à « = ».
Faux : l’instruction de mise à « = » n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction de mise à « = ».
Le registre de 40 bits MR ou celui de 16 bits MF est mis à « 0 »
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 27
4.5.8 Transfert
4.5.8.1 Syntaxe
MR
[IF cond] = MR (RND) ;
MF
4.5.8.3 Exemple
IF EQ MF = MR (RND) ;
4.5.8.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de transfert.
Faux : l’instruction de transfert n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction de transfert.
Cette instruction correspond à une instruction de multiplication /addition avec yop=0. Le
résultat nul de la multiplication est additionner au contenu du registre MR. Le registre de
destination est soit MR, soit MF. En utilisant l’option (RND), un arrondi est effectué entre le
quinzième et le seizième bit de MR.
Il y a dépassement de capacité si les 9 bits de poids fort de MR ne sont pas tous de 0 ou tous
des 1.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 28
4.5.9.1 Syntaxe
IF MV SAT MR ;
4.5.9.2 Description
Test du bit ASTAT[6] (MV) du registre ASTAT correspondant à un dépassement de capacité
sur une opération de multiplication. Si MV= « 1 », les 32 bits de poids les plus faibles (MR1
et MR0) sont forcés à leurs valeurs de limitation.
Cette instruction est prévue pour être utilisée à la suite d’une instruction de
multiplication/addition ou multiplication/soustraction afin d’éviter un dépassement de
capacité et donc un résultat erroné.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 29
5 bits 16 bits
LSB Bank 2
Bank 1
SI REGISTER
MUX 1 x 16
8 bits
LSB Bank 2
Bank 1
SB REGISTER 16 bits 16 bits
1x5 MUX
SS X
8 bits
LSB
EXPONENT
COMPARE DETECTOR
I X 16 bits
HI/LO R
8 bits SHIFTER
ARRAY
C
O
MUX MUX
32 bits 32 bits
Bank 2
Bank 1
OR / PASS 16 bits
SE REGISTER
1x5 NEGATE
8 bits
MUX MUX
Bank 2 Bank 2
From INSTRUCTION Bank 1 Bank 1
SR1 REGISTER SR0 REGISTER MUX
1 x 16 1 x 16
16 bits
16 bits
R-BUS 16 bits
4.6.1 Définition des registres xop autorisés pour les instructions du barrel shifter
X opérande : xop AR
MR0, MR1, MR2
SI, SR0, SR1
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 30
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 31
4.6.4.1 Syntaxe
(HI)
[IF cond] SR = [SR OR] ASHIFT xop ;
(LO)
4.6.4.3 Exemple
IF LT SR = SR OR ASHIFT SI (LO) ;
4.6.4.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de décalage arithmétique.
Faux : l’instruction de décalage arithmétique n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction décalage arithmétique.
Le décalage arithmétique décale les bits de l’opérande xop de la valeur définie dans le
registre SE. SE est un registre de 8 bits dont la valeur stockée est en complément à deux
(-128 à +127). La valeur absolue donne le nombre de bits de décalage et le signe la direction
du décalage. Pour une valeur positive le décalage se fait à gauche (dans les sens des MSB)
pour une valeur négative le décalage se fait vers la droite (dans le sens des LSB).
L’option (LO) indique que la valeur d’entrée est placée dans les 16 bits inférieurs d’un
champ de 32bits puis décalée selon la valeur contenue dans le registre SE. Le résultat est
stocké dans le registre SR de 32 bits (SR1, SR0).
L’option (HI) indique que la valeur d’entrée est placée dans les 16 bits supérieurs d’un
champ de 32bits puis décalée selon la valeur contenue dans le registre SE. Le résultat est
stocké dans le registre SR de 32 bits (SR1, SR0).
Pour un décalage vers la droite (valeur négative dans le registre SE) les bits ajoutés à gauche
sont une extension du signe, les bits sortant du champ à droite sont perdus.
Pour un décalage vers la gauche (valeur positive dans le registre SE) les bits ajoutés à droite
sont des « 0 », les bits sortants du champ à gauche sont perdus.
Pour les décalages en double précision (32 bits), la valeur du registre SE restent identique
pour les deux demi-plages du nombre. Lors de la première instruction, la partie supérieure de
la plage est décalée en utilisant un décalage arithmétique ASHIFT avec l’option HI, la
seconde instruction provoque un décalage logique LSHIFT avec l’option LO et SR OR.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 32
4.6.5.1 Syntaxe
(HI)
[IF cond] SR = [SR OR] LSHIFT xop ;
(LO)
4.6.5.3 Exemple
IF GE SR = LSHIFT SI (HI) ;
4.6.5.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de décalage logique.
Faux : l’instruction de décalage logique n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction décalage logique.
Le décalage logique décale les bits de l’opérande xop de la valeur définie dans le registre SE.
SE est un registre de 8 bits dont la valeur stockée est en complément à deux (-128 à +127).
La valeur absolue donne le nombre de bit de décalage et le signe la direction du décalage.
Pour une valeur positive le décalage se fait à gauche (dans les sens des MSB) pour une valeur
négative le décalage se fait vers la droite (dans le sens des LSB).
L’option (LO) indique que la valeur d’entrée est placée dans les 16 bits inférieurs d’un
champ de 32bits puis décalée selon la valeur contenue dans le registre SE. Le résultat est
stocké dans le registre SR de 32 bits (SR1, SR0).
L’option (HI) indique que la valeur d’entrée est placée dans les 16 bits supérieurs d’un
champ de 32bits puis décalée selon la valeur contenue dans le registre SE. Le résultat est
stocké dans le registre SR de 32 bits (SR1, SR0).
Pour un décalage vers la droite (valeur négative dans le registre SE) les bits ajoutés à gauche
sont des « 0 », les bits sortant du champ à droite sont perdus.
Pour un décalage vers la gauche (valeur positive dans le registre SE) les bits ajoutés à droite
sont des « 0 », les bits sortants du champ à gauche sont perdus.
Pour les décalages en double précision (32 bits), la valeur du registre SE restent identique
pour les deux demi-plages du nombre. Lors de la première instruction, la partie supérieure de
la plage est décalée en utilisant un décalage arithmétique ASHIFT avec l’option HI, la
seconde instruction provoque un décalage logique LSHIFT avec l’option LO et SR OR.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 33
4.6.6 Normalisation
4.6.6.1 Syntaxe
(HI)
[IF cond] SR = [SR OR] NORM xop ;
(LO)
4.6.6.3 Exemple
SR = NORM SI (HI) ;
4.6.6.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de décalage logique.
Faux : l’instruction de décalage logique n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction décalage logique.
Cette instruction fait en principe suite à une instruction de définition de l’exposant (EXP). Le
registre SE contient le nombre de bit de signe moins un de l’opérande xop avec un signe
négatif.
Si le contenu du registre SE est négatif ou nul, cette instruction va faire un décalage logique
vers la gauche afin d’éliminer les bits de signe redondant.
L’option (LO) indique que la valeur d’entrée est placée dans les 16 bits inférieurs d’un
champ de 32 bits puis décalée vers la gauche selon la valeur négative contenue dans le
registre SE. Le résultat est stocké dans le registre SR de 32 bits (SR1, SR0).
L’option (HI) indique que la valeur d’entrée est placée dans les 16 bits supérieurs d’un
champ de 32bits puis décalée vers la gauche selon la valeur négative contenue dans le
registre SE. Le résultat est stocké dans le registre SR de 32 bits (SR1, SR0).
Les bits ajoutés à droite sont des « 0 ».
Pour la normalisation en double précision (32 bits), la valeur du registre SE restent identique
pour les deux demi-plages du nombre. Lors de la première instruction, la partie supérieure de
la plage est décalée vers la gauche avec l’option HI, la seconde instruction provoque
également un décalage vers la gauche avec l’option LO et SR OR.
Si le contenu du registre SE vaut 1 (option HIX de EXP), le décalage se fait vers la droite
avec le contenu de ASTAT[3] (AC) placé sur le MSB.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 34
4.6.7.1 Syntaxe
(HI)
[IF cond] SE = EXP xop (LO) ;
(HIX)
4.6.7.3 Exemple
IF GT SE = EXP MR1 (HI) ;
4.6.7.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de décalage logique.
Faux : l’instruction de décalage logique n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction décalage logique.
Cette instruction précède l’instruction de normalisation (NORM). Elle a pour but de définir le
nombre de bit correspondant à l’extension du signe de l’opérande. Le registre SE contient la
valeur négative du nombre de bits de signe redondant. Il s’agit donc ni plus ni moins que la
valeur de l’exposant.
Avec l’option (HI), l’entrée est considérée comme un nombre signé de simple précision ou
comme la moitié supérieure d’un nombre signé en double précision.
Avec le mode (HIX), l’entrée est interprétée comme le résultat d’une addition ou d’une
soustraction pouvant avoir un dépassement de capacité. Le bit ASSTAT[3] (AV) donnant le
dépassement de capacité est donc pris en compte. Si un dépassement de capacité existe, le
registre SE prend la valeur +1. S’il n’y a pas de dépassement de capacité alors le mode est
identique à celui de l’option (HI).
Avec l’option (LO), l’entrée est considérée comme la partie inférieure d’un nombre de
double précision. Il est alors possible d’ajuster la valeur de l’exposant si le nombre de bits de
signe redondant est supérieur à 15 (ou SE=-15 avant l’exécution de cet instruction). Dans le
cas contraire le contenu du registre SE reste inchangé.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 35
4.6.8.1 Syntaxe
[IF cond] SB = EXPADJ xop ;
4.6.8.3 Exemple
IF GT SB = EXPADJ SI ;
4.6.8.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de décalage logique.
Faux : l’instruction de décalage logique n’est pas exécutée.
Pas de condition : exécution inconditionnelle de l’instruction décalage logique.
Cette instruction permet de définir l’exposant le plus grand (valeur négative) d’un groupe de
nombre. Cet exposant pourra par la suite être utilisé pour normaliser chaque nombre du
groupe avec le même exposant en vue d’une opération arithmétique.
Avant l’exécution de cette instruction, il faut assigner la valeur -16 au registre SB (5 bits),
soit la valeur minimale admissible. L’instruction EXPADJ est ensuite exécutée pour chaque
nombre du groupe. La valeur du registre SB n’est mise à jour que si la détection de
l’exposant donne une valeur supérieure à la valeur stockée. Aucun décalage n’est effectué, le
but étant uniquement la recherche de l’exposant le plus élevé.
Les nombres avec dépassement de capacité ou la partie inférieure des nombres double
précision ne sont pas pris en compte par cette instruction.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 36
4.6.9.1 Syntaxe
(HI)
SR = [SR OR] ASHIFT xop BY < exp > ;
(LO)
4.6.9.3 Exemple
SR = SR OR ASHIFT SR0 BY 3 (LO) ; {pour exp≥0 ne pas écrire le signe +}
4.6.9.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de décalage arithmétique
Faux : l’instruction de décalage arithmétique n’est pas exécutée
Pas de condition : exécution inconditionnelle de l’instruction décalage arithmétique
Le décalage arithmétique décale les bits de l’opérande xop de <exp>. La valeur absolue
donne le nombre de bit de décalage et le signe la direction du décalage. Pour une valeur
positive le décalage se fait à gauche (dans les sens des MSB) pour une valeur négative le
décalage se fait vers la droite (dans le sens des LSB).
L’option (LO) indique que la valeur d’entrée est placée dans les 16 bits inférieurs d’un
champ de 32bits puis décalée selon <exp>. Le résultat est stocké dans le registre SR de 32
bits (SR1, SR0).
L’option (HI) indique que la valeur d’entrée est placée dans les 16 bits supérieurs d’un
champ de 32bits puis décalée selon <exp>. Le résultat est stocké dans le registre SR de 32
bits (SR1, SR0).
Pour un décalage vers la droite (<exp> négative) les bits ajoutés à gauche sont une extension
du signe, les bits sortant du champ à droite sont perdus.
Pour un décalage vers la gauche (<exp> positive) les bit ajoutés à droite sont des « 0 », les
bits sortants du champ à gauche sont perdus.
Pour les décalages en double précision (32 bits), <exp> restent identique pour les deux demi-
plages du nombre. Lors de la première instruction, la partie supérieure de la plage est décalée
en utilisant un décalage arithmétique ASHIFT avec l’option HI, la seconde instruction
provoque un décalage logique LSHIFT avec l’option LO et SR OR.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 37
4.6.10.1 Syntaxe
(HI)
SR = [SR OR] LSHIFT xop BY < exp > ;
(LO)
4.6.10.3 Exemple
SR = LSHIFT SR1 BY − 6 (HI) ; {pour exp≥0 ne pas écrire le signe +}
4.6.10.4 Description
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 38
4.7.1.1 Syntaxe
reg = reg ;
4.7.1.3 Exemple
I7 = AR ;
4.7.1.4 Description
Transfert le contenu d’un registre reg source dans un registre reg destination. Le contenu de
la source est toujours justifié à droite dans le registre de destination (reg[0]→reg[0],
reg[1]→reg[1], …).
Lorsque le transfert à lieu entre un registre source de capacité inférieure à celle du registre
destination (par exemple 8 bits → 16 bits), il y a extension du signe à gauche si la valeur est
signée ou adjonction de « 0 » si la valeur est non-signée.
Les registres ne pouvant contenir que des valeurs non-signées sont : I0 – I7, L0 – L7, CNTR,
PX, ASTAT, MSTAT, SSTAT, IMASK et ICNTL.
Lorsque le transfert à lieu entre un registre source de capacité supérieure à celle registre
destination (par exemple 16 bits → 8 bits), les bits de poids forts sont perdus.
Lorsque MR1 est le registre de destination, l’extension du signe se fait jusque dans le registre
MR2.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 39
4.7.2.1 Syntaxe
reg =< data > ;
dreg =< data > ;
data : <constant>
‘%’<symbol>
‘^’<symbol>
4.7.2.3 Exemple
I0 = ^ data _ buffer ;
L0 = %data _ buffer ;
4.7.2.4 Description
Transfert d’une valeur spécifique en complément à deux dans un registre dreg ou reg. La
valeur peut être une constante ou un symbole associé opérateur de type longueur de buffer
(%) ou pointeur de buffer (^). La valeur est contenue dans le format de l’instruction.
La valeur est toujours justifiée à droite dans le registre de destination (<data>[0]→(d)reg[0],
<data>[1]→ (d)reg [1], …).
Les registres I0 – I7, L0 – L7, CNTR, PX, ASTAT, MSTAT, SSTAT, IMASK et ICNTL ne
peuvent contenir que des valeur non-signées.
Pour cette instruction, les registres RX et TX peuvent être chargé avec une valeur de 14 bits
maximum. Pour charger ces registres avec une valeur de 16 bits il faut utiliser les instructions
de transfert de registre à registre reg=reg ou de mémoire de données à registre reg=DM(…)
Lorsque MR1 est le registre de destination, l’extension du signe se fait jusque dans le registre
MR2.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 40
4.7.3.1 Syntaxe
reg = DM(< addr >) ;
4.7.3.3 Exemple
SI = DM(ad _ port0) ;
4.7.3.4 Description
Transfert du contenu d’une position de la mémoire de données (DM) dans un registre reg
destinataire. Il s’agit ici d’un mode d’adressage direct, c’est-à-dire que l’adresse est donnée
sous la forme d’une valeur numérique ou d’une étiquette se rapportant à une constante.
L’adresse est contenue dans le format de l’instruction. Le contenu de la source est toujours
justifié à droite dans le registre de destination (DM[0]→reg[0], DM[1]→ reg [1], …).
Lorsque MR1 est le registre de destination, l’extension du signe se fait jusque dans le registre
MR2.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 41
4.7.4.1 Syntaxe
I0 M0
I1 M1
,
I2 M2
I3 M3
dreg = DM( );
I4 M4
I5 M5
,
I6 M6
I7 M7
4.7.4.3 Exemple
AY0 = DM(I3, M1) ;
4.7.4.4 Description
Transfert du contenu d’une position de la mémoire de données (DM) dans un registre de
données dreg destinataire. Il s’agit ici d’un mode d’adressage indirect, c’est-à-dire que
l’adresse est donnée sous la forme du contenu d’un registre (pointeur Ix) et d’un registre
d’incrément (mise à jour du pointeur ou post-modification du pointeur My). Pour une
succession linéaire des adresses pointée, le registre Lx correspondant au registre pointeur Ix
doit être mis à « 0 ». Le contenu de la source est toujours justifié à droite dans le registre de
destination (DM[0]→ dreg[0], DM[1]→ dreg[1], …).
Lorsque MR1 est le registre de destination, l’extension du signe se fait jusque dans le registre
MR2.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 42
4.7.5.1 Syntaxe
I4 M4
I5 M5
dreg = PM( , );
I6 M6
I7 M7
4.7.5.3 Exemple
MX1 = PM(I6, M5) ;
4.7.5.4 Description
Transfert du contenu d’une position de la mémoire de programme (PM) dans un registre de
données dreg destinataire. Il s’agit ici d’un mode d’adressage indirect, c’est-à-dire que
l’adresse est donnée sous la forme du contenu d’un registre (pointeur Ix) et d’un registre
d’incrément (mise à jour du pointeur ou post-modification du pointeur My). Pour une
succession linéaire des adresses pointées, le registre Lx correspondant au registre pointeur Ix
doit être mis à « 0 ». Les données de la mémoire de programme (PM) sont stockées sur 24
bits. Les MSB (PM[23…8]) sont chargés dans le registre destinataire avec les LSB alignés
(PM[8]→dreg[0], PM[9]→dreg[1], …). Si le registre dreg destinataire à une capacité
inférieure à 16 bits, les bits de poids fort de la source sont perdus. Les LSB (PM[7…0]) sont
toujours chargés dans le registre d’échange PX. Ces derniers peuvent être soit ignorés soit lus
au cycle suivant.
Lorsque MR1 est le registre de destination, l’extension du signe se fait jusque dans le registre
MR2.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 43
4.7.6.1 Syntaxe
DM(< addr >) = reg ;
4.7.6.3 Exemple
DM(ad _ port0) = AR ;
4.7.6.4 Description
Transfert du contenu d’un registre reg dans une position de la mémoire de données (DM)
destinataire. Il s’agit ici d’un mode d’adressage direct, c’est-à-dire que l’adresse est donnée
sous la forme d’une valeur numérique ou d’une étiquette se rapportant à une constante.
L’adresse est contenue dans le format de l’instruction.
Lorsque le transfert à lieu entre un registre source de capacité inférieure à 16 bits, il y a
extension du signe à gauche si la valeur est signée ou adjonction de « 0 » si la valeur est non-
signée.
Les registres non-signées sont : I0 – I7, L0 – L7, CNTR, PX, ASTAT, MSTAT, SSTAT,
IMASK et ICNTL.
Le contenu du registre source est toujours justifié à droite dans la position de la mémoire de
données (DM) de destination (reg[0]→DM[0], reg [1]→DM[1], …).
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 44
4.7.7.1 Syntaxe
I0 M0
I1 M1
,
I2 M2
I3 M3 dreg
DM( )= ;
I4 M4 < data >
I5 M5
,
I6 M6
I7 M7
data : <constant>
‘%’<symbol>
‘^’<symbol>
4.7.7.3 Exemple
DM(I2, M0) = MR1 ;
4.7.7.4 Description
Transfert du contenu d’un registre de données dreg ou d’une valeur immédiate <data> dans
une position de la mémoire de données (DM) destinataire. Il s’agit ici d’un mode d’adressage
indirect, c’est-à-dire que l’adresse est donnée sous la forme du contenu d’un registre (pointeur
Ix) et d’un registre d’incrément (mise à jour du pointeur ou post-modification du pointeur
My). Pour une succession linéaire des adresses pointées, le registre Lx correspondant au
registre pointeur Ix doit être mis à « 0 ».
Lorsque le transfert à lieu entre un registre dreg source de capacité inférieure à 16 bits, il y a
extension du signe à gauche.
Le contenu de la source est toujours justifié à droite dans le registre de destination
(dreg[0]→PM[0], dreg[1]→PM[1], …)
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 45
4.7.8.1 Syntaxe
I4 M4
I5 M5
PM( , ) = dreg ;
I6 M6
I7 M7
4.7.8.3 Exemple
PM(I6, M5) = AR ;
4.7.8.4 Description
Transfert du contenu d’un registre de données dreg dans une position de la mémoire de
programme (PM) destinataire. Il s’agit ici d’un mode d’adressage indirect, c’est-à-dire que
l’adresse est donnée sous la forme du contenu d’un registre (pointeur Ix) et d’un registre
d’incrément (mise à jour du pointeur ou post-modification du pointeur My). Pour une
succession linéaire des adresses pointées, le registre Lx correspondant au registre pointeur Ix
doit être mis à « 0 ». Les données de la mémoire de programme (PM) sont stockées sur 24
bits. Le contenu du registre dreg est chargé dans les MSB (PM[23…8]) de la mémoire
programme destinataire avec les LSB alignés (dreg[0]→PM[8], dreg[1]→PM[9], …). Les 8
LSB de la mémoire programme (PM[7…0]) sont chargé dans le registre d’échange PX,
Lorsque le transfert à lieu entre un registre dreg source de capacité inférieure à 16 bits, il y a
extension du signe à gauche.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 46
4.8.1 Saut
4.8.1.1 Syntaxe
(I4)
(I5)
[IF cond] JUMP (I6) ;
(I7)
< addr >
4.8.1.3 Exemple
IF NOT CE JUMP top _ loop ; {le compteur de boucle CNTR est décrémenté}
4.8.1.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de saut
Faux : l’instruction de saut n’est pas exécutée
Pas de condition : exécution inconditionnelle de l’instruction saut
L’instruction JUMP force l’exécution séquentielle du programme à une adresse spécifiée
dans l’instruction. Le mode d’adressage peut être direct ou indirect.
Pour un adressage direct (l’adresse est définie sous la forme d’une valeur ou d’une étiquette),
l’adresse programme est stockée directement dans l’instruction.
Pour un adressage indirect, le pointeur est un registre I du DAG (Data Address Generator).
Pour une instruction JUMP, le registre I n’est pas mis à jour (post modification par M).
Si l’instruction JUMP est la dernière instruction à l’intérieur d’une boucle DO UNTIL, il faut
s’assurer que la pile de boucle (loop stack) soit mise à jour correctement.
Si la condition NOT CE est utilisée (IF NOT CE JUMP top_loop), le compteur de boucle
CNTR est décrémenté.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 47
4.8.2.1 Syntaxe
(I4)
(I5)
[IF cond] CALL (I6) ;
(I7)
< addr >
4.8.2.3 Exemple
IF AV CALL scale _ down ; {le compteur de boucle CNTR est décrémenté}
4.8.2.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction d’appel à un sous-programme
Faux : l’instruction d’appel à un sous-programme n’est pas exécutée
Pas de condition : exécution inconditionnelle de l’instruction d’appel à un sous-
programme
L’instruction CALL est prévue pour les appels de sous-programme (saut avec retour). Le
pointeur de programme PC est sauvé dans la pile (PC stack) avec pour valeur l’adresse de
retour après exécution du sous-programme, puis le pointeur de programme prend la valeur de
l’adresse de la première instruction du sous-programme. Le mode d’adressage peut être direct
ou indirect.
Pour un adressage direct (l’adresse est définie sous la forme d’une valeur ou d’une étiquette),
l’adresse programme est stockée directement dans l’instruction.
Pour un adressage indirect, le pointeur est un registre I du DAG (Data Address Generator).
Pour une instruction CALL, le registre I n’est pas mis à jour (post modification par M).
Si l’instruction CALL est la dernière instruction à l’intérieur d’une boucle DO UNTIL, il faut
s’assurer que la pile de boucle (loop stack) soit mise à jour correctement.
Si la condition NOT CE est utilisée (IF NOT CE JUMP top_loop), le compteur de boucle
CNTR est décrémenté.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 48
4.8.3.1 Syntaxe
FLAG _ IN JUMP
IF < addr > ;
NOT FLAG _ IN CALL
4.8.3.2 Exemple
IF FLAG _ IN JUMP service _ condition ;
4.8.3.3 Description
Test l’état de la pin FI du DSP et, si elle est à « 1 », exécute l’instruction JUMP ou CALL
spécifiée. Si la pin FI est à « 0 », l’instruction de saut n’est pas exécutée. Mis à par la
condition, l’exécution de cette instruction se réduit à un JUMP ou CALL classique.
L’instruction CALL est prévue pour les appels de sous-programme (saut avec retour). Le
pointeur de programme PC est sauvé dans la pile (PC stack) avec pour valeur l’adresse de
retour après exécution du sous-programme, puis le pointeur de programme prend la valeur de
l’adresse de la première instruction du sous-programme. Le mode d’adressage doit être
direct.
L’adresse est définie sous la forme d’une valeur ou d’une étiquette, l’adresse programme est
stockée directement dans l’instruction.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 49
4.8.4.1 Syntaxe
[IF cond] RTS ;
4.8.4.3 Exemple
IF LE RTS ;
4.8.4.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de retour de sous-programme
Faux : l’instruction de retour de sous-programme n’est pas exécutée
Pas de condition : exécution inconditionnelle de l’instruction de retour de sous-
programme
L’instruction RTS exécute le retour d’un sous-programme à l’adresse définie dans la partie
supérieure de la pile (PC stack) et met à jour le pointeur de la pile. Seule la pile de
programme est utilisée.
Si l’instruction RTS est la dernière instruction à l’intérieur d’une boucle DO UNTIL, il faut
s’assurer que la pile de boucle (loop stack) soit mise à jour correctement.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 50
4.8.5.1 Syntaxe
[IF cond] RTI ;
4.8.5.3 Exemple
IF MV RTI ;
4.8.5.4 Description
Test la condition optionnelle :
Vrai : exécution de l’instruction de retour d’une routine d’interruption.
Faux : l’instruction de retour d’une routine d’interruption n’est pas
exécutée.
Pas de condition : exécution inconditionnelle de l’instruction de retour d’une
routine d’interruption.
L’instruction RTI exécute le retour d’une routine d’interruption à l’adresse définie dans la
partie supérieure de la pile (PC stack) et met à jour le pointeur de la pile.
Les registres d’état ASTAT, MSTAT, et le registre de masquage des interruptions IMASK
sont mis à jour avec les valeurs contenues dans la partie supérieure de la pile des registres
d’état (Status stack). Le pointeur de la pile des registres d’état est ensuite mis à jour.
Si l’instruction RTI est la dernière instruction à l’intérieur d’une boucle DO UNTIL, il faut
s’assurer que la pile de boucle (loop stack) soit mise à jour correctement.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 51
4.8.6 Boucle
4.8.6.1 Syntaxe
DO < addr > UNTIL term ;
4.8.6.3 Exemple
DO end _ loop UNTIL CE ; {le compteur de boucle CNTR}
{est décrémenté à chaque passage}
4.8.6.4 Description
DO UNTIL initie l’exécution d’une boucle dès l’instruction suivante. L’adresse <addr> de la
fin de boucle est également définie dans l’instruction. La boucle est répétée jusqu’à ce que la
condition de terminaison soit remplie. La condition de terminaison est testée durant la
dernière instruction de la boucle. L’adresse <addr> de la dernière instruction de la boucle est
directement contenue dans l’instruction.
Si CE est la condition de terminaison, le compteur de boucle CNTR est décrémenté à chaque
exécution de la boucle.
Lorsque l’instruction DO UNTIL est exécutée, l’adresse de la dernière instruction de la
boucle et la condition de terminaison est sauvée dans la pile de boucle (Loop stack). Le
contenu du compteur de programme PC est sauvé dans la pile de programme (PC stack)
après avoir été incrémenté de 1.
Les imbrications de boucle, sous-programmes, interruptions sont possibles dans les limites
des capacités des piles. La pile de boucle (Loop stack) peut contenir 4 niveaux d’imbrications
de boucle et la pile de programme (PC stack) peur contenir 16 niveaux pour les interruptions,
les appels de sous-programme et les boucles. Si une pile est pleine, le bit correspondant du
registre d’état SSTAT passe à « 1 » pour indiquer un dépassement de capacité et aucune
instruction de la boucle ne sera exécutée.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 52
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 53
4.8.7.1 Syntaxe
IDLE ;
IDLE(n) ;
4.8.7.3 Description
L’instruction IDLE permet de placer le DSP en mode basse consommation jusqu’à ce qu’une
interruption soit activée. Dans ce cas l’exécution du programme continue avec l’instruction
suivant l’instruction IDLE.
IDLE(n) est un cas particulier de IDLE ou la fréquence des horloges est réduite d’un facteur
n programmable. Cette instruction laisse le processeur fonctionnel mais à une cadence
d’horloge plus faible. Lorsque le mode IDLE(n) est actif, les horloges accessibles à
l’extérieur (SCLK et CLKOUT) ont également des fréquences réduites du facteur n.
Avec IDLE(n), le temps de réponse à une demande d’interruption est augmenté d’un facteur n.
Lors de l’activation d’une interruption, le retour au mode normal (suppression de la réduction
de la fréquence des horloges) prend n cycle de l’horloge CLKIN.
L’utilisation de IDLE(n) peut provoquer un fonctionnement incorrect des ports sériels
SPORT0 et SPORT1. En effet si l’horloge sérielle est externe, cette dernière peut avoir une
fréquence supérieure à la fréquence réduite SCLK et par conséquent une interruption de ces
ports peut ne pas être traitée suffisamment rapidement en raison du temps nécessaire pour
sortie du mode IDLE(n).
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 54
4.9.1.1 Syntaxe
PUSH
[ STS] [, POP CNTR] [, POP PC] [, POP LOOP] ;
POP
4.9.1.2 Exemple
POP CNTR, POP PC, POP LOOP ;
4.9.1.3 Description
PUSH STS (Push Status Stack) incrémente le pointeur de la pile des registres d’état et de
contrôle par 1 de manière à pointer une position libre et sauve le contenu des registres d’état
ASTAT, du contrôle de mode MSTAT et de masquage des interruptions IMASK.
Cette instruction est réalisée automatiquement lors d’un appel à une routine d’interruption.
POP STS (Pop Status Stack) permet la restitution des registres d’état ASTAT, du contrôle de
mode MSTAT et de masquage des interruptions IMASK, puis la mise à jour du pointeur de
pile par décrémentation de 1.
Cette instruction est réalisée automatiquement lors du retour d’une routine d’interruption
(RTI).
POP CNTR (Pop Counter Stack) permet la restitution du contenu du compteur de boucle
CNTR, puis la mise à jour du pointeur de pile par décrémentation de 1
POP LOOP (Pop Loop Stack) permet la mise à jour du pointeur de pile. Le contenu n’est pas
restitué et donc perdu.
POP PC (Pop PC Stack) permet la mise à jour du pointeur de pile. Le contenu n’est pas
restitué et donc perdu.
Cette instruction est réalisée automatiquement lors du retour d’une routine d’interruption
(RTI) ou d’un sous-programme (RTS) mais dans ce cas le contenu de la pile est restitué.
Plusieurs instructions peuvent être réalisées en un seul cycle d’horloge. Pour cela il suffit de
séparer chaque instruction par une virgule.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 55
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 56
4.9.2.1 Syntaxe
reg = TOPPCSTACK ;
NOP ;
4.9.2.2 Exemple
AX0 = TOPPCSTACK ; {restitution de la valeur supérieure de la pile dans le registre AX0}
NOP ; {permet une exécution correcte de la restitution}
4.9.2.4 Description
Une instruction spéciale de transfert de registre à registre permet de lire (restituer) ou écrire
(sauver) la valeur supérieure de la pile de programme (PC stack).
L’instruction POP PC met à jour le pointeur de pile de programme sans restituer la valeur
pointée. Pour obtenir cette restitution, il faut utiliser l’instruction suivante :
reg = POPPCSTACK ;
NOP ;
Il n’existe pas d’instruction de sauvetage du compteur de programme dans la pile PUSH PC.
Par contre il est possible d’utiliser l’instruction suivante :
TOPPCSTACK = reg ;
TOPOCSTACK ne doit pas être utilisé comme un registre dans des instructions autres que
celles mentionnées ici.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 57
4.9.3.1 Syntaxe
BIT _ REV
AV _ LATCH
ENA AR _ SAT
SEC _ REG [, ...] ;
DIS G _ MODE
M _ MODE
TIMER
4.9.3.3 Exemple
DIS AR _ STAT, ENA M _ MODE ;
4.9.3.4 Description
Permet d’activer (ENA) ou de désactiver (DIS) les divers modes de fonctionnement du DSP
définis dans le registre de contrôle de mode MSTAT en forçant les bits désignés à « 1 »,
respectivement à « 0 ».
Plusieurs instructions de ce type peuvent être réalisée en un seul cycle d’horloge, il suffit de
séparer chaque instruction par une virgule.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 58
4.9.4.1 Syntaxe
I0 M0
I1 M1
,
I2 M2
I3 M3
MODIFY ( );
I4 M4
I5 M5
,
I6 M6
I7 M7
4.9.4.2 Exemple
MODIFY(I1, M1) ;
4.9.4.3 Description
Cette instruction permet de déterminer l’adresse suivante que doit pointer le contenu du
registre Ix.
La prochaine adresse du pointeur Ix est donnée par la relation :
Prochaine Adresse = ModuloLx {Ix + My − Bx} + Bx
et la condition My < Lx .Cette condition assure que la prochaine adresse sera comprise
dans le cycle suivant du buffer circulaire. L’adresse de base Bx d’un buffer circulaire x de
n −1
longueur Lx vaut 2n ou un multiple de 2n ou n satisfait la condition 2 < Lx ≤ 2 , soit
n
n
Bx = 2
En d’autres mots, l’adresse de base est L arrondie vers la puissance de 2 supérieure.
En pratique, il n’est pas nécessaire de calculer n. Le Linker place automatiquement les
buffers circulaires aux adresses adéquates.
La sélection des registres Ix et My doit être faites à l’intérieur d’un même générateur
d’adresse DAG1,2. Soit pour le DAG1, x et y sont compris entre 0 et 3 et pour DAG2, x et y
sont compris entre 4 et 7.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 59
4.9.5.1 Syntaxe
NOP ;
4.9.5.2 Description
Cette instruction ne provoque aucune opération. Sa durée est de un cycle d’horloge.
L’exécution du programme continue avec l’instruction suivant l’instruction NOP.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 60
4.9.6.1 Syntaxe
ENA INTS ;
DIS INTS ;
4.9.6.2 Description
Par défaut les interruptions ne sont pas masquées après un RESET.
DIS INTS permet de masquer toutes les interruptions, même l’interruption (non-masquable)
PWD (Power Down), ceci sans changement du registre de masquage des interruptions
IMASK.
ENA INTS permet de démasquer les interruptions selon l’état du registre IMASK.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 61
4.10.1.1 Syntaxe
I0 M0
I1 M1
,
I2 M2
I3 M3
DM( )
I4 M4
< ALU >
I5 M5
< MAC > , dreg = ,
I6 M6 ;
< SHIFT > I7 M7
I4 M4
I5 M5
PM( , )
I6 M6
I7 M7
4.10.1.2 Exemple
(1) → AR = AX0 + AY0 , AX0 = DM(I0, M0) ; {séquence exécutée de gauche à droite}
(2) → AX0 = DM(I0, M0) , AR = AX0 + AY0 ; {séquence exécutée de droite à gauche}
4.10.1.4 Description
Exécution simultanée d’une instruction arithmétique au moyen de l’ALU, du MAC ou du
décaleur à barillet et d’un transfert de données entre la mémoire de données (DM) ou de
programme (PM) et un registre de données (dreg).
Lorsqu’il y a combinaison entre une opération arithmétique et un transfert de données,
l’adressage du transfert de données doit être indirect avec post-modification. Pour un
adressage indirect linéaire (non circulaire), le registre L correspondant au registre I doit être
mis à « 0 ». Le contenu de la source est toujours justifié à droite dans le registre de
destination
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 62
est une séquence correcte d’écriture d’une séquence d’opération multiple. Par contre
(2) → AX0 = DM(I0, M0) , AR = AX0 + AY0;
4.10.1.5.1 <ALU>
ASTAT : 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
- - - * * * * *
AZ Mise à 1 si le résultat est nul, sinon mise à 0.
AN Mise à 1 si le résultat est négatif, sinon mise à 0.
AV Mise à 1 si le résultat arithmétique est en dépassement de capacité, sinon mise à 0.
AC Mise à 1 si il y a une retenue, sinon mise à 0, sinon mise à 0.
AS Est affecté seulement pour l’instruction ABS. Mise à 1 si l’opérande (source) est
négatif.
4.10.1.5.2 <MAC>
ASTAT : 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
- * - - - - - -
MV Mise à 1 si le résultat arithmétique est en dépassement de capacité, sinon mise à 0
Il y a dépassement de capacité si les 9 bits de poids forts de MR ne sont pas tous des
0 ou tous des 1.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 63
4.10.1.5.3 <SHIFT>
ASTAT : 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
* - - - - - - -
SS Est affecté seulement pour l’instruction EXP.
Contient la valeur logique du bit MSB de l’entrée (extension du signe) si AV=0
Contient l’inverse logique du MSB de l’entrée si AV=1.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 64
4.10.2.1 Syntaxe
< ALU >
< MAC > , dreg = reg ;
< SHIFT >
4.10.2.2 Exemple
(1) → AR = AX0 + AY0 , AX0 = MR1 ; {séquence exécutée de gauche à droite}
(2) → AX0 = MR1 , AR = AX0 + AY0 ; {séquence exécutée de droite à gauche}
4.10.2.4 Description
Exécution simultanée d’une instruction arithmétique au moyen de l’ALU, du MAC ou du
décaleur à barillet et d’un transfert de données entre registres de données (dreg).
Le contenu du registre de source est toujours justifié à droite dans le registre de destination
L’opération arithmétique doit être inconditionnelle.
Toutes les opérations de L’ALU, du MAC et du décaleur à barillet sont autorisées, excepté le
décalage immédiat et les instructions de division DIVS et DIVQ.
La séquence fondamentale de déroulement des opérations sur un cycle d’instruction (tCLKOUT)
commence toujours par la lecture des sources en début de cycle et l’écriture dans les
destinations à la fin du même cycle. Il est donc possible d’utiliser le même registre comme
source et comme destination. Dans ce cas le registre fournit une valeur en début de cycle et
est écrit en fin de cycle.
Par exemple
(1) → AR = AX0 + AY0, AX0 = MR1;
est une séquence correcte d’écriture d’une séquence d’opération multiple. Par contre
(2) → AX0 = MR1 , AR = AX0 + AY0;
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 65
4.10.2.5.1 <ALU>
ASTAT : 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
- - - * * * * *
AZ Mise à 1 si le résultat est nul, sinon mise à 0.
AN Mise à 1 si le résultat est négatif, sinon mise à 0.
AV Mise à 1 si le résultat arithmétique est en dépassement de capacité, sinon mise à 0..
AC Mise à 1 si il y a une retenue, sinon mise à 0, sinon mise à 0.
AS Est affecté seulement pour l’instruction ABS. Mise à 1 si l’opérande (source) est
négatif.
4.10.2.5.2 <MAC>
ASTAT : 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
- * - - - - - -
MV Mise à 1 si le résultat arithmétique est en dépassement de capacité, sinon mise à 0
Il y a dépassement de capacité si les 9 bits de poids forts de MR ne sont pas tous des
0 ou tous des 1.
4.10.2.5.3 <SHIFT>
ASTAT : 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
* - - - - - - -
SS Est affecté seulement pour l’instruction EXP.
Contient la valeur logique du bit MSB de l’entrée (extension du signe) si AV=0
Contient l’inverse logique du MSB de l’entrée si AV=1.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 66
4.10.3.1 Syntaxe
I0 M0
I1 M1
,
I2 M2
I3 M3
DM( )
I4 M4
< ALU >
I5 M5
,
I6 M6 = dreg , < MAC > ;
I7 M7 < SHIFT >
I4 M4
I5 M5
PM( , )
I6 M6
I7 M7
4.10.3.2 Exemple
(1) → DM(I0, M0) = AR , AR = AX0 + AY0 ; {séquence exécutée de gauche à droite}
(2) → AR = AX0 + AY0 , DM(I0, M0) ; {séquence exécutée de droite à gauche}
4.10.3.4 Description
Exécution simultanée d’un transfert de données entre un registre de données (dreg) et la
mémoire de données (DM) ou de programme (PM) et d’une instruction arithmétique au
moyen de l’ALU, du MAC ou du décaleur à barillet.
Lorsqu’il y a combinaison entre un transfert de données et une opération arithmétique,
l’adressage du transfert de données doit être indirect avec post-modification. Pour un
adressage indirect linéaire (non circulaire), le registre L correspondant au registre I doit être
mis à « 0 ». Le contenu de la source est toujours justifié à droite dans le registre de
destination.
L’opération arithmétique doit être inconditionnel. Toutes les opération de L ‘ALU, du MAC
et du décaleur à barillet sont autorisées, exceptés le décalage immédiat et les instruction de
division DIVS et DIVQ.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 67
4.10.3.5.1 <ALU>
ASTAT : 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
- - - * * * * *
AZ Mise à 1 si le résultat est nul, sinon mise à 0.
AN Mise à 1 si le résultat est négatif, sinon mise à 0.
AV Mise à 1 si le résultat arithmétique est en dépassement de capacité, sinon mise à 0.
AC Mise à 1 si il y a une retenue, sinon mise à 0, sinon mise à 0.
AS Est affecté seulement pour l’instruction ABS. Mise à 1 si l’opérande (source) est
négatif.
4.10.3.5.2 <MAC>
ASTAT : 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
- * - - - - - -
MV Mise à 1 si le résultat arithmétique est en dépassement de capacité, sinon mise à 0
Il y a dépassement de capacité si les 9 bits de poids forts de MR ne sont pas tous des
0 ou tous des 1.
4.10.3.5.3 <SHIFT>
ASTAT : 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
* - - - - - - -
SS Est affecté seulement pour l’instruction EXP.
Contient la valeur logique du bit MSB de l’entrée (extension du signe) si AV=0
Contient l’inverse logique du MSB de l’entrée si AV=1.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 68
4.10.4.1 Syntaxe
AX0 I0 M0 AY0 I4 M4
AX1 I1 M1 AY1 I5 M5
= DM( , ), = PM( , )
MX0 I2 M2 MY0 I6 M6
MX1 I3 M3 MY1 I7 M7
4.10.4.2 Description
Exécution simultanée de deux instructions de lecture en mémoire, l’une en mémoire de
données (DM) et l’autre en mémoire de programme (PM). Chaque opération de lecture
transfert le contenu d’une position mémoire dans un registre de données. Pour que ces
instructions puissent être exécutées simultanément il faut, selon la structure de l’ALU et du
MAC, que le registre de destination de la lecture de la mémoire de données (DM) soit en X et
que le registre de destination de la lecture de la mémoire de programme (PM) soit en Y.
L’adressage du transfert de données doit être indirect avec post-modification. Pour un
adressage indirect linéaire (non circulaire), le registre L correspondant au registre I doit être
mis à « 0 ». Le contenu de la source est toujours justifié à droite dans le registre de
destination.
Cette multifonction fait appelle à trois états devant être chargés, soit l’instruction elle-même,
et les deux données. Il n’y a pas de cycle d’horloge supplémentaire pour autant que seul un
de ces trois états se trouve en mémoire externe.
Si deux accès en mémoire externe sont nécessaires, par exemple les données de la mémoire
de programme (PM) et de la mémoire de données (DM) ou l’instruction et une donnée, il y
aura un cycle d’horloge supplémentaire. Si trois accès en mémoires externes sont nécessaires
alors deux cycles d’horloge supplémentaires sont ajoutés.
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 69
4.10.5.1 Syntaxe
AX0 I0 M0 AY0 I4 M4
< ALU > AX1 I1 M1 AY1 I5 M5
, = DM( , ), = PM( , )
< MAC > MX0 I2 M2 MY0 I6 M6
MX1 I3 M3 MY1 I7 M7
4.10.5.2 Exemple
(1) → MR = MR + MX0 ∗ MY0 (UU) , MX0 = DM(I0, M0) , MY0 = PM(I4, M4) ;
(2) → MX0 = DM(I0, M0) , MY0 = PM(I4, M4) , MR = MR + MX0 ∗ MY0 (UU) ;
4.10.5.3 Description
Exécution simultanée d’une instruction arithmétique au moyen de l’ALU, ou du MAC et
d’un double transfert de données entre la mémoire de données (DM) et un registre et la
mémoire de programme (PM) et un registre. Pour que ces instructions puissent être exécutées
simultanément il faut, selon la structure de l’ALU et du MAC, que le registre de destination
de la lecture de la mémoire de données (DM) soit en X et que le registre de destination de la
lecture de la mémoire de programme (PM) soit en Y
Lorsqu’il y a combinaison entre une opération arithmétique et un transfert de données,
l’adressage du transfert de données doit être indirect avec post-modification. Pour un
adressage indirect linéaire (non circulaire), le registre L correspondant au registre I doit être
mis à « 0 ». Le contenu de la source est toujours justifié à droite dans le registre de
destination
L’opération arithmétique doit être inconditionnelle. Toutes les opérations de L ‘ALU et du
MAC sont autorisées, excepté les instruction de division DIVS et DIVQ. Le résultat dans les
registres de résultats, soit AR pour une opération avec l’ALU et MR pour une opération avec
le MAC.
Cette multifonction fait appelle à trois états devant être chargés, soit l’instruction elle-même,
et les deux données. Il n’y a pas de cycle d’horloge supplémentaire pour autant que seul un
de ces trois états se trouve en mémoire externe.
Si deux accès en mémoire externe sont nécessaires, par exemple les données de la mémoire
de programme (PM) et de la mémoire de données (DM) ou l’instruction et une donnée, il y
aura un cycle d’horloge supplémentaire. Si trois accès en mémoires externes sont nécessaires
alors deux cycles d’horloge supplémentaires sont ajoutés.
La séquence fondamentale de déroulement des opérations sur un cycle d’instruction (tCLKOUT)
commence toujours par la lecture des sources en début de cycle et l’écriture dans les
destinations à la fin du même cycle. Il est donc possible d’utiliser le même registre comme
source et comme destination. Dans ce cas le registre fournit une valeur en début de cycle et
est écrit en fin de cycle.
Par exemple
(1) → MR = MR + MX0 ∗ MY0 (UU), MX0 = DM(I0, M0), MY0 = PM(I4, M4) ;
est une séquence correcte d’écriture d’une séquence d’opérations multiples. Par contre
CD\DSP\Cours\Chap4_8
ADMC401 : 4. SET D’INSTRUCTIONS Page 70
(2) → MX0 = DM(I0, M0), MY0 = PM(I4, M4), MR = MR + MX0 ∗ MY0 (UU) ;
4.10.5.4.1 <ALU>
ASTAT : 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
- - - * * * * *
4.10.5.4.2 <MAC>
ASTAT : 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
- * - - - - - -
CD\DSP\Cours\Chap4_8
ADMC401 : 5. DIRECTIVES ASSEMBLEUR Page 71
5. DIRECTIVES ASSEMBLEUR
5.1 INTRODUCTION
L’assembleur traduit les fonctions écrites en code source dans plusieurs fichiers, lesquels sont
utilisés par un éditeur de lien afin de former un seul fichier exécutable. Les directives
assembleur sont utilisées pour définir la structure du programme en tenant compte de la
définition de macro instructions, de variables, …
ASSEMBLEUR
Fichier listing
application.lst
Fichier
d'initialisation
application.int
Fichier objet
application.obj
Fichier de code
application.cde
La Figure 5-1 montre que l’assembleur utilise les fichiers d’entrées écrits en code source
(*.dsp et *.h) pour générer quatre types de fichiers de sortie, soit
Un fichier objet *.OBJ : contient des informations au sujet des allocations
mémoires et de la définition des symboles. L’allocation
mémoire permet à l’éditeur de lien de définir les adresses
réelles de stockage du programme et des données.
Un fichier code *.CDE : contient les instructions dont une partie des symboles de
sont pas connus (définition dans d’autres programmes
source).
CD\DSP\Cours\Chap4_8
ADMC401 : 5. DIRECTIVES ASSEMBLEUR Page 72
Un fichier listing *.LST : ce fichier (optionnel) donne des informations sur les
valeurs des variables et des buffers définis sous forme
symbolique. Il contient également des indications sur les
erreurs de compilation
Un fichier d’initialisation *.INT : contient des informations sur les valeurs initiales des
variables et des buffers.
Les fichiers *.OBJ, *.CDE, et *.INT sont des fichiers d’entrée pour l’éditeur de lien.
Le bloc assembleur définit à la Figure 5-1 contient trois parties distincts :
− Le préprocesseur pour langage C (C langage preprocessor)
− Le préprocesseur assembleur (Assembler preprocessor)
− Le corps de l’assembleur (Core assembler)
Les deux premiers préprocesseur sont pour le premier un préprocesseur compatible avec le
langage C (ANSI-standard C langage) et pour le second un préprocesseur de l’assembleur
proprement dit. Le préprocesseur C reconnaît les directives d’assembleur telles que #define,
#include, … Le préprocesseur de l’assembleur supporte les directives .MODULE, .VAR, …
La Figure 5-2 illustre le déroulement de l’exécution de l’assembleur.
"ASM21"
PREPROCESSEUR C
PREPROCESSEUR ASSEMBLEUR
CORPS DE L'ASSEMBLEUR
FICHIER *.CDE
FICHIER *.OBJ
FICHIER *.INT
FICHIER *.LST
CD\DSP\Cours\Chap4_8
ADMC401 : 5. DIRECTIVES ASSEMBLEUR Page 73
Directives : Définition
#include : Insert un texte d’un autre fichier source.
#define : Définition d’une macro.
#undef : Enlève la définition d’une macro.
#if : Insertion conditionnelle de texte.
#ifdef : Insertion conditionnelle de texte. Si le nom de la macro suivant la
directive #ifdef est défini, il y a insertion.
#ifndef : Insertion conditionnelle de texte. Si le nom de la macro suivant la
directive #ifndef n’est pas défini, il y a insertion
#else : Insertion de texte si les tests conditionnels #if, #ifdef, ou #ifndef se sont
avérés faux
#endif : Termine l’insertion conditionnelle d’un texte.
CD\DSP\Cours\Chap4_8
ADMC401 : 5. DIRECTIVES ASSEMBLEUR Page 74
CD\DSP\Cours\Chap4_8
ADMC401 : 5. DIRECTIVES ASSEMBLEUR Page 75
{*******************************************************
* initialisation du convertisseur AD *
********************************************************}
.MACRO ADC_INIT;
call ADC_INIT_;
.ENDMACRO;
#endif
Le commentaire ne peut pas continuer sur la ligne suivante. Si la ligne est insuffisante pour le
commentaire, il faut impérativement ouvrir une nouvelle accolade à la ligne suivante.
Directives Définition
.MODULE : Définit le début d’un programme. Un fichier source (*.dsp) ne peut
contenir qu’une seule directive .MODULE.
.ENDMOD : Définit la fin d’un programme initié par la directive .MODULE.
.VAR : Définit un ensemble de positions mémoire.
.INCLUDE : Insert un fichier d’entête dans un fichier source.
.MACRO : Définit le début d’une macro.
.ENDMACRO : Définit la fin d’une macro.
.LOCAL : Utilisé dans une macro contenant une étiquette afin de créer une étiquette
différente pour chaque appel de la macro.
.GLOBAL : Permet à des variables et des buffers d’être reconnus hors du module
dans lesquels ils ont été crées.
.ENTRY : Permet à des étiquettes d’être reconnues hors du module dans lesquelles
elles ont été créées.
.EXTERNAL : Permet l’utilisation de variables, buffers ou étiquettes définies hors du
module en question.
.CONST : Définition d’une constante sous la forme d’un nombre.
.INT : Permet d’initialiser des variables de 16 bits.
.INT24 : Permet d’initialiser des variables de 24 bits.
Quelques directives sont associées aux format du fichier optionnel *.LST.
Directives : Définition
.NEWPAGE : Insertion d’un saut de page lors de l’impression.
.PAGELENGTH lines : Insertion d’un saut de page après un nombre de lignes défini.
CD\DSP\Cours\Chap4_8
ADMC401 : 5. DIRECTIVES ASSEMBLEUR Page 76
Directives : Définition
.LEFTMARGIN columns : Retrait de la marge de gauche en nombre de colonnes.
.INDENT columns : Retrait du code source en nombre de colonnes.
.PAGEWIDTH columns : Largueur de la page ou insertion d’une marge à droite.
Par défaut, c’est à dire sans mention d’attribut, le type de mémoire RAM est sélectionné.
5.3.1.2 Exemple : Déclaration d’un module dans à une adresse absolue définie
La directive suivante permet de placer le début d’un module le programme à une adresse
absolue bien définie
.MODULE/RAM/ABS=0x0040 nom_du_module ;
Dans ce cas l’adresse de départ du module sera l’adresse absolue hexadécimale 0x0040.
CD\DSP\Cours\Chap4_8
ADMC401 : 5. DIRECTIVES ASSEMBLEUR Page 77
Lors du choix des attributs RAM, ROM, SEG et ABS pour les modules amorçables
(bootable), ceci implique que le code est se trouve dans la mémoire utilisée pour l’exécution
du programme et non pas dans la mémoire d’amorçage (Boot Memory). Ainsi lors de la
configuration de la mémoire à partir de laquelle le programme sera exécuté, il faut penser
mémoire de programme (PM) et mémoire de données (DM).
L’éditeur de lien (linker) détermine ou le code et les données seront placés dans la mémoire
de données (DM) et la mémoire de programme (PM) en accord avec les déclarations de
segment dans le fichier d’architecture *.ach et les attributs définis dans la directive
.MODULE du préprocesseur de l’assembleur. L’éditeur de lien définit également la structure
des pages de boot, il n’est donc pas possible pour le programmateur de spécifier ou le module
sera placé dans la mémoire de boot (BM).
Il faut également savoir que le programme ne peut être exécuté depuis la mémoire de boot
(BM). Une page complète de la mémoire de boot (BM) doit d’abord être chargée dans les
mémoires de programme (PM) et de données (DM) avant que le code puisse être exécuté.
Si un module spécifique doit se trouver en mémoire RAM interne ou externe durant
l’exécution d’une page particulière n, il faut avoir défini l’attribut BOOT avec le numéro de
la page n en question de manière à ce que l’éditeur de lien puisse réserver de la place
mémoire pour le module dans le cadre réservé à l’exécution de la page n.
L’éditeur de lien génère un fichier *.MAP montrant la disposition du programme en mémoire
de boot (BM) ainsi que la plan mémoire correspondant du code dans la mémoire d’exécution
(mémoire PM et DM, interne ou externe).
On cite ici deux exemples
.MODULE/RAM/PM/ABS=0x0060/BOOT=0/BOOT3 nom_du_programme ;
CD\DSP\Cours\Chap4_8
ADMC401 : 5. DIRECTIVES ASSEMBLEUR Page 78
La Figure 5-3 illustre le cas d’une surécriture lors du chargement d’une nouvelle page en
mémoire RAM. Le programme routine_0 a été chargé en RAM lors du chargement de la
page 0. Une commande force le chargement de la page 1 de la mémoire de boot (BM). Selon
les attributs lors de la déclaration des modules, il y a écriture du buffer coeff_1[16] par-dessus
le programme routine_0
En page 0 :
.MODULE/RAM/BOOT=0/SEG=pm_ext routine_0 {pm_ext est défini dans le fichier d’architecture} ;
En page 1 :
.MODULE/RAM/BOOT=1 routine_1 {pm_ext est défini dans le fichier d’architecture} ;
.VAR/RAM/PM/SEG=pm_ext coeff_1[16] {buffer déclaré en mémoire PM dans le segment pm_ext}
Boot page 1
ROM
Coeff_1[16]
Mémoire de programme
interne RAM Mémoire de programme
externe RAM
re
cr itu
s ur é routine_0
2k Coeff_1[16]
routine_1
pm_ext
Pour éviter cette surécriture, il faut utiliser l’attribut STATIC dans la directive du module du
programme routine_0
En page 0 :
.MODULE/RAM/BOOT=0/STATIC/SEG=pm_ext routine_0 {pm_ext est défini dans le fichier d’architecture} ;
En page 1 :
.MODULE/RAM/BOOT=1 routine_1 {pm_ext est défini dans le fichier d’architecture} ;
.VAR/RAM/PM/SEG=pm_ext coeff_1[16] {buffer déclaré en mémoire PM dans le segment pm_ext}
CD\DSP\Cours\Chap4_8
ADMC401 : 5. DIRECTIVES ASSEMBLEUR Page 79
Boot page 1
ROM
Coeff_1[16]
Mémoire de programme
interne RAM Mémoire de programme
externe RAM
zone interdite
routine_0
d'écriture
2k
Coeff_1[16]
pm_ext
routine_1
Figure 5-4 : Chargement d’une page de la mémoire de boot avec préservation d’un module en RAM
CD\DSP\Cours\Chap4_8
ADMC401 : 5. DIRECTIVES ASSEMBLEUR Page 80
Par défaut, c’est à dire sans mention d’attribut, la variable ou le buffer seront placés (avec
possibilité d’être déplacé : relocatable) en mémoire RAM de données (DM). Plusieurs
variables et buffers peuvent être définis sur la même ligne, la seule limite est le nombre
maximum de caractères, fixé à 200.
Lors d’une déclaration multiple sur une même ligne, les variables et les buffers sont placés de
manière continue dans la mémoire. Dans ce cas, si l’attribut CIRC est ajouté, un seul buffer
circulaire est crée.
ou encore
.CONST longueur=10
.VAR/DM/RAM/SEG=pmdata coefficients[longueur] ;
La longueur du buffer est de 5 et donc la valeur de n=3. Dans ce cas les adresses de bases
valides doivent être un multiple de 8. On peut donc écrire
.VAR/CIRC/SEG=0x…8 aa[5] {ou SEG=0x…0}
CD\DSP\Cours\Chap4_8
ADMC401 : 5. DIRECTIVES ASSEMBLEUR Page 81
xxxx0000 aa xxxxx000 aa
xxxx0001 xxxxx001
xxxx0010 xxxxx010
xxxx0011 xxxxx011
xxxx0100 xxxxx100
xxxx0101 bb
xxxx0110
xxxx0111 bb
xxxxx000
xxxx1000
xxxxx001
xxxx1001
xxxxx010
xxxx1010 cc xxxxx011
xxxx1011 xxxxx100
xxxx1100
xxxx1101
xxxx1110
xxxxx000 cc
xxxxx001
xxxxx010
xxxxx011
xxxxx100
(a) déclaration sur une ligne (b) déclaration sur plusieurs lignes
Figure 5-5 : Buffers circulaires
Dans ce cas, la déclaration correspond à un seul buffer circulaire dont la longueur est la
somme des buffers déclarés sur la ligne, soit 15. L’adresse de base est donc définie
pour n=4. L’adresse de base vaut donc 0x….0000
− Déclaration des buffers sur des lignes séparées
.VAR/CIR aa[5] ;
.VAR/CIR bb[5] ;
.VAR/CIR cc[5] ;
Dans ce cas, chaque buffer circulaire aura une adresse de base. Comme chaque buffer à
une longueur de 5, n=3 et par conséquent les adresses de base valent 0x….000
L’exemple suivant montre une application de deux lookup tables (buffers) définissant un sinus et
un cosinus.
.VAR/CIRC sin[256], cos[768] ; {déclaration sur une ligne donc un seul buffer circulaire}
La longueur du buffer circulaire est de 1024, donc n=10 et par conséquent l’adresse de bas B vaut
0x…0000000000.
Dans l’application, les pointeurs des buffers sont définit comme :
I0=^cos ; L0=%sin+%cos ; {L0=1024}
I1=^sin ; L1=%sin+%cos ; {L1=1024}
CD\DSP\Cours\Chap4_8
ADMC401 : 5. DIRECTIVES ASSEMBLEUR Page 82
cos[xcos]
sin[xsin] Buffer circulaire sin[I1]
Origine sin
xsin=[0...255] xcos=[0...768]
Adresse de base B
CD\DSP\Cours\Chap4_8
ADMC401 : 5. DIRECTIVES ASSEMBLEUR Page 83
CD\DSP\Cours\Chap4_8
ADMC401 : 5. DIRECTIVES ASSEMBLEUR Page 84
{Appel de la macro}
transfert_memoire(^buffer_in, ^buffer_out, long_buffer, PM, DM)
CALL ADC_Scale
CD\DSP\Cours\Chap4_8
ADMC401 : 6. ARCHITECTURE MEMOIRE Page 85
6.1 INTRODUCTION
« System builder » est un outil software permettant de traduire la description de l’architecture
du hardware en information utilisable par l’éditeur de lien (linker)
SYSTEM BUILDER
Le fichier source d’entrée (Cible.sys) doit être une description du plan d’adressage des
mémoires des périphériques propres à une application particulière. Le fichier de sortie est
utilisé par l’éditeur de lien pour l’implantation du programme d’application dans les
différents segments de mémoires de données (DM) et de programme (PM). Il est également
possible de définir les zones dédicacées à la mémoire de boot (BM).
Le commentaire ne peut pas continuer sur la ligne suivante. Si la ligne est insuffisante pour le
commentaire, il faut impérativement ouvrir une nouvelle accolade à la ligne suivante.
Directives Définition
.SYSTEM : Définit le début de fichier source de spécifications du système.
.ENDSYS : Définit la fin de fichier source de spécifications du système.
.ADSP21xx : Cette directive permet l’identification du DSP de la famille ADSP21xx.
.MMAP : Cette directive spécifie l’état de la broche MMAP du système cible.
.SEG : Définit un segment de la mémoire de programme(PM) de données (DM)
ou de boot (BM).
CD\DSP\Cours\Chap4_8
ADMC401 : 6. ARCHITECTURE MEMOIRE Page 86
A chaque segment est assigné un nom. Ce nom peut être directement repris lors des
déclarations de directives assembleur .MODULE ou .VAR. La longueur du segment est
définie entre crochet (bracket). La longueur est définie comme un nombre de données (16
bits pour la mémoire de données (DM)) ou d’instruction (24bits pour la mémoire de
programme (PM)).
Les deux attributs suivants doivent accompagnés la directive .SEG :
PM ou DM ou BOOT=0 … 7 : allocation mémoire
RAM ou ROM : type de mémoire
Les attributs suivants sont optionnels :
ABS=adresse : adresse initiale du segment
DATA ou CODE ou DATA/CODE : type de valeur à stocker dans le segment considéré
Les segments de mémoire déclarés avec l’attribut PM peuvent stocker des données (DATA),
des instructions (CODE) ou des deux (DATA/CODE).
CD\DSP\Cours\Chap4_8
ADMC401 : 6. ARCHITECTURE MEMOIRE Page 87
Les segments de mémoire déclarés avec l’attribut DM ne peuvent stocker que des données
(DATA).
Les segments de mémoire déclarés avec l’attribut BOOT sont par défaut des segments des
données et des instructions (DATA/CODE).
Les attributs BOOT doivent être référencés à une page par segment.
Il s’agit ici d’une déclaration d’un segment de mémoire de programme (PM) dont l’adresse
de départ est 0x0000 et la longueur de 2048 mots de 24 bits.
Exemple 2 : déclaration d’un segment de mémoire de boot
.SEG/ROM/BOOT=0 boot_mem[1536] ;
Il s’agit ici d’une déclaration d’un segment de mémoire de boot situé dans la page 0 dont la
longueur est de 1536 mots de 8 bits.
RESERVED BY MONITOR
EXTERNAL RAM 12Kx24 0x3BFF
0x3C0 0
CD\DSP\Cours\Chap4_8
ADMC401 : 6. ARCHITECTURE MEMOIRE Page 88
16 Bits wide
24 Bits wide
(a) Plan de la mémoire de programme (PM) (b) Plan de la mémoire de données (DM)
Figure 6-4 : Plan mémoire pour la carte CHPSE
CD\DSP\Cours\Chap4_8
ADMC401 : 6. ARCHITECTURE MEMOIRE Page 89
CD\DSP\Cours\Chap4_8
ADMC401 : 7. EDITEUR DE LIEN Page 90
7.1 INTRODUCTION
L’éditeur de lien utilise les fichiers de sortie de l’assembleur suivants :
− Le fichier objet *.OBJ
− Le fichier de code *.CDE
− Le fichier d’initialisation *.INT
Fichier
d'initialisation
application.int
Fichier objet
application.obj
Fichier de code
application.cde
Fichier d'initialisation
des données
application.dat
Ficher de description
de l'architecture
ADMC401.ach
LINKER
Fichier
exécutable Fichier
de plan mémoire Fichier d'assignation
application.exe
application.map des symboles
application.sym
Une description de ces fichiers a été donnée au §5.1. L’éditeur de lien examine chaque
module assemblé et détermine la valeur des symboles définie par les directives .GLOBAL,
.ENTRY et .EXTERNAL. Il assigne des adresses absolues aux fragments de code et de
données définis comme réimplantable (relocatable). L’éditeur de lien lit également le fichier
CD\DSP\Cours\Chap4_8
ADMC401 : 7. EDITEUR DE LIEN Page 91
d’architecture *.ACH qui donne des informations sur les adresses des divers segments de
mémoire en fonction du design de la carte électronique (hardware). L’emplacement du fichier
d’architecture doit être définit à l’aide du paramètre (switch) -a.
L’éditeur de lien peut générer trois fichiers différents. Le fichier exécutable *.EXE, qui est
une image du contenu de la mémoire, est toujours généré. Il contient le code opératoire
(opcode) et les variables devant être stockés en mémoire. Le fichier de plan mémoire (map
listing file)*.MAP, optionnel, donne des informations condensées du programme lié. Le
fichier *.SYM (symbol table file), optionnel, donne une liste exhaustive, avec leur valeur
absolue et leur emplacement de référence, de tous les symboles utilisés rencontrés et assignés
par l’éditeur de lien.
CD\DSP\Cours\Chap4_8
ADMC401 : 7. EDITEUR DE LIEN Page 92
CD\DSP\Cours\Chap4_8
ADMC401 : 7. EDITEUR DE LIEN Page 93
3. Recherche et ouvre les fichiers objet *.OBJ de la ou des librairies afin de déterminer la
valeur des symboles non définie. Tous les symboles déclarés comme publics, soit par les
directives assembleur .ENTRY pour les étiquettes et .GLOBAL pour les variables et les
buffers.
CD\DSP\Cours\Chap4_8
ADMC401 : 8. CREATION DE FICHIERS DE COMMANDE Page 94
_incl401 : file_1.h
Disk
file_2.h
...
DSP_LABO s _lib401 : file_1.dsp
tête
d 'en file_2.dsp
rs m es
h ie ram
Manip_1 F ic o g ...
s-pr
d e sou
s _Template : Build.bat
_incl401 hier ipal
Fic e princ Make.bat
a m m an de
_lib401 Progr d e co m m Main.dsp
ie r s
et fich Main.h
_Template
Fichiers d'architecture _TgtFiles : admc401.ach
_TgtFiles admc401.sys
Le fichier de commande Build.bat doit contenir le chemin du directoire dans lequel se trouve
le projet. Il fait référence au fichier Make.bat qui lui contient toutes les commandes pour
l’assemblage et lien des fichiers d’entêtes, de sous-programmes avec le programme principal.
make Disk:\DSP_LABO\Manip_1
Le fichier de commande Make.bat commence par assembler le programme principal par la commande
Les commandes suivantes permettent d’assembler tous les fichiers de librairie utiles à
l’application.
ASM21 -UI%1\_incl401 -2171 -l -dADMC401 %1\_lib401\file_1
Une fois que tous les fichiers nécessaires à l’application ont été assemblés, la commande
suivante permet de faire le lien entre tous les fichiers de librairie afin de créer un fichier de
librairie unique nommée library.
LIB21 library %1\_lib401\file_1 %1\_lib401\file_2 ……
Enfin l’éditeur de lien proprement dit va faire le lien entre la librairie utilisateur library et le
programme principal Main pour générer entre autre un fichier exécutable.
LD21 Main -user library -a %1\_TgtFiles\admc401.ach -g -e Main -x > errors.err
La signification exacte de chaque fichier et switch peut être connue à l’aide des commandes
ASM21 -h, LIB21 -h, LD -h.
CD\DSP\Cours\Chap4_8
ADMC401 : 8. CREATION DE FICHIERS DE COMMANDE Page 95
Disk Build.bat
@echo off
echo usage : MAKE LIBRARY_INSTALLATION_DIR
echo modify the directory to your case in the following command!
DSP_LABO echo type the whole path including driveletter:\
make Disk:\DSP_LABO\Manip_1
Manip_1
Make.bat
_incl401 @echo off
del main.obj
_lib401 del %1\_lib401\*.obj
rem ************************************************************************************
_Template rem COMPILE APPLICATION FILE
rem ADD the following lines FOR EACH ADDITIONAL FILE YOU NEED TO COMPILE
rem ASM21 -UI%1\_incl401 -2171 -l -dADMC401 filemane > errors.err
_TgtFiles rem IF ERRORLEVEL 2 GOTO ERROR
rem IF ERRORLEVEL 1 GOTO ERROR
rem ************************************************************************************
_Template : Build.bat ASM21 -UI%1\_incl401 -2171 -l -dADMC401 Main > errors.err
Make.bat IF ERRORLEVEL 2 GOTO ERROR
IF ERRORLEVEL 1 GOTO ERROR
Main.dsp
Main.h echo Application Files compiled sucessfully ...
rem ************************************************************************************
_incl401 : file_1.h rem COMPILE ALL THE LIBRARY FILES
rem ************************************************************************************
file_2.h
copy Main.h %1\_lib401\Main.h
... ASM21 -UI%1\_incl401 -2171 -l -dADMC401 %1\_lib401\file_1 > errors.err
IF ERRORLEVEL 2 GOTO ERROR
_lib401 : file_1.dsp IF ERRORLEVEL 1 GOTO ERROR
file_2.dsp ASM21 -UI%1\_incl401 -2171 -l -dADMC401 %1\_lib401\file_2 > errors.err
IF ERRORLEVEL 2 GOTO ERROR
... IF ERRORLEVEL 1 GOTO ERROR
…..
_TgtFiles : admc401.ach LIB21 library %1\_lib401\file_1 %1\_lib401\file_2 …… > errors.err
admc401.sys IF ERRORLEVEL 2 GOTO ERROR
IF ERRORLEVEL 1 GOTO ERROR
rem *************************************************************************************************************************
rem LINK APPLICATION WITH LIBRARY
rem Usage: LD21 filename1 [filename2,...] -user library -a %1\_TgtFiles\admc401.ach -g -e Main -x > errors.err
rem **************************************************************************************************************************
@ECHO OFF
ECHO **********************************************
ECHO * Compilation completed successfully *
ECHO **********************************************
GOTO END
:ERROR
@ECHO OFF
ECHO **********************************************
ECHO * Errors in the compilation *
ECHO **********************************************
notepad errors.err
:END
del %1\_lib401\Main.h
CD\DSP\Cours\Chap4_8
ADMC401 : 8. CREATION DE FICHIERS DE COMMANDE Page 96
L’assembleur ASM21 est n’est pas très riche en informations lorsqu’il détecte une erreur.
Dans ce cas, il arrive qu’il ne donne aucun message et qu’il ne crée pas de fichier de sortie
*.OBJ. Dans ce cas, c’est le dernier fichier assemblé avec succès qui sera utilisé par l’éditeur
de lien. Les modifications ne sont donc pas prises en compte. Pou éviter ce problème, il est
vivement conseillé d’effacer tous les fichiers portant l’extension .OBJ avant les commandes
d’assemblage.
del main.obj
del %1\_lib401\*.obj
CD\DSP\Cours\Chap4_8
ADMC401 : 8. CREATION DE FICHIERS DE COMMANDE Page 97
BIBLIOGRAPHIE
[1] Single-Chip, DSP-Based
High Performance Motor Controller
REV. B
[2] ADMC401 DSP Motor Controller
Developer’s Reference Manual
Rev. 2.1, 11 Septembre 2000
[3] ADSP-2100 Family
Assembler Tools & Simulator Manual
Second Edition (11/94)
[4] ADSP-2100 Family
User’s manual
Third Edition (9/95)
CD\DSP\Cours\Chap4_8