DSP et temps réel Chapitre 2 DSP ORIENTÉS APPLICATIONS INDUSTRIELLES Description du cœur ADSP2171 M. Correvon
T A B L E D E S M A T I E R E S PAGE 2. DESCRIPTION CŒUR DE L ADMC401...1 2.1 INTRODUCTION...1 2.2 COMPORTEMENT FONDAMENTAL DU DSP...4 2.2.1 Horloge de base du DSP... 4 2.2.2 RESET et Circuit d enclenchement... 5 2.2.3 Mise en veille... 7 2.3 L UNITÉ ARITHMÉTIQUE ET LOGIQUE (ARITHMETIC/LOGIC UNIT)...10 2.3.1 Structure... 10 2.3.2 Fonctions standards... 11 2.3.3 Registres d entrées et de sortie de l ALU... 12 2.3.4 Calculs simple précision... 12 2.3.5 Calculs multiprécision... 12 2.3.6 Mode saturation ou limitation de l ALU... 12 2.3.7 Mémorisation d un dépassement de capacité dans l ALU... 13 2.3.8 Division... 13 2.3.9 Bits d état de l ALU... 15 2.4 LE MULTIPLIEUR ET ACCUMULATEUR (MULTIPLIER/ACCUMULATOR)...15 2.4.1 Structure... 15 2.4.2 Fonctions standards... 17 2.4.3 Format d entrée des opérandes... 18 2.4.4 Registres d entrées et de sortie du MAC... 19 2.4.5 Opérations sur les registres résultats MR... 20 2.4.6 Mode saturation ou limitation du MAC... 20 2.5 LE DÉCALEUR À BARILLET (BARREL SHIFTER)...20 2.5.1 Description générale... 20 2.5.2 Registres d entrées et de sortie du décaleur à barillet... 25 2.5.3 Opération de décalage.... 25 2.5.4 Ajustement de l exposant EXPADJ... 25 2.5.5 Décalage immédiat... 25 2.5.6 Dénormalisation... 26 2.5.7 Normalisation... 27 2.6 CONTRÔLE DE PROGRAMME DE LA FAMILLE ADSP2100...28 2.6.1 Le séquenceur de programme... 28 2.6.2 Instruction de contrôle de séquence de programme... 32 2.6.3 Les interruptions... 34 2.6.4 Les registres d état et de contrôle... 37 2.7 TRANSFERT DE DONNÉES...42 2.7.1 Les générateurs d adresses (Data Address Generators)... 42 2.7.2 Variables et matrices... 46 2.7.3 Buffers circulaires... 47 2.7.4 Transfert entre bus de données programme (PMD) et bus de données (DMD)... 47 2.8 CONFIGURATION DE LA MÉMOIRE...48 2.8.1 Configuration de la mémoire interne... 49 2.8.2 Configuration de la mémoire externe... 50 2.8.3 Allocation des zones mémoires... 51 2.8.4 Adaptation des temps d accès mémoire... 53 2.9 CHARGEMENT ET DÉMARRAGE D UNE APPLICATION (BOOT LOADING)...54 2.9.1 Chargement de l application... 54 2.9.2 Définition de la table des vecteurs d interruption... 56 2.9.3 Ecriture dans la table d interruption... 58 2.10 TIMER...58 2.11 SYNTHÈSE DES REGISTRES D ÉTAT, DE CONTRÔLE ET DE DONNÉES DU CŒUR DU DSP...60
Bibliographie
DESCRIPTION DU CŒUR DE L ADSP2171 Page 1 2. DESCRIPTION CŒUR DE L ADMC401 2.1 INTRODUCTION Le noyau de l ADMC401 est compatible à celui de l ADSP2171 de la famille ADSP21xx d Analog Devices. Il s'agit d un DSP à virgule fixe, dont les données sont sur. Les nombres sont soit entiers positifs (sans signe), soit en format 1.15. Pour ce format, le bit de poids fort représente le signe et les 15 bits restants correspondent à un nombre décimal de module inférieur ou égal à l unité. Si ce nombre est négatif il sera en complément à 2. L architecture de base est représentée à la Figure 2-1. Le bus de données de la mémoire programme (PMD bus) est sur 24 bits, le bus de données de la mémoire de données (DMD) a une largeur de, alors que les bus d'adresses de la mémoire de données (DMA) ou de la mémoire de programme (PMA) sont sur 14 bits. La famille ADSP21xx comporte un noyau DSP composé: d'une unité arithmétique et logique (ALU) pouvant être chargée par deux sous-registres, de : AX0 ou AXI, pour l'entrée X, et AY0 ou AYI pour l'entrée Y Les sousregistres jouent des rôles équivalents vis-à-vis de l ALU. Le résultat des opérations de l'alu va dans le registre AR, relié au bus résultat R-bus, et au bus de données DMD de. Les résultats ainsi obtenus vont pouvoir être accessibles par d'autres unités de calcul en utilisant ces bus. Cette unité de calcul est également prévue pour effectuer des divisions numériques ; d une unité de multiplication et d accumulation (MAC) pouvant être chargée par deux sous-registres de : MX0 ou MX1, pour X, et MY0 ou MY1 pour Y. Comme précédemment, les sous-registres jouent des rôles équivalents vis-à-vis du MAC. Le résultat des opérations de multiplication et d'accumulation vont dans le registre MR relié au bus résultat R-bus, composé de trois sous-registres, deux de MR1 pour les poids forts et MR0 pour les poids faibles (en double précision), et un de 8 bits MR2 pour l'expression du signe étendu qui permet de gérer les dépassements et les signes du résultat. Par multiplexage, le registre MR a accès au bus de données DMD de et au bus résultat R-bus. Comme pour l'alu, il peut communiquer avec les autres unités de calcul de deux manières : le R-bus et le bus DMD ; d une unité de décalage à barillet ou décaleur (Barrel Shifter). Cette unité est chargée soit par le bus résultat R-bus, soit par un registre (noté SI par le constructeur) de. Les opérations consistent à décaler à droite ou à gauche pour diviser ou multiplier par deux les données, en effectuant éventuellement un «ou logique» avec la donnée avant décalage. En utilisant le «ou exclusif» de l'alu, il permet de générer des séquences pseudo-aléatoires, très pratiques en traitement ou transmission du signal. D'autre part le détecteur d'exposant utilise le registre (noté SE par le constructeur) comme enregistrement de la puissance de 2, correspondant à un décalage. C'est l'opération de normalisation. Les données passent par le bus DMD de ; de deux générateurs d adresses (DAG : Data Address Generator) comportant chacun 12 registres indépendants sur 14 bits, dont quatre pour les pointeurs (I), I0 à I3 pour DAG1 et I4 à 17 pour DAG2, et d'autre part 4 registres (M pour chaque générateur pour modifier les pointeurs et 4 autres registres (L) pour définir les buffers circulaires bitreverse. Le générateur DAG1 adresse seulement la mémoire de données et peut fonctionner en bit-reverse pour les calculs en FFT. Le générateur DAG2 adresse les deux types de mémoire, et peut fonctionner en branchements indirects (Jump et Call). Par exemple AX0 = DM(I0,M0) est une lecture indirecte chargée dans AX0 d'une donnée
MUX MUX DESCRIPTION DU CŒUR DE L ADSP2171 Page 2 située en mémoire de données, dont l'adresse est pointée par I0. La valeur suivante (pointée par I0), sera I0 (précédent) + M0. Par contre, Jump (I4) est un saut indirect ; d'un séquenceur de programme contrôlant les sous-programmes, les boucles et les interruptions. Quatre niveaux de boucle sont possibles. Les boucles sont contrôlées par le registre CNTR. Le nombre placé dans ce registre indique le nombre de boucles prévues. À chaque Reset, les interruptions sont automatiquement validées, il est donc important de bien configurer le registre IMASK dans le programme. Les registres de statut SSTAT, ASTAT et MSTAT sont accessibles par les instructions assembleur ENA ou DIS. DATA ADDRESS GENERATOR 1 DATA ADDRESS GENERATOR 2 INSTRUCTION REGISTER PROGRAM SEQUENCER PROGRAM ROM 2k x 24 PROGRAM RAM 2k x 24 DATA SRAM 1k x 16 BOOT ADDRESS GNERATOR POWER DOWN CONTROL LOGIC 2 bits 14 bits PMA BUS 14 bits 14 bits DMA BUS PMD BUS 24 bits DMD BUS BUS EXCHANGE 24 bits INPUT REGISTER ALU OUTPUT REGISTER INPUT REGISTER MAC OUTPUT REGISTER INPUT REGISTER SHIFTER OUTPUT REGISTER CONTROL LOGIC TRANMIT REG. RECEIVE REG. TRANMIT REG. RECEIVE REG. TIMER RBUS SERIAL PORT 0 SERIAL PORT 1 5 bits 5 bits Figure 2-1 : Schéma bloc fonctionnel (partie DSP) des registres d'entrée et de sortie des unités de calcul (ALU, MAC, ou décaleur) sont dédoublés, ce qui permet une utilisation plus souple du processeur en cas d'exécution d'un sous-programme. Chaque ensemble dédoublé de ces registres est déterminé par un bit d'état dans le registre MSTAT. On utilise soit l'ensemble primaire (par défaut, bit d'état = 0), soit le secondaire (bit d'état = 1). Un seul fonctionne à la fois ; des registres de transfert de données. Le registre PX reçoit ou fournit les 8 bits de poids faible lors du transfert de données entre le bus DMD () et le bus PMD (24 bits). Les autres registres utilisables pour transférer les données sont les registres AY0 ou AY1 de AY, ou bien MY0 ou MY1 de MY, qui permettent le passage des de poids fort du bus de données PMD de la mémoire de programme vers le bus de données DMD de la mémoire de données. un timer qui peut être considéré comme un périphérique car il n est pas indispensable au fonctionnement du DSP. Son rôle est de provoquer des interruptions dans le programme selon une période T int qui est toujours un multiple de la période interne du processeur. Ce facteur de multiplication dépend des registres de contrôle du Timer ; un générateur d adresse de démarrage (Boot Address Generator) permettant grâce aux pins d entrées complémentaires MMAP et BMODE ainsi qu au registre de
DESCRIPTION DU CŒUR DE L ADSP2171 Page 3 contrôle MEMWAIT(15 : ROM ENABLE) le démarrage direct d un programme d application en EEPROM externe ou le moniteur en ROM interne. un contrôleur d état de consommation (Power Down Control Logic) permettant de mettre le DSP en veille, c est-à-dire dans un état de très base consommation. Le contrôle de l état de consommation peut se faire par hardware (entrée : PWD, sortie : PWDACK) ou par software (registre ; SPORT1(15,14,13,12)). Deux ports sériels synchrones (Serial Ports 0 et 1) permettant la transmission sérielle d information. Le moniteur résident en ROM interne au DSP utilise les ports sériels durant la phase d enclenchement (Power Up) Le port SPORT1 est utilisé pour le chargement d un programme d application par l intermédiaire du debugger (via un PC). Le port SPORT0 est utilisé pour le chargement d un programme d application résident dans une EPROM série Ces deux ports peuvent être reconfiguré par l utilisateur moyennant un certain nombre de précautions.
DESCRIPTION DU CŒUR DE L ADSP2171 Page 4 2.2 COMPORTEMENT FONDAMENTAL DU DSP Pour qu un circuit numérique tel qu un DSP ait un comportement conforme aux caractéristiques techniques, il ne faut pas négliger les points suivants : mise sous tension (enclenchement des alimentations) ; comportement du reset ; fréquence de l horloge de base (composants externes) ; mise en veille basse consommation. Un mauvais fonctionnement de l un de ces points peut avoir un effet catastrophique sur le comportement du système quel que soit le type de circuit (FPGA, microcontrôleur DSP, ). 2.2.1 Horloge de base du DSP L horloge de base du DSP est choisie en fonction de plusieurs critères. La vitesse d exécution (MIPS) est directement proportionnelle à la fréquence de l horloge. Les temps d accès des composants externes comme les mémoires, et les périphériques peuvent également limiter la fréquence de l horloge. Une autre contrainte importante est imposée par les UARTs utilisés pour la transmission sérielle. En effet pour avoir des vitesses (bauds rate) de transmission standard (1200Bd/s, 2400Bd/s, 9600Bd/s, 115200Bd/s), la fréquence de l horloge est divisée par des grandeurs entières. CLK Baud _ rate= 2.1 SCLKDIV+ 1 Avec CLK, fréquence de l horloge de base et SCLKDIV valeur de division (grandeur entière). Si CLK=12MHz, le nombre de Baud rate correspondant à un multiple de 1200, jusqu à 115200Bd/s est de 16. Pour CLK=12.96MHz, ce nombre passe à 28. Selon la valeur de cette fréquence, certaines vitesses de transmission ne sont plus assurées avec une fiabilité suffisante. 2.2.1.1 Hardware disponible et composants externes L ADMC401 possède son propre oscillateur interne, il est donc possible de placer un cristal entre les pins CLKIN et XTAL. L oscillateur travaille sur la fréquence parallèle du cristal (zone inductive), il est donc nécessaire d ajouter deux condensateurs entre les deux extrémités du cristal et la masse électronique. Le temps de cycle pour les instructions est dérivé d une fréquence (signal CLKOUT) correspondant au double de la fréquence de l oscillateur. L utilisation d un oscillateur externe est toujours possible. Dans ce cas, la sortie de cet oscillateur est connectée à la broche CLKIN, XTAL étant laissé non connecté. La fréquence du signal apparaissant sur CLKIN doit être maintenue dans les limites imposées par le constructeur. Pour des raisons de stabilités du multiplicateur de fréquence interne, il n est pas acceptable de varier la fréquence de CLKIN durant le fonctionnement du DSP.
DESCRIPTION DU CŒUR DE L ADSP2171 Page 5 20pF 13MHz 20pF CLKIN XTAL CLKOUT ADSP21xx Figure 2-2 : Oscillateur et cristal Une PLL (multiplicateur de fréquence) génère une horloge interne de fréquence huit fois supérieure à celle du signal CLKIN. Cette horloge interne définit les états internes du DSP. Cette PLL génère également le signal CLKOUT, synchronisé sur les cycles d instruction du DSP. La Figure 2-3 illustre les relations existant entre ces signaux. CLKIN t ETAT INTERNE DU DSP 4 1 2 3 4 1 2 3 4 CLKOUT Cycle d'instruction Cycle d'instruction t Figure 2-3 : Horloges externe et interne Sur chaque DSP, il existe un certain nombre d entrées digitales asynchrones. L apparition des transitions de ces signaux a une phase arbitraire par rapport à l horloge de base du DSP. Le délai entre la transition du signal et sa synchronisation est appelé délai de synchronisation (synchronization delay). Les interruptions agissant sur transition (flanc descendant) doivent donc avoir une largeur d impulsion suffisante pour être synchronisée et donc reconnue. Pour être sûr que ces impulsions soient prises en compte, il est impératif de fixer leur largeur à un cycle entier de l horloge de base (CLKOUT) auquel il faut ajouter les setup time et hold time donnés dans les caractéristiques. 2.2.2 RESET et Circuit d enclenchement L entrée RESET, lorsqu elle est active («0») provoque une initialisation hardware complète de l ADSP21xx. Durant la phase de mise sous tension, (power up), l entrée RESET doit impérativement être maintenue à «0» pour assurer une initialisation correcte. L ADMC401 possède un circuit de surveillance de tension (power supply monitoring) qui
DESCRIPTION DU CŒUR DE L ADSP2171 Page 6 répond aux exigences imposées au signal RESET. Ce circuit à une sortie nommée POR (Power On Reset) qui peut être, selon les applications, directement connectée à l entrée RESET. Il est également possible d utiliser un circuit externe. L entrée RESET possède une hysthérèse, mais il est vivement conseillé d ajouter, au circuit externe, un trigger de schmitt. A l enclenchement, le temps pendant lequel le signal RESET doit être actif correspond au temps de verrouillage du circuit PLL interne. Un minimum de T RESET 1 = 2000 tcki avec tcki= 2.2 F CLKIN assure un verrouillage du circuit PLL, le démarrage de l oscillateur n étant pas inclus. La Figure 2-4 illustre la relation existant entre le signal POR et le niveau de la tension d alimentation (partie digitale). V CC +5V V RST V HYST t POR t RST t RST t Figure 2-4 : Comportement du signal Power On Reset Le seuil de validité de la tension d alimentation est nommé V RST. Ce seuil est compris entre 3.25V et 4V. Lorsque la tension descend au-dessous de V RST -V HYST, le signal POR est activé. Lorsque la tension d alimentation atteint V RST et que POR est actif, un compteur d une capacité de 17 bits est enclenché. L horloge de ce compteur est CLKOUT. Tant que le compteur n a pas atteint sa valeur maximale POR est actif. Le temps de maintien de POR est donné par la relation 1 2 t = = 2.3 RST 17 16 2 tcki= 2 tck 0 avec tcki= = 2tCK 0 FCLKIN FCLKOUT La connexion de la sortie POR à l entrée RESET permet donc de garantir une initialisation correcte de l ADMC401. Un reset complet du DSP permet de réaliser les tâches suivantes : masquage des interruptions ; pointeurs de toutes les piles (stack) initialisés ;
DESCRIPTION DU CŒUR DE L ADSP2171 Page 7 pointeur de programme (PC) en position initiale (valeur dépendant de MMAP et BMAP) ; initialisation de tous les périphériques. Lorsque la tension d alimentation est valide, il n est plus nécessaire d attendre la stabilisation du circuit PLL lors d un reset. Dans ce cas la largeur minimum de l impulsion du signal RESET est limitée à t = 2.4 RESET 5t CK0 Indépendamment du reset hardware, il est possible d activer un reset software des périphériques, excepté pour le Watchdog. Pour réaliser ce reset, il faut exécuter la routine suivante : PRESET : SET FL2 ; {mise a «1» du Flag 2} TOGGLE FL2 ; {transition d état du Flag 2} TOGGLE FL2 ; {transition d état du Flag 2} RTS {sortie de la routine} Une activation du Watchdog provoque une initialisation complète du DSP, excepté le Watchdog lui-même. 2.2.3 Mise en veille La mise en veille du DSP (Power-Down Mode) permet de diminuer la consommation de ce dernier. La commande de mise en veille peut être software ou hardware. Dans ce mode le comportement du DSP est le suivant : horloges internes désactivées (entre autre arrêt de CLKOUT) ; maintien du contenu des registres internes ; retour en mode opératoire en 100t CKI ; activation d une interruption permettant le sauvetage de l état du DSP (housekeeping) avant l entrée en veille et sa la restitution lors du retour en mode opératoire ; 2.2.3.1 Entrée dans le mode de mise en veille La séquence de mise en veille débute lors de l apparition d une transition négative sur l entrée PWD ou par la mise à «1» du bit PDFORCE (SPORT1_AUTOBUF_CRTL[13]). Une interruption est activée à l adresse 0x002C. Des précautions doivent être prises pour éviter des interruptions multiples de mise en veille afin d éviter un dépassement de capacité des piles. Cette interruption, non masquable peut être utilisée pour exécuter un certain nombre d opérations de mémorisation de l état actuel du système comme par exemple une désactivation des périphériques, suppression des interruptions en attente, etc Une fois ces opérations effectuées, c est grâce à l instruction IDLE que le mode de veille est activé. La mise en veille ne nécessite que un ou deux cycles d horloge. Comme déjà mentionné, les contenus des registres et les mémoire sont maintenus. Les sorties actives sont également maintenues. Si l instruction RTI apparaît avant l instruction IDLE, le mode de veille est désactivé.
DESCRIPTION DU CŒUR DE L ADSP2171 Page 8 Interruption hardware PDW Programme principal ou routine d'interruption PC t Vecteur d'interruption 0x002C PC Interruption software 1 PDFORCE PC JUMP INT_POWERDOWN INT_POWERDOWN : DM(Save_AX0) = AX0;...... IDLE ; Figure 2-5 : Mise en veille Mise en veille 2.2.3.2 Sortie du mode de mise en veille Le mode de veille peut être quitté lorsque l entrée PWD est le siège d une transition positive ou par activation du RESET. Le temps de recouvrement (delay startup from power down recovery) pour sortir du mode de veille peut être contrôlé par le bit XTALDELAY (SPRTO1_AUTOBUF_CRTL[14]). XTALDELAY est à «0» : le temps de recouvrement est de 100t CKI. XTALDELAY est à «1» : le temps de recouvrement est de 4096t CKI. Cette caractéristique permet de stabiliser des éventuelles horloges externes avant de commencer l exécution du programme. Commande hardware PDW ROUTINE DE PWD...... IDLE ; Mise en veille PCUR= "0" PCUR= "1" PC = "0" t PC AX0 = DM(Save_AX0)...... RTI ; PC Programme principal ou routine d'interruption Figure 2-6 : Sortie de la mise en veille Une fois le temps de recouvrement écoulé, l exécution de l instruction suivant IDLE dépend de l état du bit PCUR (SPORT1_AUTOBUF_CRTL[12]).
DESCRIPTION DU CŒUR DE L ADSP2171 Page 9 Si PUCR est à «0» le DSP exécute les instructions que suivent IDLE, permettant par exemple de retrouver l état du système avant la mise en veille. Lors de l apparition de l instruction RTI, le programme retourne dans la routine interrompue par la demande de mis en veille. Les interruptions ayant été mémorisées, durant l état de veille peuvent alors être exécutées. Si PUCR est à «1» le compteur de programme PC, les registres d état, et de boucle CNTR et IMASK sont mis à «0». SSTAT est initialisé à 0x55. L instruction exécutée se trouve à l adresse 0x0000. Si un RESET est activé durant l état de veille, une séquence complète initialisation est exécutée selon les états de MMAP et BMODE. 2.2.3.3 Reconnaissance du mode de veille Une sortie PWDACK (power down acknowledge) est mise à «1» lorsque le DSP se trouve en mode basse consommation. Ce signal indique que la sortie d horloge CLKOUT est valide, mais dans certain cas ceci ne veut pas dire que l exécution des instructions a commencé (par exemple après un RESET ou lorsque XTALDELAY est actif) 2.2.3.4 Utilisation de PWD comme interruption non-masquable L entrée PWD peut être utilisée comme interruption non-masquable sans rapport avec le mode de veille. En effet l activation du mode de veille n intervient que si l instruction IDLE est présente. Interruption hardware PDW PC Vecteur d'interruption 0x002C Programme principal ou routine d'interruption PC t PC JUMP INT_NON_MASQ INT_NON_MASQ : DM(Save_AX0) = AX0;...;...;...;...;...; RTI PCUR="0" PC AY=DM(I4,M3);...;...; Figure 2-7 : Interruption non masquable
DESCRIPTION DU CŒUR DE L ADSP2171 Page 10 2.3 L UNITÉ ARITHMÉTIQUE ET LOGIQUE (ARITHMETIC/LOGIC UNIT) L ALU fournit un ensemble standard de fonctions arithmétiques et logiques. 2.3.1 Structure L ALU est constitué de deux ports d entrées X et Y de de largeur. Le port de sortie R de également correspond au résultat. Pour les calculs en multiprécision, l ALU accepte une entrée supplémentaire de retenue nommée CI (Carry Input). Cette entrée est issue du registre d état arithmétique (voir 2.6.4.1) ASTAT. L ALU génère six signaux d état définis au 2.3.9. Le port d entrée X de l ALU accepte des données () de deux sources, soit du double registre AX (AX0 ou AX1) ou des registres liées au bus résultat R-Bus (voir 2.3.3). Ces registres peuvent être utilisés directement comme opérandes. Les deux registres contenus dans AX peuvent être lus ou écrits depuis le bus DMD. L ensemble des instructions disponible permet également la lecture de ces registres par le bus PMD, mais il n y a pas de connexion directe. Ces opérations utilisent l unité de transfert de données entre le bus DMD () et le bus PMD (24 bits). La sortie du registre AX, grâce à un double port, peut être simultanément lue par le port d entrée X et disponible sur le bus DMD. Le port d entrée Y de l ALU accepte également des données () de deux sources, soit du double registre AY (AY0 et AY1) ou du registre de «feedback» AF (voir 2.3.3). Les deux registres contenus dans AY peuvent être lus ou écrits depuis le bus DMD ou écrits directement depuis le bus PMD. L ensemble des instructions disponibles permet également la lecture de ces registres par le bus PMD mais dans ce cas c est l unité de transfert de données entre le bus DMD () et le bus PMD (24 bits) qui est utilisée. La sortie registre AY, grâce à un double port, peut être simultanément lu par le port d entrée Y et disponible sur le bus DMD. Le port de sortie R de l ALU est connectée au registre de «feedback» AF et au registre de résultat AR. La sortie registre AR, grâce à un double port, peut simultanément être envoyée au bus résultat R-Bus et au bus DMD. L ensemble des instructions disponible permet également la lecture du registre AR par le bus PMD, mais il n y a pas de connexion directe. Cette opération utilise l unité de transfert de données entre le bus DMD () et le bus PMD (24 bits). N importe quel registre associé à L ALU peut être lu et écrit dans un même cycle d horloge. Les registres sont lus au début du cycle et écrits à la fin du même cycle. Dans un cycle donné, la valeur contenue dans un registre quelconque a été chargée à la fin du cycle précédent. Par conséquent, une nouvelle valeur écrite dans un registre ne peut pas être lue avant le début du cycle suivant. Cette caractéristique permet à un registre de fournir un opérande sur une entrée de l ALU au début d un cycle et être rafraîchit par un nouvel opérande issu de la mémoire à la fin du cycle. Ceci permet aussi de stocker en mémoire le contenu d un registre résultat et de rafraîchir ce dernier par un nouveau résultat issu de l ALU dans le même cycle. Les registres de l ALU sont doubles (2 banks). Seul un bank est accessible à la fois. Le second bank peut être activé, par exemple dans un sous-programme ou une routine d interruption, ce qui évite le stockage des données contenues dans les registres. La sélection du bank primaire ou secondaire est commandée par le bit MSTAT[0] (voir 2.6.4.3)
DESCRIPTION DU CŒUR DE L ADSP2171 Page 11 24 bits PMD BUS DMD BUS MUX Bank 2 Bank 1 AX REGISTERS 2x16 Bank 2 Bank 1 AY REGISTERS 2x16 MUX MUX AZ AN AC AV AS AQ X Y ALU R CI Bank 2 Bank 1 AF REGISTER 1x16 MUX Bank 2 Bank 1 AR REGISTER 1x16 RBUS Figure 2-8 : Unité Arithmétique et logique 2.3.2 Fonctions standards Les fonctions standards de l ALU sont les suivantes (R=AR ou AF) : R = X+Y : Addition simple R = X+Y+CI : Addition avec retenue sur 1 bits R = X-Y : Soustraction simple R = X-Y+CI-1 : Soustraction avec retenue et décalage de 1 bit R = Y-X : Soustraction simple R = Y-X+CI-1 : Soustraction avec retenue et décalage de 1 bit R = -X : Changement de signe de X (complément à deux) R = -Y : Changement de signe de Y (complément à deux) R = Y+1 : Incrémentation de Y par 1 R = Y-1 : Décrémentation de Y par 1 R = PASS X : Passe X dans R avec modification des flags AZ et AN
DESCRIPTION DU CŒUR DE L ADSP2171 Page 12 R = PASS Y : Passe Y dans R avec modification des flags AZ et AN R = 0 (PASS 0) : Mise à zéro de R R = ABS X : Valeur absolue de X avec modification du flag AS R = X AND Y : ET logique bit à bit entre X et Y R = X OR Y : OU logique bit à bit entre X et Y R = X XOR Y : OU exclusif logique bit à bit entre X et Y R = NOT X : NON logique bit à bit de X (complément à 1) R = NOT Y : NON logique bit à bit de Y (complément à 1) 2.3.3 Registres d entrées et de sortie de l ALU. Les registres connectés aux ports de l ALU sont les suivants Source Source Destination Registres connectés au port X Registres connectés au port Y Registre connectés au port R ALU AX0 AX1 AR (Bus DMD) (Bus DMD) (Bus R) AY0 AY1 AF (Bus DMD - PMD) (Bus DMD - PMD) (ALU : R) AR AF (Bus R) (ALU : R) MAC BR MR0 MR1 MR2 SR0 SR1 (Bus R) (Bus R) (Bus R) (Bus R) (Bus R) 2.3.4 Calculs simple précision Lors d une addition simple précision, on peut avoir les quatre cas suivant : X Y R AC (Carry) AV (Overflow) AN (Negativ) x>0 y>0 0<x+y<7FFF 0 0 0 x>0 x<0 x>0 x<0 y<0 y>0 y<0 y>0 0<x+y<7FFF 1 0 0 8000<x+y<0 0 0 1 x<0 y<0 8000<x+y<0 1 0 1 x<0 y<0 8000>x+y 1 1 0 x>0 y>0 x+y>7fff 0 1 1 La soustraction peut être déduite de l addition. 2.3.5 Calculs multiprécision L ALU supporte les opérations en multiprécision grâce à l entrée de retenue CI (Carry In) et au bit AC (ASTAT[3]) du registre d état arithmétique ASTAT. L état logique de CI est identique à la valeur du bit AC généré lors de l opération précédente dans l ALU. 2.3.6 Mode saturation ou limitation de l ALU Le fonctionnement de l ALU suppose l absence de saturation ce qui correspond à des données ne pouvant varier (en format 1.15) que de 1000 0000 0000 0000 (valeur la plus
DESCRIPTION DU CŒUR DE L ADSP2171 Page 13 négative), pour laquelle AV=AC=1, à la valeur 0111 1111 1111 1111 (valeur la plus positive), pour laquelle AV=1 et AC=0. Dépassement de capacité (AV) Retenue (AC) (Overflow) (Carry) Registre AR 0 0 R (sortie de l ALU) Résultat du calcul 0 1 R (sortie de l ALU) Résultat du calcul 1 0 01111111111111111 Pleine échelle positive 1 1 10000000000000000 Pleine échelle négative En mode normal, l ALU ne tient pas compte de la saturation. Pour activer ce mode, il faut modifier le bit MSTAT[3] (AR Saturation Mode Enable). Le mode de saturation reste actif pour toutes les opérations futures de l ALU. Attention, il faut garder à l esprit que seul le registre AR doit être utilisé pour ce mode. 2.3.7 Mémorisation d un dépassement de capacité dans l ALU L activation du bit MSTAT[2] (ALU Overflow Latch Mode Enable) du registre d état des modes de fonctionnement permet de maintenir l état du bit AV (ASTAT[2]) du registre d état arithmétique après la détection d un dépassement de capacité. Dans ce mode AV ne peut être remis à «0» que par écriture, via le bus DMD. 2.3.8 Division L ALU supporte la division entre deux nombres pouvant être signés ou non. Une première restriction impose que les deux nombres doivent être du même type, c est-à-dire soit les deux signés, soit le deux non-signés. En simple précision, le dividende à une capacité de 32 bits tandis que le diviseur est un mot de. Le temps d exécution de la division prend dans ce cas 16 cycles d horloge. Pour une division signée : Les de poids forts du dividende doivent être dans AY1 ou AF (registres connectés à l entrée Y de l ALU. Les de poids faible du dividende doivent être dans AY0. Le diviseur doit se trouver dans un des registres AX0, AX1, ou un registre de résultat R (registres connectés sur l entrée X de l ALU). Le résultat d une capacité de se trouve dans le AY0 Pour une division non-signée : Les de poids forts du dividende doivent être dans AF (registre connecté à l entrée Y de l ALU. Les de poids faible du dividende doivent être dans AY0. Le diviseur doit se trouver dans un des registres AX0, AX1, ou un des registres de résultat R (registres connectés sur l entrée X de l ALU). Le résultat d une capacité de se trouve dans le AY0 Lorsque le dividende et le diviseur sont signés, la primitive DIVS (divide-sign) est exécutée en premier. Cette primitive définit le signe du quotient par une fonction OU-exclusif entre les bits de signes (MSB) du dividende et du diviseur. Le contenu du registre AY0 est décalé de 1 bit vers la gauche, le LSB étant remplacé par le bit de signe du quotient.
DESCRIPTION DU CŒUR DE L ADSP2171 Page 14 Le signe du quotient est également mémorisé dans le bit ASTAT[6] (AQ) du registre d état arithmétique. Le bit de poids fort des de poids faibles du dividende AY0[15] est mémorisé dans AF[0] alors que les 15 bits de poids faibles de la sortie de l ALU R[15 0] sont chargés dans AF[15 1]. 15 bits 1bits LEFT SHIFT AX0[15...0] AX1[15...0] AX1[15...0] AF[15...1] AF[0] AY0[15...0] LOWER DIVIDEND MUX DIVISOR MUX UPPER DIVIDEND MSB MSB 1bits 1bits PARTIAL REMAINDER 1bits R-BUS X ALU Y R=PASS Y 15 bits Z AQ ASTAT[6] LSB Figure 2-9 : Bloc spécifique à la division DIVS Lors d une division de deux nombres non-signés, la primitive DIVS n est pas utilisée. Dans ce cas le bit ASTAT[6] (AQ) doit être initialisé à «0» Le bit AQ indique dans ce cas que le quotient doit être considéré comme positif. La seconde primitive DIVQ (divide quotient) permet de générer un bit du quotient à la fois. Cette primitive doit donc être exécutée autant de fois qu il reste de bit à définir pour le quotient. Pour les divisions non-signées, la primitive DIVQ doit être exécutée 16 fois alors que pour des divisions signées on utilise une fois la primitive DIVS et 15 fois la primitive DIVQ. L instruction DIVQ décale le contenu du registre AY0 de 1 bit vers la gauche, le bit AY0[15] étant mémorisé dans AF[0]. Les 15 bits de poids forts du résultat de l addition si AQ= «1» ou de la soustraction si AQ= «0» sont chargés dans AF[15 1]. La valeur du bit AQ est définie comme le résultat le l opération logique OU-exclusif entre le MSB du diviseur et le MSB du résultat fourni par l ALU. L opération de division est très complexe. Le choix d un format du dividende et du diviseur peut conduire à un résultat erroné. On s occupera ici que d un cas, utilise pour l interpolation des codeurs optiques incrémentaux sin cos. Dans ce cas particulier, une division doit être effectuée entre des nombres signés de format 1.31 pour le dividende et 1.15 pour le diviseur. Le résultat, c est à dire le quotient aura le format 1.15. La seule condition à respecter est que le dividende doit être plus grand que le diviseur. Pour plus d information, voir ADSP2100 Family, User s Manual, Chap. 2, 2.2.7.4. Appendix B, Division Exceptions.
DESCRIPTION DU CŒUR DE L ADSP2171 Page 15 15 bits 1 bits LEFT SHIFT AX0[15...0] AX1[15...0] MUX DIVISOR MSB AF[15...1] AF[0] AY0[15...0] PARTIAL REMAINDER 1 bits LOWER DIVIDEND 1bits R-BUS X ALU R=Y+X IF AQ=1 R=Y-X IF AQ=0 Z Y 1bits AQ ASTAT[6] 15 bits MSB LSB Figure 2-10 : Bloc spécifique à la division DIVQ 2.3.9 Bits d état de l ALU Les bits d état définis dans le registre d état arithmétique ASTAT (voir 2.6.4.1) sont les suivants : Flag Nom Définition AZ Zero NOR logique de tous les bits du port R de l ALU Vrai (1) si tous les bits sont à 0 AN Negative Bit de signe du port R de l ALU AV Vrai (1) si la valeur est négative Overflow OU exclusif des deux retenues (Carry) des deux derniers étages (MSB) de l additionneur Vrai (1) s il y a dépassement de capacité AC Carry Retenue (Carry) du dernier étage de l additionneur AS Sign Bits de signe du port X de l ALU. Affecté uniquement pat l instruction ABS (valeur absolue) AQ Quotient Bit de quotient affecté uniquement par les instructions DIVS et DIVQ 2.4 LE MULTIPLIEUR ET ACCUMULATEUR (MULTIPLIER/ACCUMULATOR) Le multiplicateur / accumulateur (MAC) permet la réalisation de multiplication rapide (1 cycle d horloge) avec addition ou soustraction cumulée. Des fonctions complémentaires telles que saturation / limitation et mise à zéro sont également implantées. Un registre de»feedback» permet également la réutilisation d un résultat dès le cycle d horloge suivant. 2.4.1 Structure Le multiplicateur est constitué de deux ports d entrée X et Y de de largeur. Le port de sortie P de 32 bits correspond au résultat. Ce résultat passe ensuite au travers d un additionneur / soustracteur de 40 bits, lequel peut ou non ajouter ou soustraire au résultat le contenu du registre MR. Le résultat global est ensuite chargé dans le registre MR par une
DESCRIPTION DU CŒUR DE L ADSP2171 Page 16 remise à jour. Le registre MR de sortie est constitué de trois registres, deux de MR0 et MR1 et un de 8 bits, MR2. La capacité de l additionneur / soustracteur est supérieure à 32 bits afin de permettre un dépassement de capacité lors de calculs intermédiaires faisant intervenir une suite de multiplications et additions / soustractions. Le bit ASTAT[6] permet de signaler un dépassement de capacité sur les 32 bits de MR0 et MR1. Le multiplicateur à deux entrées X et Y de et une sortie résultat P de 32 bits. Le port d entrée X du MAC accepte des données () de deux sources, soit du double registre MX (MX0 ou MX1) ou des registres liées au bus résultat R-Bus (voir 2.4.4). Ces registres peuvent être utilisés directement comme opérandes. Les deux registres contenus dans MX peuvent être lus ou écrits depuis le bus DMD. La sortie registre MX, grâce à un double port, peut être simultanément lu par le port d entrée X et disponible sur le bus DMD. Le port d entrée Y du MAC accepte également des données () de deux sources, soit du double registre MY (MY0 et MY1) ou du registre de «feedback» MF (voir 2.4.4). Les deux registres contenus dans MY peuvent être lus ou écrits depuis le bus DMD, ou écrits directement depuis le bus PMD. L ensemble des instructions disponibles permet également la lecture de ces registres par le bus PMD mais dans ce cas c est l unité de transfert de données entre le bus DMD () et le bus PMD (24 bits) qui est utilisée. La sortie registre MY, grâce à un double port, peut être simultanément lu par le port d entrée Y et disponible sur le bus DMD. Le port de sortie P du MAC (32 bits) est connecté au 32 bits de poids faibles de l additionneur / soustracteur de 40 bits, la seconde entrée n est rien d autre que les registres MR2, MR1, MR0. L additionneur / soustracteur a deux entrées, l une de 32 bits directement connectée à la sortie du multiplicateur, l autre de 40 bits permet la lecture du registre MR. Les sorties de l additionneur / soustracteur vont soit au registre de résultat MR soit au registre de «feedback» MF. Le registre MF permet aux bits 16 à 31 du résultat d être directement utilisés par l entrée Y du multiplicateur lors du prochain cycle de l horloge. Le registre de résultat est constitué de trois registres, deux de (MR0 et MR1) et un de 8 bits (MR2). Ces registres peuvent être chargés directement par le bus DMD. Leurs sorties sont directement connectées (driver tri-state) au bus DMD ou au bus résultat R. N importe quel registre associé au MAC peut être lu et écrit dans un même cycle d horloge. Les registres sont lus au début du cycle et écrits à la fin du même cycle. Dans un cycle donné, la valeur contenue dans un registre quelconque a été chargée à la fin du cycle précédent. Par conséquent, une nouvelle valeur écrite dans un registre ne peut pas être lue avant le début du cycle suivant. Cette caractéristique permet à un registre de fournir un opérande sur une entrée du MAC au début d un cycle et être rafraîchit par un nouvel opérande issu de la mémoire à la fin du cycle. Ceci permet aussi de stocker en mémoire le contenu d un registre résultat et rafraîchir ce dernier par un nouveau résultat issu du MAC dans le même cycle. Les registres du MAC sont doubles (2 banks). Seul un bank est accessible à la fois. Le second bank peut être activé, par exemple dans un sous programme ou une routine d interruption, ce qui évite le stockage des données contenues dans les registres. La sélection du bank primaire ou secondaire est commandée par le bit MSTAT[0] du registre d état du mode de fonctionnement MSTAT (voir 2.6.4.3).
DESCRIPTION DU CŒUR DE L ADSP2171 Page 17 24 bits PMD BUS DMD BUS MSB MUX Bank 2 Bank 1 MX REGISTERS 2x16 Bank 2 Bank 1 MY REGISTERS 2x16 MUX MUX X P Y MULTIPLIER Bank 2 Bank 1 MF REGISTER 1x16 40 bits ADD / SUBTRACT 32 bits MV MUX MUX MUX 8 bits Bank 2 Bank 1 MR2 REGISTER 1x8 Bank 2 Bank 1 MR1 REGISTER 1x16 Bank 2 Bank 1 MR0 REGISTER 1x16 8 bits M U X 8 bits RBUS Figure 2-11 : Multiplicateur et accumulateur 2.4.2 Fonctions standards Les fonctions standards du MAC sont les suivantes (R=MR ou MF) : R = X*Y : Multiplication simple
Bit de signe perdu DESCRIPTION DU CŒUR DE L ADSP2171 Page 18 R = MR+X*Y : Multiplication et accumulation additive R = MR-X*Y : Multiplication et accumulation soustractive R= 0 : Mise à zéro du résultat (MR) La famille des ADSP21xx permet deux modes pour le multiplicateur / accumulateur, soit le mode fractionnaire (1.15) et le mode entier (16.0). En mode fractionnaire 32 bits le port de sortie P du multiplicateur subit un ajustement de format par un décalage de 1 bis vers la gauche (LSB mis à «0») afin de supprimer l extension inutile du bit de signe avant de passer dans le bloc additionneur / soustracteur. En mode entier, aucun décalage n est nécessaire avant de passer dans le bloc additionneur / soustracteur. Les modes entier ou fractionnaire sont validés par le bit MSTAT[4] du registre d état des modes de fonctionnement (MSTAT). Signe (Sortie P) Résultat de la multiplication (Sortie P) 31 31 31 31 31 31 31 31 31 30 29 29 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MR2 MR1 MR0 Figure 2-12 : Résultat en format entier MSTAT[4]=1 Signe (Sortie P) Résultat de la multiplication (Sortie P) 31 31 31 31 31 31 31 31 31 30 29 29 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MR2 MR1 MR0 Figure 2-13 : Résultat en format fractionnaire MSTAT[4]=0 2.4.3 Format d entrée des opérandes Afin de facilité les multiplications multiprécision, l unité MAC accepte sur ces ports d entrées X et Y des nombres entiers ou fractionnaires, signés (complément à deux) ou nonsignés. La définition des formats d entrées fait partie intégrante de l instruction et doit être précisée pour chaque multiplication. Le mode SS (signé x signé) est utilisé lors de la multiplication de deux nombres signés en simple précision ( x ) ou lors de la multiplication partielle des deux bytes de poids forts lors d un calcul en multiprécision. MR=MR+MX0*MY0 (SS) ; Le mode US ou SU(non-signé x signé) ou (signé x non-signé) est utilisé lors de la multiplication de deux nombres en simple précision ( x ) donc l un est signé et l autre pas ou lors de la multiplication partielle d un byte de poids forts et d un byte de poids faible lors d un calcul en multiprécision. MR=MR+MX0*MY0 (US) ou (SU) ;
DESCRIPTION DU CŒUR DE L ADSP2171 Page 19 Le mode UU (non-signé x non-signé) est utilisé lors de la multiplication de deux nombres non-signés en simple précision ( x ) ou lors de la multiplication partielle des deux bytes de poids faibles lors d un calcul en multiprécision. MR=MR+MX0*MY0 (UU) ; Le mode RND (arrondi) du résultat du MAC L accumulateur à la possibilité d exécuter une fonction d arrondi sur les 40 bits du résultat à la frontière entre les bits N 15 et 16. Cette fonction est directement spécifiée dans le code d instruction. Les deux opérandes doivent être en mode signé MR=MR+MX0*MY0 (RND) ; Lorsque le mode arrondi est sélectionné, le résultat est contenu soit dans le registre MF, soit dans le registre MR. Dans ce dernier cas, la fonction arrondi modifie autant MR2 que MR1. Afin d éviter un décalage lors de l arrondi, le bit N 16 de MR (LSB de MR1), est forcé à 0 après addition de 0x8000 lorsque MR=0x8000. Exemple d un arrondi au sens mathématique MR2 MR1 MR0 φφφφφφφφ φφφφφφφφ 00100101 1φφφφφφφ φφφφφφφφ Bit 15=1 et addition avec retenue + 10000000 00000000 φφφφφφφφ φφφφφφφφ 00100110 0φφφφφφφ φφφφφφφφ Exemple d un arrondi avec compensation d offset : 37.5 38 MR2 MR1 MR0 φφφφφφφφ φφφφφφφφ 00100101 10000000 00000000 Bit 15=1, Bits (14..0) =0 et addition avec retenue + 10000000 00000000 φφφφφφφφ φφφφφφφφ 00100110 00000000 00000000 φφφφφφφφ φφφφφφφφ 00100110 0φφφφφφφ φφφφφφφφ Exemple d un arrondi avec compensation d offset : 36.5 36 MR2 MR1 MR0 φφφφφφφφ φφφφφφφφ 00100100 10000000 00000000 Bit 15=1, Bits (14..0) =0 et addition avec retenue + 10000000 00000000 φφφφφφφφ φφφφφφφφ 00100101 00000000 00000000 φφφφφφφφ φφφφφφφφ 00100100 0φφφφφφφ φφφφφφφφ On voit ainsi que pour les nombres tronqués impairs, 0.5 est forcé vers 1 alors que pour les nombres tronqués pairs 0.5 est forcé vers 0. Le décalage d arrondi est donc éliminé. 2.4.4 Registres d entrées et de sortie du MAC. Les registres connectés aux ports du MAC sont les suivants Source Source Destination Registres connectés au port X Registres connectés au port Y Registre connectés au port R MAC MX0 MX1 MR0 MR1 MR2 (Bus DMD) (Bus DMD) (Bus R) (Bus R) (Bus R) MY0 MY1 MF (Bus DMD - PMD) (Bus DMD - PMD) (MAC : R1) MR0 MR1 MR2 MF (Bus DMU) et (Bus R) (Bus DMU) et (Bus R) (Bus DMU) et (Bus R) (MAC : R1)
DESCRIPTION DU CŒUR DE L ADSP2171 Page 20 Source Source Destination Registres connectés au port X Registres connectés au port Y Registre connectés au port R ALU AR (Bus R) BR SR0 SR1 (Bus R) (Bus R) 2.4.5 Opérations sur les registres résultats MR Comme illustré sur la Figure 2-11, MR est divisé en trois registres : MR0[15 0], MR1[31 16] et MR2 [39 32]. Chacun de ces registres peut être chargé soit par le port R du MAC, soit par le bus DMD. Ces registres peuvent être lus par le bus DMD ou par le bus R. Les 8 bits du registre MR2 sont connectés aux 8 bits de poids faibles de ces bus (DMD et R). Les 8 bits de poids forts sont mis dans un état correspondant à l extension du bit de signe. L écriture du registre MR1 par le bus DMD intègre également l extension automatique du signe dans le registre MR2. Pour charger une valeur différente de l extension du signe de MR1 dans MR2, il faut impérativement charger MR2 après MR1. Le chargement de MR0 n affecte aucun des registres MR1 et MR2 (pas d extension de signe pour MR0). 2.4.6 Mode saturation ou limitation du MAC L additionneur / soustracteur du MAC génère un signal d état de dépassement de capacité (MV), lequel est chargé dans le registre d état arithmétique ASTAT[6] à la fin de chaque opération exécutée dans le MAC. Le résultat placé dans les registres MR (MR2, MR1, MR0) est considéré comme un mot signé de 32 bits. Un dépassement de capacité peut donc être détecté si les 8 bits du registre MR2 ne sont pas tous égaux et identiques au bit de poids fort (MSB) du registre MR1. MV MR2 MSB(MR1) Registre AR 0 00000000 0 R (sortie du MAC) Résultat du calcul 0 11111111 1 R (sortie de l ALU) Résultat du calcul 1 OR{MR2}=1 0 0111111111111111 1111111111111111 Pleine échelle positive 1 AND{MR2}=0 1 1000000000000000 0000000000000000 Pleine échelle négative 2.5 LE DÉCALEUR À BARILLET (BARREL SHIFTER) Le décaleur à barillet propose un ensemble de fonctions sur des entrées de de largeur et dont le résultat est sur 32 bits. Sont inclus les décalages arithmétiques, logiques et de normalisation. Il est également possible d extraire la valeur de l exposant d un nombre de simple ou double précision pour une représentation des nombres ne virgule flottante. 2.5.1 Description générale La Figure 2-14 illustre le schéma bloc du décaleur à barillet tel qu il est implanté dans tous les DSP de la famille ADSP21xx. Cette unité de décalage peut être décomposée en quatre zones distinctes : la zone de décalage (shifter array) ; la zone de fonction logique OU / PASSE (OR /PASS) ; la zone de détection de l exposant (exponent detector) ; la zone de comparaison logique d exposant (exponent COMPARE logic).
DESCRIPTION DU CŒUR DE L ADSP2171 Page 21 DMD BUS 8 bits LSB MUX SB REGISTER 1x5 Bank 1 5 bits LSB Bank 2 SI REGISTER 1x16 Bank 1 Bank 2 MUX 8 bits LSB COMPARE EXPONENT DETECTOR SS 8bits HI/LO R C O X I X SHIFTER ARRAY MUX MUX 32 bits 32 bits Bank 2 Bank 1 SE REGISTER 1x5 NEGATE OR / PASS 8bits MUX MUX From INSTRUCTION SR1 REGISTER 1x16 Bank 2 Bank 1 SR0 REGISTER 1x16 Bank 2 Bank 1 MUX R-BUS Figure 2-14 : Décaleur à barillet La zone de décalage est constituée d un décaleur à barillet de 16 32 bits. Il permet de placer un mot de dans un champ de 32 bits. Il existe donc 49 possibilités de décalage dans ce champ de 32 bits si les décalages «hors champ» gauche et droite sont inclus. Les opérations de décalage se font en un cycle d horloge. En écrivant à l entrée du bloc décaleur I=ABCDEFGHIJKLMNPR ; {grandeur de définie par la place de chaque bit} Référence du décalage Sortie du décaleur : O HI LO MSB(SR1) LSB(SR1) MSB(SR0) LSB(SR0) 1 +16 à +32 +32 00000000 00000000 00000000 00000000 2 +15 +31 R0000000 00000000 00000000 00000000 3 +14 +30 PR000000 00000000 00000000 00000000 4 +13 +29 NPR00000 00000000 00000000 00000000 5 +12 +28 MNPR0000 00000000 00000000 00000000 6 +11 +27 LMNPR000 00000000 00000000 00000000 7 +10 +26 KLMNPR00 00000000 00000000 00000000 8 +9 +25 JKLMNPR0 00000000 00000000 00000000 9 +8 +24 IJKLMNPR 00000000 00000000 00000000 10 +7 +23 HIJKLMNP R0000000 00000000 00000000 12 +6 +22 GHIJKLMN PR000000 00000000 00000000
DESCRIPTION DU CŒUR DE L ADSP2171 Page 22 Référence du décalage Sortie du décaleur : O HI LO MSB(SR1) LSB(SR1) MSB(SR0) LSB(SR0) 13 +5 +21 FGHIJKLM NPR00000 00000000 00000000 14 +4 +20 EFGHIJKL MNPR0000 00000000 00000000 15 16 +3 +2 +19 +18 DEFGHIJK CDEFGHIJ LMNPR000 KLMNPR00 00000000 00000000 00000000 00000000 17 +1 +17 BCDEFGHI JKLMNPR0 00000000 00000000 18 19 0-1 +16 +15 ABCDEFGH XABCDEFG IJKLMNPR HIJKLMNP 00000000 R0000000 00000000 00000000 20-2 +14 XXABCDEF GHIJKLMN PR000000 00000000 21 22-3 -4 +13 +12 XXXABCDE XXXXABCD FGHIJKLM EFGHIJKL NPR00000 MNPR0000 00000000 00000000 23-5 +11 XXXXXABC DEFGHIJK LMNPR000 00000000 24 25-6 -7 +10 +9 XXXXXXAB XXXXXXXA CDEFGHIJ BCDEFGHI KLMNPR00 JKLMNPR0 00000000 00000000 26-8 +8 XXXXXXXX ABCDEFGH IJKLMNPR 00000000 27 28-9 -10 +7 +6 XXXXXXXX XXXXXXXX XABCDEFG XXABCDEF HIJKLMNP GHIJKLMN R0000000 PR000000 29-11 +5 XXXXXXXX XXXABCDE FGHIJKLM NPR00000 30 31-12 -13 +4 +3 XXXXXXXX XXXXXXXX XXXXABCD XXXXXABC EFGHIJKL DEFGHIJK MNPR0000 LMNPR000 32-14 +2 XXXXXXXX XXXXXXAB CDEFGHIJ KLMNPR00 33 34-15 -16 +1 0 XXXXXXXX XXXXXXXX XXXXXXXA XXXXXXXX BCDEFGHI ABCDEFGH JKLMNPR0 IJKLMNPR 35-17 -1 XXXXXXXX XXXXXXXX XABCDEFG HIJKLMNP 36 37-18 -19-2 -3 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXABCDEF XXXABCDE GHIJKLMN FGHIJKLM 38-20 -4 XXXXXXXX XXXXXXXX XXXXABCD EFGHIJKL 39 40-21 -22-5 -6 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXABC XXXXXXAB DEFGHIJK CDEFGHIJ 41-23 -7 XXXXXXXX XXXXXXXX XXXXXXXA BCDEFGHI 42 43-24 -25-8 -9 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX ABCDEFGH XABCDEFG 44-26 -10 XXXXXXXX XXXXXXXX XXXXXXXX XXABCDEF 45 46-27 -28-11 -12 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXABCDE XXXXABCD 47-29 -13 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXABC 48 49-30 -31-14 -15 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXAB XXXXXXXA 1-32 -16 à -32 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX Tableau 2-1 : Caractéristique du bloc décaleur X : bit d extension (soit le signe pour un décalage arithmétique ou 0 pour un décalage logique. Le placement initial des d entrée est déterminé par un code de contrôle HI / LO. Les blocs de décalage et la logique associée sont contrôlés par l ensemble de registres suivants : Le registre SI fournit la grandeur de à décaler à l entrée du bloc de décalage et à l entrée du détecteur d exposent. Ce registre de peut être lu et écrit directement par le bus DMD. Comme le montre la structure générale du décaleur à barillet, les entrées du bloc décaleur et du détecteur d exposent peuvent également provenir des registres connectés au bus de résultat (R-bus), soit MR, AR, SR. Le registre SR, connecté à la sortie de bloc de décalage via le bloc logique OR / PASS est un registre de 32 bits divisé en deux registres de SR0 et SR1. Ces deux registres peuvent être chargés par le bus DMD et lus soit par le même bus ou par le bus résultat R. Le registre SR peut également être utilisé en «feedback» comme entrée du bloc logique OR / PASS pour les décalages en double précision.
DESCRIPTION DU CŒUR DE L ADSP2171 Page 23 Le registre SE (Shifter exponent) a une largeur de 8 bits et contient l exposent du nombre contenu dans SI durant une opération de normalisation / dénormalisation. Le registre SE peut être lu et écrit par le bus DMD (8 bits LSB). Son contenu est un nombre binaire en complément à deux de format 8.0 (entier signé). En lecture les bits de poids forts (8 bits MSB) représentent l extension du signe de la valeur de SE Le registre SB (Shifter block) est important pour les opérations en virgule flottante. Il contient la valeur de décalage nécessaire à la normalisation du nombre contenu dans SI. Le registre SB peut être lu et écrit par le bus DMD (5 bits LSB). Son contenu est un nombre binaire en complément à deux de format 5.0 (entier signé). En lecture les bits de poids forts (11 bits MSB) représentent l extension du signe de la valeur de SI N importe quel registre associé à l unité de décalage peut être lu et écrit dans un même cycle d horloge. Les registres sont lus au début du cycle et écrits à la fin du même cycle. Dans un cycle donné, la valeur contenue dans un registre quelconque a été chargée à la fin du cycle précédent. Par conséquent, une nouvelle valeur écrite dans un registre ne peut pas être lue avant le début du cycle suivant. Cette caractéristique permet à un registre de fournir un opérande sur une entrée du décaleur à barillet au début d un cycle et être rafraîchit par un nouvel opérande issu de la mémoire à la fin du cycle. Ceci permet aussi de stocker en mémoire le contenu d un registre résultat et rafraîchir ce dernier par un nouveau résultat issu du décaleur à barillet dans le même cycle. Les registres du décaleur à barillet sont doubles (2 banks). Seul un bank est accessible à la fois. Le second bank peut être activé, par exemple dans un sous programme ou une routine d interruption, ce qui évite le stockage des données contenues dans les registres. La sélection du bank primaire ou secondaire est commandée par le bit MSTAT[0] (voir 2.6.4.3). La valeur de décalage de l entrée est déterminée par un mot de contrôle de code (C) et un bit de référence HI / LO. Le mot de contrôle est un nombre signé de 8 bits indiquant le sens et le nombre de décalage à effectuer. Une valeur positive correspond à un décalage vers la gauche, soit dans le sens croissant (upshift) alors qu une valeur négative correspond à un décalage vers la droite, soit dans le sens décroissant (downshift). Ce mot de contrôle peut venir de trois sources. Le registre SE (Shift Exponent), la valeur négative du registre SE (NEGATE) ou une valeur immédiate d instruction. Le bit HI / LO détermine le point de référence du décalage. Si le bit HI /LO vaut «1», les décalages sont référencés au registre SR1 soit les MSB du registre résultat SR. Si par contre le bit HI /LO vaut «0», les décalages sont référencés au registre SR0 soit les LSB du registre résultat SR. Le bit HI / LO détermine le point de référence du décalage. Si le bit HI /LO vaut «1», les décalages sont référencés au registre SR1 soit les MSB du registre résultat SR. Si par contre le bit HI /LO vaut «0», les décalages sont référencés au registre SR0 soit les LSB du registre résultat SR. Lors d un décalage vers la gauche, les bits ajoutés à droite sont des «0». Par contre dans un décalage vers la droite, les bits ajoutés à gauche sont des bits d extension. La valeur des bits d extension peut provenir de trois sources. Le bit de poids forts du registre d entrée SI (bit de signe), le bit de retenue (AC) du registre d état arithmétique ASTAT[3] ou un «0». Le bloc OR / PASS permet la réalisation d une combinaison de décalage pour les nombres en double précision. Plusieurs instructions de décalage [SR OR] sont combinées avec un OU logique bit à bit avec le contenu courant du registre de résultat SR.
DESCRIPTION DU CŒUR DE L ADSP2171 Page 24 Mode HI Mode HIX Mode LO ENTREE (MSB) EXP. AV ENTREE (MSB) EXP. SS ENTREE (LSB) EXP. 1 DDDDDDDD DDDDDDDD +1 S NDDDDDDD DDDDDDDD -15 SNDDDDDD DDDDDDDD 0 0 SNDDDDDD DDDDDDDD 0 S SNDDDDDD DDDDDDDD -16 SSNDDDDD DDDDDDDD -1 0 SSNDDDDD DDDDDDDD -1 S SSNDDDDD DDDDDDDD -17 SSSNDDDD DDDDDDDD -2 0 SSSNDDDD DDDDDDDD -2 S SSSNDDDD DDDDDDDD -18 SSSSNDDD DDDDDDDD -3 0 SSSSNDDD DDDDDDDD -3 S SSSSNDDD DDDDDDDD -19 SSSSSNDD DDDDDDDD -4 0 SSSSSNDD DDDDDDDD -4 S SSSSSNDD DDDDDDDD -20 SSSSSSND DDDDDDDD -5 0 SSSSSSND DDDDDDDD -5 S SSSSSSND DDDDDDDD -21 SSSSSSSN DDDDDDDD -6 0 SSSSSSSN DDDDDDDD -6 S SSSSSSSN DDDDDDDD -22 SSSSSSSS NDDDDDDD -7 0 SSSSSSSS NDDDDDDD -7 S SSSSSSSS NDDDDDDD -23 SSSSSSSS SNDDDDDD -8 0 SSSSSSSS SNDDDDDD -8 S SSSSSSSS SNDDDDDD -24 SSSSSSSS SSNDDDDD -9 0 SSSSSSSS SSNDDDDD -9 S SSSSSSSS SSNDDDDD -25 SSSSSSSS SSSNDDDD -10 0 SSSSSSSS SSSNDDDD -10 S SSSSSSSS SSSNDDDD -26 SSSSSSSS SSSSNDDD -11 0 SSSSSSSS SSSSNDDD -11 S SSSSSSSS SSSSNDDD -27 SSSSSSSS SSSSSNDD -12 0 SSSSSSSS SSSSSNDD -12 S SSSSSSSS SSSSSNDD -28 SSSSSSSS SSSSSSND -13 0 SSSSSSSS SSSSSSND -13 S SSSSSSSS SSSSSSND -29 SSSSSSSS SSSSSSSN -14 0 SSSSSSSS SSSSSSSN -14 S SSSSSSSS SSSSSSSN -30 SSSSSSSS SSSSSSSS -15 0 SSSSSSSS SSSSSSSS -15 S SSSSSSSS SSSSSSSS -31 S : bit de signe N : premier bit de donnée avant l extension du signe D : bit de donnée Tableau 2-2 : Caractéristique du détecteur d exposant Le détecteur d exposant (exponent detector) permet la construction de l exposant équivalent à un décalage. Il existe trois manières de réaliser l interprétation de l exposant : Dans le mode HI, l opérande d entrée est soit en simple précision, ou alors il s agit de la partie haute d une entrée en double précision. Dans ce cas le détecteur d exposant détermine le nombre de décalages vers la gauche (upshift) à effectuer pour que les bits d extension de signe disparaissent. La valeur de l exposant est dans ce cas négative. On a donc une expression en virgule flottante avec la mantisse dans le registre SR et l exposant dans le détecteur d exposant. Le bit de signe, MSB du résultat (registre SR), est également chargé dans le registre d état ASTAT (SS : shifter Input Sign voir 2.6.4.2) Dans le mode HI étendu (HIX) l entrée est interprétée comme le résultat d une addition ou soustraction exécutée par l ALU, résultat qui peut être entaché d un dépassement de capacité (AV = «1» : overflow dans le registre d état arithmétique). Dans ce cas le détecteur d exposant prend en compte le contenu de AV en considération. Si le contenu de détecteur d exposant est +1, le bit supplémentaire pour la normalisation de la mantisse vaut ASTATAC[3] (AC) du registre d état arithmétique ASTAT. Si ASTAT[2] (AV) vaut «0», le décalage est identique à celui du mode HI. Dans le mode HIX, le bit de signe, MSB du résultat (registre SR), est également chargé dans le registre d état arithmétique, bit ASTAT[7] (SS). Lorsqu il y a dépassement (AV= «1») SS est chargé avec le MSB inversé du registre de résultat SR. Dans le mode LO, l entrée est interprétée comme la partie poids faible (LSB) d un nombre en double précision. Dans le mode LO, le détecteur d exposant prend le bit ASTAT[7] (SS) du registre d état arithmétique comme le bit de signe du nombre. Le registre SE est chargé par le détecteur d exposant seulement si ce dernier contient 15. Ceci se produit que si la partie poids fort (MSB) du nombre en double précision ne contient que des bits d extension de signe. Le comparateur d exposant est utilisé pour comparer la valeur fournie par le détecteur d exposant avec une valeur contenue dans le registre SB (shifter block). La valeur dudit
DESCRIPTION DU CŒUR DE L ADSP2171 Page 25 registre est modifiée que si la valeur de l exposant contenu dans le détecteur d exposant est supérieure à la valeur contenue dans SB. 2.5.2 Registres d entrées et de sortie du décaleur à barillet. Les registres connectés aux ports du décaleur à barillet sont les suivants Source Destination Registres connectés au port I Registre connectés au port O BR SI (Bus DMD) SR0 (Bus R) SR0 (Bus R) SR1 (Bus R) SR1 (Bus R) ALU AR (Bus R) MAC MR0 (Bus R) MR1 (Bus R) MR2 (Bus R) 2.5.3 Opération de décalage. Le décaleur à barillet exécute les fonctions suivantes : décalage arithmétique (Arithmetic Shift : ASHIFT ; décalage logique (Logical Shift : LSHIFT) ; normalisation (Normalize : NORM) ; définition de l exposant (Derive Exponent : EXP) ; ajustement de l exposant (Block Exponent Adjust : EXPADJ). 2.5.4 Ajustement de l exposant EXPADJ Cette fonction détecte le plus grand exposant entre un ensemble de nombres. a) Initialisation : charger le registre SB avec 16 Le registre SB (5 bits) est initialisé avec une valeur correspondant à la plus petite valeur possible d exposant sur un nombre de. b) Normalisation du premier nombre : charger SI avec 11110101 10110001 Le détecteur d exposant donne 3-3 > SB=-16 SB=-3 c) Normalisation du deuxième nombre : charger SI avec 00000001 01110110 Le détecteur d exposant donne 6-6 < SB=-3 SB=-3 d) Normalisation du nombre suivant : charger SI avec.. A la fin de ces opérations, SB contient l exposant correspondant au nombre le plus grand. Grâce à cette opération, il est possible de réaliser une opération de dénormalisation pour un calcul ultérieur (par exemple une addition). 2.5.5 Décalage immédiat Un décalage immédiat permet simplement de décaler un mot de soit vers la gauche (left : upshift) soit vers la droite (right : downshift) d un nombre entier de bits. Le nombre contrôlant le décalage est un nombre signé de 8 bits. Le registre SE n est ni utilisé ni modifié par une opération de décalage immédiat. Quelques exemples :
DESCRIPTION DU CŒUR DE L ADSP2171 Page 26 Décalage logique de 5 bits vers la gauche référencé au poids forts de SR (SR1) SI=0xB6A3 SI = 10110110 10100011 SR=LSHIFT SI BY 5 (HI) Résultat : SR1 = 00000101 10110101 SR0 = 00011000 00000000 Décalage logique de 5 bits vers la droite référencé au poids faible de SR (SR0) SI=0xB6A3 SI = 10110110 10100011 SR=LSHIFT SI BY 5 (LO) Résultat : SR1 = 00000000 00010110 SR0 = 11010100 01100000 Décalage arithmétique de 5 bits vers la gauche référencé au poids forts de SR (SR1) SI=0xB6A3 SI = 10110110 10100011 SR=ASHIFT SI BY 5 (HI) Résultat : SR1 = 11111101 10110101 SR0 = 00011000 00000000 2.5.6 Dénormalisation L opération de dénormalisation effectue le décalage d une mantisse en fonction de son exposant, ce dernier se trouvant dans le registre SE. Il s agit donc d une opération permettant de passer un nombre en virgule flottante en virgule fixe. La valeur du décalage doit être explicitement chargée ou être le résultat d une ou de plusieurs opérations précédentes. Les deux exemples qui suivent correspondent à une dénormalisation d un nombre en double précision, seul l ordre de conversion change. 2.5.6.1 Premier possibilité Décalage arithmétique de SE = -3 référencé aux poids forts de SR (SR1) SE = -3 SI = 10110110 10100011 SR=ASHIFT SI (HI) Résultat : SR1 = 11110110 11010100 SR0 = 01100000 00000000 Décalage arithmétique de SE = -3 référencé aux poids faibles de SR (SR0) avec fonction logique OU afin d éviter une «surécriture» de SR1 et SR0 SE = -3 SI = 01110110 01011101 SR=SR OR LSHIFT SI (LO) Résultat : SR1 = 11110110 11010100 SR0 = 01101110 11001011 2.5.6.2 Deuxième possibilité Décalage logique de SE = -3 référencé aux poids faibles de SR (SR0) SE = -3 SI = 01110110 01011101 SR= ASHIFT SI (LO) Résultat : SR1 = 00000000.00000000 SR0 = 00001110 11001011
DESCRIPTION DU CŒUR DE L ADSP2171 Page 27 Décalage arithmétique de SE = -3 référencé aux poids forts de SR (SR1) avec fonction logique OU afin d éviter une «surécriture» de SR1 et SR0 SE = -3 SI = 10110110 10100011 SR=SR OR ASHIFT SI (HI) Résultat : SR1 = 11110110 11010100 SR0 = 01101110 11001011 2.5.7 Normalisation Les nombres avec un nombre de bits de signe redondant peuvent être normalisés. Il s agit ni plus ni moins que d une conversion entre les représentations en virgule fixe et virgule flottante. L opération de normalisation se déroule en deux étapes. La première permet de connaître la valeur de l exposant en observant les nombres de bits d extension de signe et la deuxième permet grâce à des décalages de normaliser la mantisse du même nombre. Pour la seconde partie de l opération, le nombre issu de la détection de l exposant est chargé dans le registre SE, puis grâce à l instruction NORM, permet le contrôle du décalage de la mantisse en utilisant la valeur contenue dans SE mais changée de signe (bloc NEGATE). 2.5.7.1 Normalisation d un nombre en simple précision Normalisation d un nombre en simple précision () contenu dans le registre AR. Première étape, détection de l exposant. SE = EXP AR (HI) AR = 11110110 11010100 Résultat : SE=-3 Dans cette première étape, il faut utiliser la référence HI pour préciser que le MSB de AR doit être considéré comme un bit de signe. Deuxième étape, normalisation de la mantisse. SE = -3 AR = 11110110 11010100 SR=NORM AR (HI) Résultat : SR1 = 10110110 10100000 SR0 = 00000000 00000000 Dans cette deuxième étape on aurait pu se référencé aux poids faible de SR (SR0) en utilisant l instruction SR=NORM AR (LO). 2.5.7.2 Normalisation d un nombre en double précision Pour un nombre en double précision, la normalisation se déroule selon un schéma identique à celui utilisé pour la simple précision. Normalisation d un nombre en double précision () contenu dans le registre AR. Première étape, détection de l exposant Détection de l exposant (MSB) SE = EXP SI (HI) SI = 11110110 11010100 Résultat : SE=-3
DESCRIPTION DU CŒUR DE L ADSP2171 Page 28 Détection de l exposant (LSB). Dans ce cas SE est modifié que s il vaut 15 avant l exécution de l instruction SE = EXP SI (LO) SI = 01101110 11001011 Résultat : SE=-3 (pas de chargement) Deuxième étape, normalisation de la mantisse. Normalisation des MSB SE = -3 SI = 11110110 11010100 SR=NORM SI (HI) Résultat : SR1 = 10110110.10100000 SR0 = 00000000 00000000 Normalisation des LSB SE = -3 SI = 01101110 11001011 SR=SR OR NORM SI (LO) Résultat : SR1 = 10110110.10100011 SR0 = 01110110 01011000 2.6 CONTRÔLE DE PROGRAMME DE LA FAMILLE ADSP2100 2.6.1 Le séquenceur de programme 2.6.1.1 Caractéristiques du séquenceur Le séquenceur de programme de l'adsp2171 crée les adresses des instructions à exécuter et gère les divers contrôles de fonctionnement du programme. Le diagramme par schéma blocs du séquenceur est présenté à la Figure 2-15. Les instructions sont adressées grâce au bus PMA et les données programme correspondant à ces adresses sont envoyées vers le registre des instructions. Le compteur de programme (Program Counter incrémenter ou PC incrémenter) permet l'adressage de manière progressive et ordonnée des instructions du programme principal. Le rôle du séquenceur intervient surtout pour des programmes secondaires, durant le fonctionnement des sous-programmes, des boucles ou des interruptions. Une boucle «démarre» après chaque instruction DO UNTIL. Une instruction de branchement est introduite après chaque instruction JUMP Un sous programme est «appelé» par l'instruction CALL. Le retour du sous-programme impose l'instruction RTS (ReTurn from a Subroutine). Le retour d'une interruption impose l'instruction RTI (ReTurn from an Interrupt). Toutes ces instructions font fonctionner le processeur en programme secondaire. Pour sauvegarder la future instruction du programme principal, le processeur utilise des piles (stack) comme on peut le voir sur la Figure 2-15. Pour chaque nouvelle instruction située dans la mémoire de programme, le multiplexeur «adresse suivante» envoie l'adresse nécessaire par l'intermédiaire du bus PMA. Il sélectionne la source d'adresse à utiliser, selon la commande venant du registre d'instruction
DESCRIPTION DU CŒUR DE L ADSP2171 Page 29 (JUMP / CALL), du comparateur de boucle, du système de logique de décision conditionnelle ou du registre de contrôle d'interruption. 24 bits PMD BUS DMD BUS 14 bits LSB COUNT STACK 4 x 14 14 bits LSB 8bits LSB From instruction register ADDRESS : JUMP / CALL CONDITION CODE FUNCTION FIELD MUX 14 bits CNTR (Counter) 14 bits 14 bits 8bits ADDRESS OF LAST INSTRUCTION & TERMINATION CONDITION 8bits LSB STATUS STACK LOGIC CONDITION LOOP STACK 4 x 18 14 bits MUX 8bits 8bits LOOP COMPARATOR Arithmetic Status STATUS REGISTER 14 bits 14 bits Interrupt INTERRUPT CONTROLLER PC STACK 16 x 14 PROGRAM COUNTER MUX 14 bits INCREMENT 14 bits 14 bits From FI Pin NEXT ADDRESS MUX 14 bits NEXT ADDRESS SOURCE SELECTION 14 bits 14 bits PMA BUS 14 bits Figure 2-15 : Séquenceur de programme La source d'adresses principale est le compteur de programme et d'incrémentation (PC d'incrémentation) qui fournit l'adresse de l'instruction suivante, lorsque le processeur fonctionne en programme principal. Quand l'adresse est envoyée sur le bus PMA,elle est aussi rechargée dans le compteur pour commencer un nouveau cycle.
DESCRIPTION DU CŒUR DE L ADSP2171 Page 30 Une autre source d'adresses est la pile du compteur (PC Stack), qui fournit l'adresse de l'instruction suivante, lorsque le processeur fonctionne à la fin d'un programme secondaire: retour de sous-programme (RTS) ou d'interruption (RTI). Le haut de la pile est aussi utilisé en source d'adresses en fin de boucle (DO UNTIL). Le contrôleur d'interruption fournit l'adresse suivante du programme quand une interruption est en fonctionnement. L étude plus complète des interruptions est développée au 2.9.2. Une dernière source d'adresses possible est le générateur d'adresses DAG2, qui peut pointer vers la mémoire programme (registres d'index pointeurs I4 à I7). 2.6.1.2 Compteur de programme et pile de sauvegarde Le compteur de programme (PC) est un registre de 14 bits qui contient l'adresse de l'instruction à exécuter. La sortie de ce registre est reliée à un «système d'incrémentation» qui ajoute «1» à la valeur courante. La sortie du système va vers le multiplexeur de sélection des sources d'adresses. À ce compteur est associée une pile de 16 mots (PC Stack), dans laquelle est chargée la sortie du système d'incrémentation (adresse PC + 1) lorsque l instruction CALL est exécutée. La pile du compteur de programme est également utilisée lorsqu une boucle DO UNTIL est exécutée ainsi que lors du traitement d une interruption. Dans le cas d'une interruption, le système d'incrémentation est désactivé, si bien que c'est l'adresse (PC) qui est chargée dans la pile. La sauvegarde et la récupération de l'adresse PC ou PC + 1 est effectuée automatiquement par le processeur, grâce aux instructions RTS ou RTI. Dans le cas d un saut indirect, l unité DAG2 fournit l adresse de la prochaine instruction sur le bus PMA et le compteur de programme PC est directement chargé depuis ce même bus. Il est possible de lire ou écrire dans la pile du compteur de programme en utilisant un pseudo registre TOPPCSTACK. 2.6.1.3 Compteurs, pile de compteur et comparateur de boucle La boucle (DO UNTIL) est pratiquement toujours utilisée dans les programmes de DSP, pour mettre en place un filtre numérique, une transformée de Fourier ou une corrélation sur des signaux. Le compteur de boucle et la pile de compteur de boucle fonctionnent avec des valeurs «entières» de 14 bits (sans signe). Le compteur (registre CNTR) est chargé, avant le démarrage de la boucle, d'une valeur venant des 14 bits de faibles poids du bus DMD (les deux bits de poids forts sont mis à 0). À chaque exécution d'une boucle de programme, il est automatiquement décrémenté de «1». Le signal logique de statut CE (Counter Expired) indique la fin de la boucle, en agissant sur le système de décision logique conditionnelle. Le compteur peut aussi être testé et automatiquement décrémenté par une instruction de saut conditionnel (IF JUMP) qui utilise le signal CE. Citons par exemple: IF NOT CE JUMP (nom de la boucle) ; Dans ce cas, le registre CNTR est décrémenté, sauf s'il est en fin de boucle. La pile de compteur de boucle intervient lorsqu'on programme plusieurs boucles emboîtées les unes dans les autres (jusqu'à quatre boucles). Elle permet de conserver les valeurs de CNTR des boucles en attente, alors que l'une d'entre elles est en exécution. En effet, quand une nouvelle valeur est chargée dans le compteur CNTR, la valeur qui y est présente est
DESCRIPTION DU CŒUR DE L ADSP2171 Page 31 sauvegardée dans cette pile. Elle est récupérée, lorsque la variable CE indique la fin de la dernière boucle en service, pour exécuter les instructions de la boucle précédente. La sauvegarde de la valeur dans CNTR n'a pas lieu dans deux cas : après un Reset ; si la pile est pleine : mise à 1 du bit SSTAT[3]. REMARQUE Dans ce dernier cas, il est possible de «forcer» une valeur dans CNTR sans sauvegarde éventuelle dans la pile du compteur, en utilisant l'instruction OWRCNTR (OverWRite CouNTeR). Cette instruction peut être utilisée pour la boucle la plus «intérieure». Il faut remarquer que la condition de fin de boucle n'est pas uniquement obtenue par le signal CE ; il est possible d'utiliser d'autres conditions, à partir des bits d'état de l'alu ou du MAC, ou même de faire effectuer au processeur une boucle infinie, qui ne s'arrête qu'avec le Reset. Syntaxe Condition Si vraie EQ Egale zéro AZ=1 NE Différent de zéro AZ=0 LT Plus petit que zéro AN.XOR. AV=1 GE Plus grand ou égal à zéro AN.XOR. AV=0 LE Plus petit ou égal à zéro (AN.XOR. AV).OR. AZ=1 GT Plus grand que zéro (AN.XOR. AV).OR. AZ=0 AC Report (ALU carry) AC=1 NOT AC Pas de report (not ALU carry) AC=0 AV Dépassement (ALU overflow) AV=1 NOT AV Pas de dépassement (not ALU overflow) AV=0 MV Dépassement (MAC overflow) MV=1 NOT MV Pas de dépassement (not MAC overflow) MV=0 NEG Signe négatif sur entrée x (ALU) AS=1 POS Signe positif sur entrée x (ALU) AS=0 CE Compteur à zéro (counter expired) CE=0 FOREVER Toujours L ensemble de toutes les conditions possibles de fin de boucle s'exprime sur 4 bits. Le but du comparateur de boucle est d'intervenir quand la dernière instruction de la boucle est exécutée. Quand une boucle est introduite par l'instruction DO UNTIL, les 14 bits d'adresse de la dernière instruction en cours dans la boucle et les 4 bits représentant la condition de fin de boucle (indiquée dans l'instruction associée à DO UNTIL) forment un mot de 18 bits qui est envoyé dans la pile de boucle (loop stack). En même temps, la sortie de l'incrémentation du PC est chargée dans la pile du compteur PC. Comme l'instruction DO UNTIL est placée juste avant la première adresse de l'instruction de la boucle, c'est cette adresse qui est chargée dans la pile du PC. Le comparateur de boucle est activé, dès que la pile de boucle est chargée. Il constate la fin de boucle lorsque les deux adresses, celle de la pile du PC et celle de la pile de boucle sont égales. Il envoie au sélecteur de la source d'adresses, un signal de commande qui dépend du type d'instruction de fin de boucle. Plusieurs cas sont possibles : Cas 1 Si cette dernière instruction n'est ni un saut (JUMP), ni un appel à un sous-programme (CALL), ni un retour (RTS ou RTI), ni une attente d'interruption (IDLE), le circuit
DESCRIPTION DU CŒUR DE L ADSP2171 Page 32 fournissant l'adresse suivante sera déterminé par rapport à la condition enregistrée en haut de la pile de boucle. Si cette condition terminale est fausse ou non vérifiée, l'adresse de l'instruction suivante est celle qui a été sauvegardée dans le haut de la pile du compteur PC. Si cette condition est vérifiée, le système d'incrémentation du compteur PC devient la source d'adresses, la boucle est terminée et toutes les données anciennes dans les piles (pile du PC, pile du compteur de boucle, pile de boucle) sont automatiquement «restaurées» (popped) comme si la boucle n'avait jamais fonctionné (le processeur revient à l'état initial). Cas 2 Si la dernière instruction est un saut (JUMP), un appel à un sous-programme (CALL), ou un retour (RTS ou RTI), cette instruction devient prioritaire sur la procédure de fin de boucle. Dans ce cas, les données anciennes dans les piles ne sont pas «restaurées» et le programmeur devra éventuellement en tenir compte, ou même prévoir dans le programme les instructions pour restaurer l'état initial correct du processeur (POP CNTR, POP PC, POP LOOP). Si la condition validant cette instruction n'est pas vérifiée, la procédure de fin de boucle est alors appliquée, comme pour le cas 1 précédant. Cas 3 Si la dernière instruction de la boucle est IDLE, le déroulement du programme est alors contrôlé par cette instruction, qui correspond à un état d'attente d'interruption à faible consommation. Dès qu'une interruption se produit, le processeur est activé, la boucle est exécutée jusqu'à la fin et le programme se poursuit avec la première instruction qui suit la boucle. On a vu que les instructions de contrôle de programme suivantes: JUMP, CALL, DO UNTIL et IDLE nécessitent l'utilisation des piles pour les compteurs du séquenceur. Chacune de ces instructions intervient différemment dans le processus d'utilisation du séquenceur, ce qui donne les instructions décrites dans le paragraphe suivant. 2.6.2 Instruction de contrôle de séquence de programme 2.6.2.1 Instruction de saut direct JUMP L adresse de saut (14 bits) est intégrée dans l instruction JUMP. Lorsque cette instruction est décodée, l adresse de saut représentant l adresse de la prochaine instruction est fournie par la sortie du séquenceur de programme (multiplexeur). L adresse est aiguillée puis chargée dans le compteur de programme, via le bus PMA, pour le cycle suivant. Instruction de saut (JUMP) direct : JUMP fir_start ; «fir» est l'étiquette d'une partie de programme permettant au programmeur de préciser la réalisation effectuée par le processeur. Instruction de saut conditionnel : IF(condition) JUMP fir_start
DESCRIPTION DU CŒUR DE L ADSP2171 Page 33 2.6.2.2 Instruction de saut indirect JUMP() Le saut peut également être indirect. L adresse est alors contenue dans un des registres pointeurs Ix de l unité DAG2 (I4 à I7). L adresse est transmise via le bus PMA (adresse de la mémoire de programme). C'est pour cela qu il est nécessaire d'utiliser le générateur d'adresses DAG2, en association avec le séquenceur. JUMP (I4) ; 2.6.2.3 Instruction d'appel de sous-programme CALL L adresse du sous-programme (subroutine) est associée avec l'instruction CALL, et une fois extraite du registre d'instruction, cette adresse est chargée dans le compteur de programme (PC) au cycle suivant, en passant par le multiplexeur de sortie. Par ailleurs, le compteur de programme est incrémenté et sauvegardé dans la pile du compteur. Au retour du sousprogramme, on extrait l'adresse sauvegardée dans la pile du compteur ce qui permet de continuer ainsi le programme. CALL fir ; 2.6.2.4 Instruction de boucle DO UNTIL La forme la plus utilisée de la création de boucle DO UNTIL utilise le registre de contrôle (CNTR) comme compteur d itération. Lorsque le registre CNTR est utilisé pour le contrôle d itération de boucle, la condition de fin de boucle CE (counter expired) doit être utilisée. L0=10 ; {définition de longueur d un buffer} I0=^data-buffer ; {I0 = adresse de début du buffer} M0=1 ; {défini l incrément du pointeur I0} CNTR = 10 ; {CNTR = longueur du buffer} DO end_of_loop UNTIL CE ; {répète la boucle jusqu à CNTR=0} DM(I0,M0)=0 ; {exécute une instruction} ; end_of_loop : MR =... ; Cette instruction utilise le registre compteur CNTR pour fixer le nombre de boucles à effectuer. Ici l'étiquette «end_of_loop» indique que toutes les instructions écrites entre DO... UNTIL et «end_of_loop» sont exécutées dans la boucle. Lorsque l instruction CNTR=10 ; est exécutée, le compteur est chargé via le bus DMD. Si la boucle est imbriquée dans une autre ( CNTR 0 ), la valeur présente de CNTR est sauvée dans la pile du compteur de boucle (count stack). L instruction DO end_of_loop UNTIL CE ; fixe les conditions de boucle. L exécution d une boucle DO UNTIL sauve l adresse de l instruction suivante (PC+1) immédiatement DO UNTIL dans la pile du compteur de programme (PC stack). Dans le même cycle, l adresse de fin de boucle (end_of_loop) et la condition de terminaison sont sauvées dans la pile du compteur de boucle (loop stack). A chaque exécution d une instruction à l intérieur de la boucle, le comparateur de boucle vérifie l adresse de l instruction en cours avec l adresse de fin de boucle (end_of_loop). Chaque fois que la fin d une boucle est atteinte, le comparateur de boucle, démarre une évaluation de la condition de terminaison de boucle. Si la condition de terminaison est fausse, l adresse de l instruction suivante n est pas une incrémentation du compteur de programme, mais l adresse suivant l instruction DO UNTIL. Cette adresse se trouve dans la pile du compteur de programme (PC stack).
DESCRIPTION DU CŒUR DE L ADSP2171 Page 34 Si la condition de terminaison est vraie, les piles du compteur de programme et de boucle restituent la valeur supérieure de la pile (mise à jour). Le compteur de programme prend l adresse de l instruction suivante par une simple incrémentation. 2.6.2.5 Instruction d'attente d'interruption (IDLE) Elle permet de réduire la consommation du processeur pendant l'attente d'une interruption. Il est possible, selon l'instruction, de diviser la fréquence de l'horloge interne, selon un rapport n parmi n = 16, 32, 64 ou 128. IDLE(n) ; Par défaut on écrit IDLE sans préciser n. Dans ce cas le DSP se met en mode de veille et attend une interruption pour continuer. La fréquence d horloge interne ne change pas. Le délai avant le traitement de l interruption est d un cycle d horloge. IDLE(n) augmente de délai de réponse d un facteur n. 2.6.3 Les interruptions Les interruptions permettent de stopper une tâche en cours pour exécuter une tâche qui, en général, répond à des contraintes de temps réel. Les interruptions propres à un processus ne répondent pas toutes aux mêmes critères d urgence. Il faut donc instaurer un régime de priorité afin de les traiter par ordre d importance. 2.6.3.1 Séquence des opérations lors d une interruption Le contrôleur d interruptions du séquenceur de programme répond à une interruption en sauvant le contenu du compteur de programme dans une pile (PC stack) et en chargeant le compteur de programme avec l adresse de la première instruction de la routine à exécuter. Les interruptions activent un vecteur d interruption associé à l interruption à exécuter. Les emplacements pointés par le vecteur d interruption sont espacés de quatre positions mémoire, autorisant l intégration d une routine d interruption très courte. Pour des routines d interruption de plus de quatre instructions, le contrôle de la routine d interruption peut être transféré à un autre endroit de la mémoire à l aide d une instruction de saut direct (JUMP). Sources d interruptions RESET (non masquable) PWD (non masquable) IRQ 2 (périphériques) SPORT0 Transmission SPORT0 Réception Software 0 Software 1 SPORT1 Transmission ou IRQ 1 SPORT1 Réception IRQ 0 Timer Adresses du vecteur d interruption associé 0x0000 priorité la plus élevée 0x002C 0x0004 0x0010 0x0014 0x0018 0x001C 0x0020 0x0024 0x0028 Tableau 2-3 : Interruptions et vecteurs associés Après qu une interruption eut été exécutée, une instruction de retour d interruption (RTI) permet le retour au programme précédemment interrompu en effectuant la mise à jour du compteur de programme à l aide de la dernière valeur introduite dans la pile (PC Stack).
DESCRIPTION DU CŒUR DE L ADSP2171 Page 35 Lors du traitement d une interruption, les registres d état ASTAT, MSTAT et SSTAT sont également sauvés dans une pile qui leur est propre (Status stack). Toutes les lignes d interruptions peuvent également être activées /désactivées de manière software. MAIN PROGRAM TIMER INTERRUPT CONTROLLER PC PC Stack AX0=DM(I4,M3);...... MR=MR+MX0*MY0 (SS); DM(MULT)=MR1; INTERRUPT SERVICE ROUTINE TIMER_ISR : ENA SEC_REG ; I5=^TABLE ;... ;... ; RTI ; Interrupt vector dedicated to Timer 0x0028 PC 0X0028 : JUMP TIMER_ISR ; NOP ; NOP ; NOP ; MAIN PROGRAM MR=MR+MX0*MY0 (SS); DM(MULT)=MR1;... ;... ;... ; Figure 2-16 : Déroulement d une interruption 2.6.3.2 Configuration des interruptions Les registres suivants sont utilisés pour la configuration des interruptions : ICNL IMASK IFC : Interrupt CoNtroL register Détermine si les interruptions peuvent être imbriquées ou non. Définit la sensibilité des signaux (état ou transition) externes d interruptions IRQ 0, IRQ 1, IRQ 2. : Interupt MASK register Permet de masquer ou non les interruptions de manière individuelle. : Interrupt Force / Clear register Force une interruption ou annule une interruption en attente Les interruptions externes IRQ 0, IRQ 1, IRQ 2 peuvent être sensibles aux transitions (flanc descendant) ou aux niveaux. Les interruptions internes doivent être comparées aux interruptions sensibles aux transitions. Pour les interruptions IRQx sensibles aux transitions, la demande d interruption est mémorisée jusqu à ce cette dernière soit traitée, ensuite elle est automatiquement supprimée. Une interruption en attente peut être supprimée par software en écrivant un «0» dans le bit correspondant du registre IFC. Les interruptions sensibles aux transitions demandent en général moins de hardware que celles qui sont sensibles à un niveau. En effet ces dernières doivent être maintenues jusqu à
DESCRIPTION DU CŒUR DE L ADSP2171 Page 36 ce que l interruption soit traitée mais supprimée avant l instruction de retour (RTI), ceci pour éviter un second traitement de l interruption. Il est également possible de déterminer si les interruptions peuvent être imbriquées en fonction de leur niveau de priorité. Dans le cas d une imbrication, une interruption peut être stoppée afin de traiter une interruption plus prioritaire. 2.6.3.3 Délai d activation des interruptions Pour les sources d interruptions IRQx, SPORTx et Timer, le délai entre l apparition d une interruption et l exécution de la première instruction de la routine d interruption est de 3 cycles d horloge. Les 2 premiers cycles servent à la synchronisation interne. Le troisième cycle est nécessaire pour aller chercher la première instruction de la routine d interruption à traiter (fetch). Durant ce cycle le DSP exécute une instruction NOP. Au cycle suivant la première instruction de la routine d interruption est exécutée. Dans le même cycle l adresse de l instruction non exécutée de la routine interrompue est sauvée dans la pile de programme, les registres d état étant mémorisés dans la pile des registres d état. CLKOUT INTERRUPTION t t INSTRUCTION n-2 n-1 n NOP 1 ère instruct. routine d'int. "FETCH" n-1 n n+1 Vecteur d'interruption I+1 Figure 2-17 : Délai de reconnaissance d une interruption... t t 2.6.3.4 Gestion des piles STATUS, COUNT, LOOP et PC 2.6.3.4.1 Gestion des piles à l aide des instructions PUSH et POP Les pointeurs des piles de programme (PC stack), d état (Status stack) et de boucle (Loop Stack) peuvent être modifiés par les instructions suivantes : PUSH POP STS POP CNTR POP PC POP LOOP PUSH STS incrémente le pointeur de pile d état (Status Stack) de manière à pointer le prochain emplacement disponible. Les registres d état arithmétique (ASTAT), de mode de fonctionnement (MSTAT) et de masquage des interruptions (IMASK) sont sauvés dans la pile d état. PUSH STS est exécutée automatiquement lorsqu une interruption est activée. POP STS décrémente le pointeur de pile d état (Status Stack) de manière à pointer le prochain emplacement disponible. Les registres d état arithmétique (ASTAT), de mode de
DESCRIPTION DU CŒUR DE L ADSP2171 Page 37 fonctionnement (MSTAT) et de masquage des interruptions (IMASK) sont mis a jour avec le contenu des emplacements respectifs de la pile d état. PUSH STS est exécutée automatiquement lors d un retour d interruption (RTI). POP CNTR décrémente le pointeur de pile du décompteur (Count Stack) de manière à pointer le prochain emplacement disponible. Le décompteur de boucle CNTR est mis à jour avec le contenu de la pile. POP PC et POP LOOP décrémente le pointeur de pile de programme (PC Stack) mais dans ce cas l information contenue dans la pile est perdue. 2.6.3.4.2 Gestion de la pile de programme TOPPCSTACK Pour certaines applications, il est intéressant d'utiliser le contenu du haut de la pile. Si par exemple on utilise l'instruction POP PC, le contenu du haut de la pile du PC (PC stack) est perdu (il en est d'ailleurs de même avec l'instruction POP LOOP c'est le contenu du haut de la pile de boucle qui est perdu). Pour récupérer le contenu du haut de la pile du PC, on utilise l'instruction TOPPCSTACK, qui est chargée dans un registre de. Pour que l'opération s'effectue correctement, on prévoit une non-opération supplémentaire, ce qui donne reg = TOPPCSTACK ; NOP ; {reg signifie registre} A cette fin, il est possible d'utiliser tous les registres des unités de calcul du DSP AX0, AX1, AY0, AY1, MX0, MX1, MY0, MY1, SI, SE, SR0 et SR1, ainsi que tous les registres des deux générateurs d'adresses : I0 à I7, M0 à M7 et L0 à L7. Il est également possible de charger une valeur dans le haut de la pile du PC en écrivant l'instruction suivante : TOPPCSTACK = reg ; Certaines restrictions d utilisations de cette instruction doivent être prises en compte car sinon, on risque de perturber le fonctionnement de la boucle dans les cas suivants : juste avant une instruction de retour (RTI) à l intérieur d une boucle. 2.6.4 Les registres d état et de contrôle Les registres internes d état du processeur déterminent son fonctionnement, à partir des bits qui ont été chargés, soit au départ du programme, soit en cours d exécution. Ces registres peuvent être lus ou écrits de manière indépendante par le bus de données de la mémoire de données DMD. Les registres d état sont les suivants : - ASTAT : Arithmetic STATus register - SSTAT : Stack STATus register - MSTAT : Mode STATus register D autre part, les registres de contrôle des interruptions sont les suivants - ICNTL : Interrupt CoNTroL register - IMASK : Interupt MASK register - IFC : Interrupt Force / Clear register
DESCRIPTION DU CŒUR DE L ADSP2171 Page 38 Le contenu des registres d état est sauvegardé dans une pile des registres d état lorsque le processeur répond à une interruption. Ce contenu est récupéré après l instruction RTI. La profondeur de cette pile dépend du processeur (de la série ADSP21xx). Néanmoins le constructeur a prévu suffisamment de place dans la pile pour assurer le fonctionnement des interruptions et du processeur en fin d interruption pour le cas le plus défavorable, par exemple quand une interruption déclenche un sous-programme, qui fonctionne avec plusieurs boucles emboîtées. Deux bits d état SSTAT[4] et SSTAT[5] indiquent si la pile est vide ou pleine. 2.6.4.1 Registre d état arithmétique (ASTAT) Ce registre de 8 bits contient les états du processeur consécutifs aux opérations exécutées par l une des trois unités de calcul : ALU, MAC, ou Décaleur (Barel Shifter). C est surtout l ALU qui fournit des bits d état de sortie (6 bits). La répartition est celle de la Figure 2-18 Label Registre en lecture et écriture Allocation 7 6 5 4 3 2 1 0 ASTAT : 0 0 0 0 0 0 0 0 Registre DSP Unité de calcul SS MV AQ AS AC AV AN AZ Résultat nul Résultat négatif Dépassement Retenue Signe entrée X Fonctionnement en division Dépassement Signe Figure 2-18 : Répartition des bits d état du registre ASTAT ALU ALU ALU ALU ALU ALU MAC Décaleur L état du registre ASTAT est chargé à la fin de chaque cycle où l une des trois unités de calcul intervient, et ne peut être utilisé avant le cycle suivant. L utilisation du bus DMD ne modifie pas le registre ASTAT. Par contre, des bits d état y sont éventuellement chargés si l on utilise l instruction AR = PASS AX0 ; {ou soit AX1, AY0, AY1} 2.6.4.2 Registre d état des piles (SSTAT) Ce registre de 8 bits contient des états des piles, pour indiquer soit qu il y a dépassement de capacité de piles, soit qu elles sont vides. Si le bit correspondant est à «1», l état est vrai ; sinon, il est à «0». La répartition des bits d états des piles est illustrée par la Figure 2-19. L état pile vide indique que le nombre d opérations de récupération (pop operation) des valeurs sauvegardées dans la pile est supérieur ou égal au nombre d opérations de sauvegarde dans la pile. L état pile en dépassement de capacité indique que le nombre de sauvegardes a été tel par rapport au nombre de récupération que l on a rempli complètement la pile. Le processeur considère alors que les valeurs précédemment sauvegardées sont plus importantes que la nouvelle, et celle-ci risque d être perdue.
DESCRIPTION DU CŒUR DE L ADSP2171 Page 39 Label Registre en lecture seule Allocation 7 6 5 4 3 2 1 0 SSTAT : 0 0 0 0 0 0 0 0 Registre DSP Pile concernée LSO LSE SS0 SSE CS0 CSE PS0 PSE Pile vide Pile en dépassement de capacité Pile vide Pile en dépassement de capacité Pile vide Pile en dépassement de capacité Pile vide Pile en dépassement de capacité Figure 2-19 : Répartition des bits d état du registre SSTAT Comme le dépassement de capacité représente un risque de pertes d information, le bit d état dépassement reste en permanence, même si l on effectue par la suite des opérations de récupération. C est le cas, par exemple, de la pile du compteur de boucle, qui est «saturée» au-dessus de quatre sauvegardes, même si on effectue cinq opérations de récupération : le bit de dépassement reste à «1». Il faut alors effectuer un RESET du processeur pour remettre le bit d état de dépassement à «0». 2.6.4.3 Registre d état des modes de fonctionnement (MSTAT) Pile de compteur de programme (PC stack) Pile de compteur de programme (PC stack) Pile de compteur de boucle CNTR (Count stack) Pile de compteur de boucle CNTR (Count stack) Pile des registres d état (Status stack) Pile des registres d état (Status stack) Pile de boucle (Loop stack) Pile de boucle (Loop stack) Ce registre de 7 bits détermine certaines caractéristiques imposées au fonctionnement du processeur (Figure 2-20). Label Registre en lecture et écriture Allocation 6 5 4 3 2 1 0 MSTAT : 0 0 0 0 0 0 0 Registre DSP Destination Sélection de l ensemble des registres 0 : Bank 1, 1 : Bank 2 Bit-reverse (pour les calculs FFT) Enregistrement du bit de dépassement Mode de saturation des valeurs en cas de dépassement Format des données dans le multiplier 0 : Fraction, 1 : Entier Validation du Timer Mode de fonctionnement durant l accès aux bus (GO mode) Figure 2-20 : Répartition des bits d état du registre MSTAT Le bit d état de sélection de l ensemble des registres d entrée et de sortie des unités de calcul, (Bank1 et Bank2) est le bit MSTAT[0]. Lorsqu il est à «0», l ensemble est primaire (Bank1). Il est utilisé pour l exécution du programme principal. On peut mettre ce bit à «1» pour le traitement d un sous programme, ce qui évite la sauvegarde des contenus des registres du programme principal. Seul un ensemble donné de registres peut fonctionner pour une séquence du processeur (voir Figure 2-8, Figure 2-11 et Figure 2-14). La liste des registres dédoublés est la suivante : - Pour l ALU : AX0, AX1, AY0, AY1, AF, AR - Pour le MAC : MX0, MX1, MY0, MY1, MF, MR0, MR1, MR2 - Pour le décaleur : SI, SE, SB, SR0, SR1 Unités de calcul : ALU, MAC, Décaleur Générateur d adresses DAG1 ALU ALU MAC Timer Bus d adresses et de données
DESCRIPTION DU CŒUR DE L ADSP2171 Page 40 Le passage d un ensemble (bank) à l autre est très rapide. Pour le réaliser, il suffit d écrire l instruction suivante ENA SEG_REG; {passage à l ensemble secondaire (Bank2) des registres} Pour revenir de l ensemble secondaire (Bank2) à l ensemble primaire (Bank1), on écrit DIS SEG_REG ; {retour à l ensemble primaire (Bank1) des registres} Le mode d adressage bit-reverse (MSTAT[1]) est utilisé pour les calculs de transformée de Fourier rapide (FFT). Il ne concerne que le générateur d adresses DAG1. Le mode d enregistrement (MSTAT[2]) du dépassement de l ALU (bit d état AV), lorsqu il est validé, maintien AV=1 dès le premier dépassement pendant les calculs dans l ALU, même si par la suite aucun dépassement n a lieu. En écrivant «0» dans MSTAT[2], le bit d état AV revient à «0» si le dépassement disparaît. Le mode de saturation (MSTAT[3]) impose que les données dans l ALU aient, en cas de dépassement, soit la valeur minimum négative 0x8000, soit la valeur maximum positive 0x7FFF selon leur signe. La validation du Timer (MSTAT[5] = «1») provoque le début de la décrémentation de celui-ci. (voir 2.10) Le «GO mode» est un mode de fonctionnement (validité si le bit MSTAT[6] est à «1») qui permet au processeur de continuer à fonctionner alors qu un accès à un bus (d adresses ou de données) est en cours. Cependant, quand un accès au bus vient d une mémoire externe, le processeur sera en attente du transfert sur le bus. Si GO mode est désactivé, le processeur sera toujours en attente, dans tous les cas d accès. 2.6.4.4 Registre de contrôle des interruptions ICNTL ICNTL est un registre à 5 bits utilisé pour la configuration des interruptions externes. Les bits sont indéfinis après un RESET ICNTL permet de définir la sensibilité de chaque interruption externe IRQx. Cette sensibilité correspond soit à une détection de niveau (état logique «0»), soit à une transition négative (passage du niveau logique «1» au niveau logique «0»). Il n y a pas de contrôle de sensibilité pour les interruptions internes. Le bit ICNTL[4] permet la réalisation d interruptions imbriquées selon le niveau de priorité. Lorsque qu un bit de ICNTL est modifié, il faut attendre un délai de un cycle d horloge avant le changement de la configuration des interruptions. Label Allocation 4 3 2 1 0 ICNTL : 0 Registre DSP IRQ0 : sensibilité IRQ1 : sensibilité IRQ2 : sensibilité 0 : niveau 1 : flanc Autorisation d interruptions imbriquées Figure 2-21 : Registre de contrôle des interruptions ICNTL
DESCRIPTION DU CŒUR DE L ADSP2171 Page 41 2.6.4.5 Registre de masquage des interruptions IMASK Le registre IMASK permet le masquage individuel de chaque interruption («0» : interruption masquée, «1» interruption non masquée). Tous les bits sont mis à «0» lors d un RESET. Toutes les interruptions sont automatiquement masquées durant un cycle d instruction après modifications d un ou plusieurs bits de IMASK. Label Registre en lecture et écriture Allocation 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IMASK : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Registre DSP IRQ2 SPORT0 Transmission SPORT0 Réception Timer SPORT1 Réception ou IRQ0 SPORT1 Transmission ou IRQ1 Software 0 Software 1 Figure 2-22 : Registre de masquage des interruptions IMASK Lorsqu une interruption masquée est détectée sur une transition, cette dernière est mémorisée (latched). Elle peut donc être traitée par software. Le contenu du registre IMASK est automatiquement sauvé dans la pile des registres d état (Status Stack) lors du traitement d une interruption. IMASK est remis à jour lors du retour de l interruption (RTI). La configuration de IMASK est modifiée durant le traitement d une interruption. Le changement effectué dépend de l état du bit ICNTL[4] autorisant ou non l exécution de routines d interruption imbriquées. ICNTL[4] à «0». Dans ce cas l imbrication de routines d interruption n est pas admise. Niveau de priorité de l interruption Contenu de IMASK avant l interruption (sauvée dans la pile des registres d état) Contenu de IMASK lors du traitement d une routine d interruption 0 (priorité basse) ijklmn 000000 1 ijklmn 000000 2 ijklmn 000000 3 ijklmn 000000 4 ijklmn 000000 5 (priorité haute) ijklmn 000000 Tableau 2-4 : Modification de IMASK lors d une interruption pour ICNTL[4] = «0» Les bits de IMASK sont automatiquement mis à «0» afin de masquer toute demande d interruption supplémentaire. C est lors de la mise à jour de IMASK lors de la sortie de l interruption courante qui permettra de traiter les interruptions pendantes. ICNTL[4] à «1». Dans ce cas le registre IMASK est modifié de manière à masquer uniquement les interruptions de priorité inférieure à celle de l interruption en cours de traitement.
DESCRIPTION DU CŒUR DE L ADSP2171 Page 42 Niveau de priorité de l interruption Contenu de IMASK avant l interruption (sauvée dans la pile des registres d état) Contenu de IMASK lors du traitement d une routine d interruption 0 (priorité basse) ijklmn ijklm0 1 ijklmn ijkl00 2 ijklmn ijk000 3 ijklmn ij0000 4 ijklmn i00000 5 (priorité haute) ijklmn 000000 Tableau 2-5 : Modification de IMASK lors d une interruption pour ICNTL[4] = «1» 2.6.4.6 Registre de commande software des interruptions IFC IFC est un registre permettant de forcer ou de supprimer une interruption activée sur une transition. La commande se fait par software en écrivant un «1» dans la position correspondant au bit d activation ou de suppression de l interruption désirée. Label Registre en écriture seule Allocation 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 IFC : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Registre DSP Activation Suppression IRQ2 SPORT0 Transmission SPORT0 Réception SPORT1 Transmission ou IRQ1 SPORT1 Réception ou IRQ0 Software 1 Software 0 Software 0 Software 1 Timer Figure 2-23 : Registre de commande software des interruptions IFC Seules les interruptions activées sur transition peuvent être forcées. Une fois activée l interruption est exécutée une fois si elle n est pas masquée. Les interruptions internes peuvent être considérées comme sensible aux transitions. Les interruptions en attente activée sur transition peuvent être supprimées. Ces interruptions sont supprimées automatiquement lorsqu elles sont appelées. 2.7 TRANSFERT DE DONNÉES Cette section décrit les diverses unités permettant le transfert des données entre bus de données (DMD et PMD). Il s agit des Générateurs d adresses et de l unité d échange entre bus. 2.7.1 Les générateurs d adresses (Data Address Generators) 2.7.1.1 Description des unités DAG Chaque DSP de la famille ADSP2100 contient deux générateurs d adresses permettant d accéder simultanément aux mémoires d adresses et de données. Les unités DAG permettent l adressage indirect. Il existe deux structures de buffers l une linéaire, l autre Timer SPORT1 Réception ou IRQ0 SPORT1 Transmission ou IRQ1 SPORT0 Réception SPORT0 Transmission IRQ2
DESCRIPTION DU CŒUR DE L ADSP2171 Page 43 circulaire avec un contrôle en modulo 2 n. Ces deux unités présentent chacun une particularité : DAG1 DAG2 : Contrôle uniquement les adresses de la mémoire de données. Possède la particularité de l inversion de bit pour le traitement de la FFT. : Contrôle autant les adresses de la mémoire de données que celles de la mémoire de programme. Ne possède la particularité de l inversion de bit pour le traitement de la FFT. La Figure 2-24 montre la structure de l unité DAG1. On peut voir trois blocs de registres. Le bloc de registres de modification M, le bloc de registres pointeurs I et le bloc de registres de longueur L. 14 bits DMD 14 bits 14 bits 14 bits 14 bits 14 bits 14 bits 14 bits From instruction MUX 2bits 2bits 2bits L REGISTERS 4x14 MODULUS LOGIC I REGISTERS 4x14 M REGISTERS 4x14 14 bits 14 bits 14 bits 14 bits ADD BIT REVERSE DAG1 only 14 bits Figure 2-24 : Générateurs d adresses Chaque bloc de registre contient quatre registres de 14 bits qui peuvent être lus ou écrit via le bus DMD. Le contenu des registres I et L est considéré comme non-signés, par conséquent les deux bits MSB du bus DMD sont mis à «0». Par contre les registres M contiennent des grandeurs signées, les deux bits MSB du bus DMD prennent des valeurs correspondant à l extension du signe. Les registres pointeurs I0 à I3 pour l unité DAG1 et I4 à I7 pour l unité DAG2 contiennent les adresses réelles utilisées pour accéder à des positions mémoire. Lors d un adressage en mode indirect l adresse stockée dans le registre sélectionné Ix devient l adresse de la mémoire. Pour l unité DAG1, l adresse générée passe à travers une logique permettant l inversion de bit. Cette caractéristique est activée en forçant le bit MSTAT[1] ( 2.6.4.3) à «1» ou en utilisant l instruction EN BIT_REV. De plus, la sortie de cette unité n est connectée
DESCRIPTION DU CŒUR DE L ADSP2171 Page 44 qu au bus d adresses de la mémoire de donnée DMA. Pour l unité DAG2, l adresse générée peut activer les deux bus d adresses, soit les bus DMA et PMA. Les registres de modification (M), désignés par M0 à M3 pour l unité DAG1 et M4 à M7 pour l unité DAG2 contiennent les incréments algébriques (grandeurs signées) à ajouter aux registres pointeurs I juste après un adressage effectif. Les registres (M) de l unité DAG1 ne peuvent pas commander les registres (I) de l unité DAG2 et réciproquement. Par contre n importe quel registre de modification M d une unité peut commander n importe quels registres pointeurs de la même unité. L adressage peut être linéaire ou circulaire. Contrairement aux registres de modifications (M), les registres de longueurs (L) appartiennent aux registres pointeurs de même ordre (L0 à I0, L1 à I1,.L7 à I7). 2.7.1.2 Caractéristique de l adressage indirect Les DSP de la famille ADSP2100 permettent les modes d adressage direct et indirect. L adressage indirect est possible en utilisant les registres I, M, L des unités DAG1 et DAG2. 2.7.1.3 Adressage linéaire Le programmeur doit écrire par exemple L0=0 pour imposer un adressage linéaire au pointeur I0. 2.7.1.3.1 Adressage indirect simple, exemple I3 = 0x4700 ; {initialisation du pointeur I3} M2 = 0 ; { pas d incrémentation du pointeur } L3 = 0 ; {«0» buffer linéaire} AX0 = DM(I3,M2) ; {charge la donnée de DMD pointée par I3 dans AX0} L adressage est indirect puisque l on utilise I3. La valeur 0x4700 signifie que l écriture du programme est en hexadécimale. Il est linéaire puisque L3=0 et il n y a pas de postmodification de I3 puisque, après chargement dans le registre AX0 de l ALU de la donnée (pointée par I3 dans la mémoire de donnée à l adresse 0x4700) la modification est nulle ; M2=0. 2.7.1.3.2 Buffer avec adresse de base stockée dans DMD à l adresse adr_ptr Il est possible de déclarer une variable par exemple dans la mémoire de donnée pour changer l adresse qui sera ensuite dans un pointeur :.VAR/DM/RAM adr_ptr ; {adresse de la mémoire ou se trouve le pointeur} I3 = DM(adr_ptr) ; {initialisation du pointeur I3} M1 = 1 ; {incrémentation du pointeur} L3 = 0 ; {«0» buffer linéaire} AX0 = DM(I3,M1) ; {charge la donnée de DMD pointée par I3 dans AX0 et incrémentation de I3} La déclaration d une variable revient à fixer une adresse qui sera reprise par un pointeur ; celui-ci est indispensable ensuite pour charger la donnée ainsi adressée dans le registre AX0.
DESCRIPTION DU CŒUR DE L ADSP2171 Page 45 2.7.1.4 Adressage circulaire L intérêt de ce mode d adressage est qu il permet de revenir à l adresse de départ automatiquement lorsque toutes les lignes d adresses prévues sont utilisées. Le module logique des unités DAG fonctionne alors en «buffer circulaire» en utilisant les informations suivantes : la valeur courante de l adressage dans le pointeur I (valeur non signée) ; la valeur de modification dans le registre M (valeur signée) ; la longueur du buffer circulaire dans le registre L (valeur non signée) ; l adresse de base d un buffer circulaire, notée B est une puissance de 2. Si le programmeur en a décidé autrement, l éditeur de lien arrondit la longueur (L) déclarée à la puissance de 2 supérieure. Grâce à ces quatre informations, la prochaine adresse du pointeur I est donnée par la relation : avec Pr ochaine Adresse = ModuloL { I+ M B} + B 2.5 I M B L M+I : adresse courante : valeur de modification (signée) : adresse de base : longueur du buffer : adresse modifiée (adresse suivante) De plus, il faut respecter la condition M < L 2.6 Cette condition assure que la prochaine adresse sera comprise dans le cycle suivant du buffer circulaire. 2.7.1.5 Calcul de l adresse de base L adresse de base d un buffer circulaire de longueur L vaut 2 n ou un multiple de 2 n ou n satisfait la condition n 2 1 < L 2 n 2.7 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. 2.7.1.5.1 Adresse de base d un registre circulaire, exemple Supposons un buffer de longueur L=8, la valeur de n, selon la relation 2.7, est donc n=3 et par conséquent l adresse de base : B { 0x0008,0x010,0x018,...} 2.8
DESCRIPTION DU CŒUR DE L ADSP2171 Page 46 2.7.1.5.2 Opération à l aide d un buffer circulaire, exemple 1 Supposons que I0=5, M0=1, L0=3, et l adresse de base B=4, ( n= 2, B {0 x0004,0x0008,...}, la prochaine adresse prise par le pointeur vaut Modulo ( I 0 0+ M 0 B ) + B = 3(5+ 1 4) + 4= 6 1 Modulo L 44244 3 2 2.9 Les adresses successives du pointeur d adressage indirect produisent la séquence : 5, 6, 4, 5, 6, 4, 5, 6, 4,.. pour M0=-1 (0x3FFF), on aura la séquence 5, 4, 6, 5, 4, 6, 5, 4, 6,.. 2.7.1.5.3 Adressage avec inversion de bit, exemple La logique d inversion de bit (Bit reverse logic) est principalement destinée pour la programmation des algorithmes de FFT. Seul l unité DAG1 possède cette fonctionnalité. Le point de pivot de l inversion est au milieu des 14 bits d adresses, soit entre les bits 6 et 7. On obtient donc la caractéristique suivante : Ligne d adresse individuelle (ADn) : Ordre normal 00 01 02 03 04 05 06 07 08 09 10 11 12 13 Ordre inverse 13 12 11 10 09 08 07 06 05 04 03 02 01 00 Ce mode est activé par le bit MSTAT[1] ( 2.6.4.3) et concerne tous les pointeurs de l unité DAG1, soit I0 à I3. Il est possible de travailler en inversion de bit sur un nombre restreint de bits d adresses. Dans ce cas il faut définir la première adresse et initialisé M de manière à obtenir le nombre de bits désiré. La valeur de M est définie comme : M (14 N) = 2 2.10 Ou N correspond au nombre de bits sur lesquels se reporte l inversion. 2.7.2 Variables et matrices Les matrices ou tableaux sont déclarés par des directives assembleur et peuvent être référencés indirectement par un nom. Ils peuvent être initialisés par plusieurs méthodes : par des valeurs immédiates par l intermédiaire de directives assembleurs ; par des fichiers de données externes. Un tableau est défini par la directive assembleur suivante.var/dm coefficients[128] ; La variable coefficient est ainsi déclarée comme un tableau de 128 valeurs de situé dans la mémoire de donnée (DM). Chaque composante du tableau peut être adressée de la manière définie ci-dessous. I0=^coefficients ; {pointe l adresse de la première composante du tableau}
DESCRIPTION DU CŒUR DE L ADSP2171 Page 47 L0=0 ; {défini un buffer (tableau) linéaire} MX0=DM(I0,M0) ; {place le contenu de la composant du tableau pointée dans MX0} L opérateur ^ indique que coefficients est de type pointeur. Si l on veut par exemple charger dans MX0 que la première valeur du tableau, on peut utiliser le nom du tableau comme étiquette (label) : MX0=DM(coefficients) ; {place le contenu de la 1 ère composante du tableau coefficients dans MX0} L assembleur substitue l adresse réelle à l étiquette. Comme mentionné, il est également possible d initialiser un tableau complet à l aide d un fichier :.INIT coefficients <nom_du_fichier.dat> 2.7.3 Buffers circulaires Il est possible, à l aide d une directive assembleur, de déclarer un buffer circulaire.var/dm/circ coefficients[128] ; Cette commande permet à l éditeur de lien (Linker) de placer ce buffer dans une zone particulière. Il suffit alors de définir les registres I, M et L comme le montre l exemple suivant : L0=%coefficients ; {déclaration de la longueur du buffer} I0=^coefficients ; {I0 pointe la première composantes du buffer} M0=1 ; {Incrémentation de 1 du pointeur I0} L opérateur ^ indique que coefficients est de type pointeur. L opérateur % indique que L0 est chargé avec une valeur immédiate. 2.7.4 Transfert entre bus de données programme (PMD) et bus de données (DMD) L unité d échange entre les bus DMD et PMD permet le transfert de données entre ces derniers, ceci dans les deux directions. Le bus PDM étant sur 24 bits alors que le bus DMD est sur, seuls les de poids forts (MSB) du bus PMD sont transférés de manière directe. Un registre interne (PX) permet le transfert des 8 bits de poids faibles (LSB) de chaque bus. 8bits(LSB) 24 bits 8bits(LSB) (MSB) PMD BUS PX M U X R E G I S E R 8bits (MSB) 8bits(LSB) 8bits(LSB) DMD BUS Figure 2-25 : PDM DMD transfert
DESCRIPTION DU CŒUR DE L ADSP2171 Page 48 La Figure 2-25 illustre la structure de l unité d échange de données entre les bus DMD et PMD. Deux types de connexions sont possibles. Le premier type de connexion concerne l échange direct entre les bus et ceci dans les deux sens. Cette fonction est réalisée par des buffers tristates. L un de ces buffers est utilisé lors d une écriture dans un registre interne connecté au bus DMD uniquement (AX0,AX1, AR, MX0, MX1, MR, SB, SI, SE, SR) par l intermédiaire du bus PMD, l autre permet une écriture d un registre interne dans la mémoire programme. Le second type de connexion passe par le registre PX. Ce dernier à une largeur de 8 bits. Il peut être chargé ou lu par les 8 bits de poids faibles (LSB) de chaque bus de données (DMD et PMD). L accès au registre PX obéit aux principes suivants : Depuis le bus PMD, le registre PX est 1. chargé automatiquement lorsqu une donnée (pas une instruction) écrite de la mémoire programme dans n importe quel registre interne au DSP Par exemple : AX 0= PM( I4, M4) Dans cet exemple, les de poids forts du bus PMD (24 bits) sont chargés dans AX0 et les 8 bits de poids faibles dans le registre PX 2. Lu automatiquement lorsqu une donnée écrite de n importe quel registre interne au DSP dans la mémoire programme. Par exemple : PM ( I4, M4) = AX0 Dans cet exemple, les du registre interne AX0 sont stockés dans les 16 bits de poids fort de la mémoire programme, les 8 bits de PX sont automatiquement stockés dans les 8 bits de poids faibles de la mémoire programme. Depuis le bus DMD, le registre PX est : 1. chargé par une donnée par une instruction explicite. Les 8 bits de poids forts sont perdus. Par exemple : PX = AX0. 2. Lu afin que son contenu soit chargé dans un registre interne du DSP Par exemple : AX 0 = PX. Dans cet exemple, les 8 bits de poids forts du registre AX0 sont tous mis à «0». Lors d un chargement du contenu d un registre dans la mémoire programme, les de poids forts sont définis. Les 8 bits de poids faibles correspondent au contenu du registre PX. Si ces 8 bits de poids faibles sont importants, il faut commencer par charger le registre PX via le bus DMD avant d exécuter l opération d écriture dans la mémoire programme. 2.8 CONFIGURATION DE LA MÉMOIRE L ADMC401 utilise une architecture Harvard modifiée, dans laquelle les données peuvent être stockées aussi bien dans la mémoire de données que dans la mémoire de programme. Cependant cette dernière contient également les vecteurs d interruption et les instructions du programme. Il faut donc y répartir les adresses pour qu il n y ait pas superposition des données et des instructions. A ces deux types de mémoires, il faut ajouter une mémoire interne (ROM) contenant un moniteur capable d effectuer un certain nombre de tâches d amorçage (boot) de dépannage (debug).
EXTERNAL ADRESS BUS EXTERNAL DARA BUS DESCRIPTION DU CŒUR DE L ADSP2171 Page 49 Deux mémoires externes pouvant contenir une application résidente qui sera chargée à chaque mise sous tension : une mémoire sérielle externe (SROM) ; une mémoire externe (EEPROM). La configuration générale de plan mémoire et la manière de charger les programme d application peuvent être modifiés selon l état de deux signaux d entrée, soit : MMAP (Memory Map) et BMODE (Boot mode). 2.8.1 Configuration de la mémoire interne Les mémoires internes sont connectées aux différentes unités fonctionnelles par quatre bus distincts : bus de données de la mémoire de données (DMD : Data Memory Data) ; bus d adresses de la mémoire de données (DMA : Data Memory Address) ; bus de données de la mémoire de programme (PMD : Program Memory Data) ; bus d adresses de la mémoire de programme (PMA : Program Memory Address). PMA-BUS 14 bits ROM 2Kx24 (Monitor) RAM 2Kx24 (Program) PMD-BUS DMD-BUS 24 bits 14 bits 24 bits 24 bits M U X 24 bits RAM 1Kx16 DSP CORE / Reserved Register RAM 1Kx16 (Peripheral Registers) RAM 1Kx16 (User & Monitor) DMA-BUS 14 bits M U X Figure 2-26 : Architecture de la mémoire interne Lors de l utilisation de la mémoire interne, les signaux RD, WR, PMS et DMS ne sont pas activés, ils restent donc à «1». Les drivers des bus de données et d adresses sont maintenus en haute impédance (tristated). Pour intégré la mémoire ROM interne dans le plan mémoire, il faut activer («1») le bit de contrôle ROMENABLE (bits MEMWAIT[15]). Dans le cas contraire, la place mémoire est réservée pour de la mémoire externe. Le bit de contrôle ROMENABLE est mis à «0» après un reset, à moins que MMAP= «1» et BMODE= «1».
DATA-BUS PC SERIAL LINK RS232 (DEBUGGER) ADDRESS-BUS DESCRIPTION DU CŒUR DE L ADSP2171 Page 50 2.8.2 Configuration de la mémoire externe Les bus externes sont au nombre de deux, soit : un bus de données résultant du multiplexage des bus internes de DMD et PMD ; un bus d adresses résultant du multiplexage des bus internes de DMA et PMA. La largeur du bus d adresses est de 14 bits (A13 A0) alors que celle du bus de données est de 24 bits (D23 D0). Ce sont les 16 MSB du bus de données externes (D23 D8) qui sont reliés au bus de données interne DMD (D15 D0). L ADMC 401 peut adresser 14Kx24 bits de mémoire programme et jusqu à 13Kx16bits de mémoire de données. Pour les phases de chargement (lecture : WR ) d une instruction (fetch) dans les mémoires externes, la donnée de la mémoire de programme est lue en premier. La sélection physique de la mémoire (CS : Chip Select or CE : Chip Enable) se fait à l aide de PMS (Program Memory Select). Puis c est le tour de la donnée de la mémoire de données. 14 bits A 13-0 BOOT MEMORY 1/2 CLOCK or CRISTAL CLKIN XTAL ADDR 13-0 DATA 23-0 24 bits D 23-22 D 15-8 ADRR 15-0 DATA 7-0 SERIAL ROM or E 2 PROM BMS RD WR A 13-0 CS OE EEPROM 64Kx8Bits PROGRAM MEMORY CLK SCLK1 ADRR 13-0 RESET DATA RFS1/SPROM DR1A D 23-0 DATA 23-0 WE RS232 LINK PMS CS OE EEPROM 16Kx24Bits RX TX DR1B DT1 RESET A 13-0 D 23-8 ADRR 13-0 DATA MEMORY DATA 15-0 WE RESET DMS CS OE EEPROM 16Kx16Bits Figure 2-27 : Architecture de la mémoire externe La sélection se fait à l aide de DMS (Data Memory Select).
DESCRIPTION DU CŒUR DE L ADSP2171 Page 51 Figure 2-28 : Lecture de la mémoire externe Pour une phase d écriture, c est bien entendu le signal RD qui est activé. Figure 2-29 : Ecriture de la mémoire externe 2.8.3 Allocation des zones mémoires L allocation ou le plan des zones mémoires de programme est fonction de deux entrées externes MMAP (Memory MAP), BMODE (Boot MODE) et du bit de contrôle ROMENABLE. Les cas suivants peuvent se produire : MMAP=0, BMODE=0 : La taille de la mémoire de programme interne est fixée à 2Kx24bits avec son adresse de départ à 0x0000. Le reste de la mémoire de programme 12Kx24bits est externe avec son adresse de départ à 0x1000. La zone d adresses allant de 0x0800 à 0x0FFF dépend de la valeur du bit de contrôle ROMEBABLE. MMAP=0, BMODE=1 : Ce mode est, réservé à l ADSP2171 n est pas valide pour l ADMC401. MMAP=1, BMODE=0 : La zone de mémoire programme commence en 0x0000 par 12Kx24bits de mémoire
DESCRIPTION DU CŒUR DE L ADSP2171 Page 52 externe. Suivie par de la mémoire RAM de programme interne, soit 2Kx24bits avec son adresse de départ à 0x3800, soit dans la partie supérieure du plan mémoire. La zone d adresses allant de 0x0800 à 0x0FFF dépend de la valeur du bit de contrôle ROMEBABLE. MMAP=1, BMODE=1 : La taille de la mémoire RAM de programme interne est fixée à 2Kx24bits avec son adresse de départ à 0x0000. Le bit ROMENABLE est fixé à «1» par défaut, on a donc la mémoire de programme ROM interne qui occupe l espace allant de 0x0800 à 0x0FFF. Le reste de la mémoire de programme 12Kx24bits est externe avec son adresse de départ à 0x1000. 0x0000 EXTERNAL MEMORY 8Kx16 0x1FFF 0x2000 0x23FF 0x2400 0x37FF 0x3800 0x3B5F 0x3B60 0x3BFF 0x3C00 0x3FEE 0x3FEF 0x3FFF PERIPHERAL REGISTERS EXTERNAL MEMORY INTERNAL USER RAM RESERVED BY MONITOR RESERVED BY DSP CORE DSP CORE REGISTERS 1Kx16 5Kx16 1Kx16 1Kx16 16 Bits wide Figure 2-30 : Plan de la mémoire de données 0x0000 0x07FF 0x0800 0x0FFF 0x1000 INTERNAL RAM (Booted from byte-wide EPROM) INTERNAL ROM (ROMEENABLE=1 ) OR EXTERNAL RAM (ROMEENABLE=0) 2Kx24 2Kx24 0x0000 0x07FF 0x0800 0x0FFF 0x1000 EXTERNAL RAM INTERNAL ROM (ROMEENABLE=1 ) OR EXTERNAL RAM (ROMEENABLE=0) 2Kx24 2Kx24 0x0000 0x005F 0x0060 0x07FF 0x0800 0x0FEF 0x0FF0 0x0FFF 0x1000 VECTOR TABLE INTERNAL RAM (Booted from SPORT1) INTERNAL ROM (ROMEENABLE defaults to 1 during RESET) RESERVED 2Kx24 2Kx24 EXTERNAL RAM 12Kx24 EXTERNAL RAM 10Kx24 EXTERNAL RAM 12Kx24 0x3FFF 24 Bits wide 0x37FF 0x3800 0x3FFF EXTERNAL RAM 24 Bits wide 2Kx24 0x3FFF 24 Bits wide MMAP=0, BMODE=0 MMAP=1, BMODE=0 MMAP=1, BMODE=1 Figure 2-31 : Plans de la mémoire de programme
DESCRIPTION DU CŒUR DE L ADSP2171 Page 53 2.8.4 Adaptation des temps d accès mémoire Le temps d accès des mémoires externes varie beaucoup en fonction de la technologie. De plus, la mémoire de données peut être remplacée par des périphériques quelconques présentant des temps d accès incompatibles avec les signaux de contrôle du DSP. Grâce à plusieurs registres de contrôle, il est possible d augmenter les temps d accès standard du DSP. Pour la mémoire de données Label Registre en écriture seule Allocation 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MEMWAIT : 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 DM(0x3FFE) DWAIT4 DWAIT3 DWAIT2 DWAIT1 DWAIT0 ROM ENABLR 1 = ENABLE 0 = DISABLE Pour MMP=1 et BMODE=1, on a par défaut MEMWAIT = 0x8000 Figure 2-32 : Registre de contrôle MEMWAIT 0x0000 0x03FF 0x0400 0x07FF 0x0800 DWAIT0 DWAIT1 1Kx16 1Kx16 DWAIT2 8Kx16 0x2FFF 0x3000 0x33FF 0x3400 0x34FF 0x3800 DWAIT3 DWAIT4 NO WAIT STATE 1Kx16 1Kx16 2Kx16 0x3FEF 16 Bits wide Figure 2-33 : Attribution des temps d accès mémoire de données Pour la mémoire de programme et la mémoire de chargement (EEPROM) Label Registre en écriture seule Allocation 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SYSCNTL : 0 0 0 1 0 0 0 1 1 1 1 1 1 DM(0x3FFF) BWAIT Mémoire de Boot PWAIT Mémoire de programme Figure 2-34 : Registre de contrôle SYSCNTL
DESCRIPTION DU CŒUR DE L ADSP2171 Page 54 Les temps ajoutés aux signaux présentant les contraintes les plus sévères sont définis par la relation suivante : w= wait_ states t CLKOUT avec 0 wait _ states 7 2.11 2.9 CHARGEMENT ET DÉMARRAGE D UNE APPLICATION (BOOT LOADING) 2.9.1 Chargement de l application Le chargement d une application et le démarrage de son exécution varie en fonction des entrées MMAP et BMODE. MMAP=0, BMODE=0 : Mode de chargement par EPROM 8bits (Byte-Wide EEPROM Boot Mode) La phase d amorçage (boot loading) provoque le chargement d une partie ou de la totalité de la mémoire programme interne par une mémoire externe de type EEPROM ayant une largeur des données sur 8 bits. Le chargement se fait byte par byte. La mémoire EEPROM est organisée en 8 pages de 8Kx8bits chacune. Chaque page contient des instructions permettant le chargement de cette dernière. Le chargement de la page 0 est déclenché par les états de MMAP = «0» et BMODE = «0» et le contenu du registre de contrôle SYSCNTL Label Registre en écriture seule Allocation 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SYSCNTL : 0 0 0 1 0 0 0 1 1 1 DM(0x3FFF) BFORCE (Boot Force Bit) BPAGE Boot Page Select BWAIT (Boot Wait States) Figure 2-35 : Registre de contrôle SYSCNTL Chaque page contient des instructions pour le générateur d adresses de chargement (Boot Generator Address), notamment la commande de chargement de la page suivante en forçant le bit de contrôle BFORCE à «1» et le numéro de la page suivante en mettant à jour les 3 bits de BPAGE. La dernière page chargée ne contient pas d instruction de chargement. Cette dernière page correspond à la première page de 2Kx24 bits contenant le programme d application dont la première instruction est placée à l adresse 0x0000 de la mémoire de programme. La zone d adresses allant de 0x0800 à 0x0FFF dépend de la valeur du bit de contrôle ROMEBABLE. Le programme d application démarre à partir de l adresse 0x0000. Pour plus d information, voir ADSP2100 Family, Assembler Tools & Simulation Manual, Chap. 5 et ADSP2100 Family, User s Manual, Chap. 10, 10.4. MMAP=0, BMODE=1 : Ce mode est, réservé à l ADSP2171 n est pas valide pour l ADMC401 MMAP=1, BMODE=0 : La zone de mémoire programme commence en 0x0000 par 12Kx24bits de mémoire externe. Suivie par de la mémoire RAM de programme interne, soit 2Kx24bits avec son adresse de départ à 0x3800, soit dans la partie supérieure du plan mémoire. Il n y
DESCRIPTION DU CŒUR DE L ADSP2171 Page 55 a pas de phase d amorçage. La zone d adresses allant de 0x0800 à 0x0FFF dépend de la valeur du bit de contrôle ROMEBABLE. MMAP=1, BMODE=1 : Mode autonome (Standalone mode) Le programme d application démarre à partir de l adresse 0x0800. Comme dans ce mode ROMENABLE = «1» par défaut, on se trouve dans la ROM interne (moniteur). Le moniteur commence par quelques initialisations dont notamment la mise à «0» des bits MEMWAIT[14 0] (suppression des délais d attente lors de l accès aux mémoires de données. Puis il copie une table de vecteurs d interruption aux adresses 0x0000 à 0x005F de la mémoire de donnée. Le moniteur configure ensuite le port série SPORT1 en forçant le bit MODECRTL[4] à «0» et le bit MODECRTL[5] à «1» du registre de contrôle MODECRTL. Ainsi l entrée DR1A est connectée à DR1 et la sortie RFS 1 / SROM à FL1. Label Registres en lecture et écriture Allocation 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 MODECTRL : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DM(0x2015) 1 = DR1B 0=DR1A 1=UART MODE 0 = SPORT MODE DATA RECEIVE SELECT SPORT1 MODE Figure 2-36 : Registre de contrôle de mode DSP CORE DT1 DR1 TFS1 DT1 DR1A DR1B TFS1 RFS1 SCLK1 FL1 RFS1/SROM SCLK1 [4] [5] MODECTRL[5,4] ADMC401 Figure 2-37 : Configuration du port sériel SPORT1
DESCRIPTION DU CŒUR DE L ADSP2171 Page 56 Une fois ces initialisations effectuées, le moniteur provoque le chargement d une application via une SROM, SPROM ou EEPROM série en effectuant un reset de cette dernière : SROMRESET : SET FL1 ; {mise a «1» du Flag 1} TOGGLE FL1 ; {transition d état du Flag 1} TOGGLE FL1 ; {transition d état du Flag 1} RTS ; {sortie de la routine} Si la mémoire sérielle est présente et correctement programmée, les données sont transmises de manière synchrone avec une horloge (CLK) de 1MHz. Ainsi les mémoires internes et externes aux DSP peuvent être chargées. A la fin du chargement, la première instruction exécutée se trouve à l adresse 0x0060, soit juste après la table des vecteurs d interruption. Si la mémoire sérielle n est pas présente ou pas correctement programmée, le moniteur configure le port sériel SPORT1 en UART en forçant les bits MODECRTL[4] et MODECRTL[5] à «1» du registre de contrôle MODECRTL. Le moniteur attend de recevoir deux bytes au travers du port série. Ces bytes sont reçus de manière asynchrone ainsi aucun signal d horloge n est nécessaire. Le premier byte, dont la valeur doit impérativement être 0x70, permet la détection automatique de la vitesse de transmission (autobaud rate detection). Le second byte permet d identifier le type d interface qui est connecté au port sériel. Six interfaces sont supportés par le moniteur, on donnera ici le seul utilisé au laboratoire, soit l «UART debugger interface» pour le software de développement «Motion Control Debugger» d Analog Devices. Pour plus d information, voir ADMC401 DSP Motor Controller, Developer s Reference Manual 6.1 et 9.3. 2.9.2 Définition de la table des vecteurs d interruption Lorsqu une interruption est activée, le contrôleur d interruption (Interrupt Controller) charge le pointeur de programme avec une adresse correspondant à la source de l interruption. Les interruptions générées par le cœur du DSP se trouvent dans la mémoire de programme PM, aux adresses comprise entre PM0x0000 et PM0x002C. La place mémoire prévue pour ces interruptions est limitée à 4 positions. Il est donc possible d y insérer trois lignes de code et une instruction de retour d interruption : RTI. Pour des routines d interruptions plus longues, il faut utiliser une instruction de saut à une position mémoire correspondant au début de la routine d interruption. La première position mémoire de la table d interruption doit être un saut au début du programme. Cette instruction est exécutée juste après un RESET ou pour sortir d une commande IDLE si le bit PCUR (SPORT1_AUTOBUF_CRTL[12]) est à «1». Dans l exemple qui suit, on a admis que le programme principal démarre à l adresse «Startup» et que deux routines d interruptions sont déclarées. Ces routines d interruptions concernent un périphérique, soit le modulateur PWM. Les adresses de début de ces routines sont données par les étiquettes «PWMSYNC_ISR» et «PWMTRIP_ISR». Par habitude on ajoute au nom le terme ISR qui signifie Interrupt Service Routine.
DESCRIPTION DU CŒUR DE L ADSP2171 Page 57.MODULE/RAM/ABS=0 Table_des_vecteurs_interruptions ;.EXTERNAL Startup, pwmsync_isr, pwmtrip_isr ; {liste des adresses de début des routines d interruptions}.var/dm/ram/seg=user_dm3 TEMP_I4_SAVE ; {position de la mémoire DM pour le stockage temporaire du pointeur contenu dans I4} # include <admc401.h> {Table des vecteurs d interruption propre cœur du DSP} RESET 0x0000: ivt : JUMP Startup ; NOP ; NOP ; NOP ; IRQ2 0x0004 : DM(TEMP_I4_SAVE)=I4 ; I4=DM(PICVECTOR) ; JUMP (I4) ; NOP ; Reservé 0x0008 : RTI ; NOP ; NOP ; NOP ; Reservé 0x000C : RTI ; NOP ; NOP ; NOP ; SPORT0 Transmission 0x0010 : RTI ; NOP ; NOP ; NOP ; SPORT0 Réception 0x0014 : RTI ; NOP ; NOP ; NOP ; Software 0 0x0018 : RTI ; NOP ; NOP ; NOP ; Software 1 0x001C : RTI ; NOP ; NOP ; NOP ; SPORT1 Transmission ou 0x0020: RTI ; IRQ1 NOP ; NOP ; NOP ; SPORT1 Réception 0x0024 : RTI ; ou IRQ0 NOP ; NOP ; NOP ; Timer 0x0028 : RTI ; NOP ; NOP ; NOP ; PWD (non masquable) 0x002C : RTI ; NOP ; NOP ; NOP ; {Table des vecteurs d interruption propre aux périphériques} Fin de conversion AD 0x0030 : I4=DM(TEMP_I4_SAVE) ; RTI ; NOP ; NOP ; PWMSYNC 0x0034 : I4=DM(TEMP_I4_SAVE) ; JUMP pwmsync_isr ; NOP ; NOP ; EIU (timeout) 0x0038 : I4=DM(TEMP_I4_SAVE) ; RTI ; NOP ; NOP ; PIO4 à PIO11 0x003C : I4=DM(TEMP_I4_SAVE) ; RTI ; NOP ; NOP ; EIU 0x0040 : I4=DM(TEMP_I4_SAVE) ; (erreur de comptage) RTI ; NOP ; NOP ; ETU 0x0044 : I4=DM(TEMP_I4_SAVE) ; RTI ; NOP ; NOP ; PIO0 0x0048 : I4=DM(TEMP_I4_SAVE) ; RTI ; NOP ; NOP ; PIO1 0x004C : I4=DM(TEMP_I4_SAVE) ; RTI ; NOP ; NOP ; PIO2 0x0050 : I4=DM(TEMP_I4_SAVE) ; RTI ; NOP ; NOP ; PIO3 0x0054 : I4=DM(TEMP_I4_SAVE) ; RTI ; NOP ; NOP ; PWMTRIP 0x0058 : I4=DM(TEMP_I4_SAVE) ; JUMP pwmtrip_isr ; NOP ; NOP ;.ENDMOD ; {Saut au début de programme} {stockage temporaire de I4} {adresse de la routine d interruption} {du périphérique source de l interruption} {saut a l adresse pointée par I4} {retour sans opérations} {retour sans opérations} {retour sans opérations} {retour sans opérations} {retour sans opérations} {retour sans opérations} {retour sans opérations} {retour sans opérations} {restitution de I4 et retour sans opération} {restitution de I4 et saut dans la routine} {d interruption dont l adresse de début est} {pwmsync_isr} {restitution de I4 et retour sans opération} {restitution de I4 et retour sans opération} {restitution de I4 et retour sans opération} {restitution de I4 et retour sans opération} {restitution de I4 et retour sans opération} {restitution de I4 et retour sans opération} {restitution de I4 et retour sans opération} {restitution de I4 et retour sans opération} {restitution de I4 et saut dans la routine} {d interruption dont l adresse de début est} {pwmtrip_isr}
DESCRIPTION DU CŒUR DE L ADSP2171 Page 58 2.9.3 Ecriture dans la table d interruption Lorsque le debugger est utilisé, le moniteur interne initialise la table d interruption aux adresses 0x0020 (SPORT1 Transmission) et 0x0024 (SPORT1 Reception). Les autres routines d interruptions doivent être déclarées par l utilisateur. Une routine du moniteur, dont l adresse est déclarée dans le fichier d entête ADMC401.h permet de remplacer l instruction RTI de la table d interruption par un saut à l adresse d interruption fixée par l utilisateur. Pour ce faire, on doit écrire le code suivant : I4=xxx_INT_ADDR; MR0=^xxx_ISR; CALL PUT_VECTOR; {I4 contient l'adresse de la table d'interruption pour xxx} {MR0 contient l'adresse de la routine d'interruption xxx} {Routine placée dans le moniteur en ROM} Où xxx vaut, est déduit des constants définie dans le fichier ADMC401.h.CONST ADC_INT_ADDR = 0x30+1; {ADC INTERRUPT }.CONST PWMSYNC_INT_ADDR = 0x34+1; {PWMSYNC interrupt }.CONST EIUTIMER_INT_ADDR = 0x38+1; {EIU timer interrupt }.CONST PIO_INT_ADDR = 0x3C+1; {PIO4 - PIO11 interrupt }.CONST EIUERROR_INT_ADDR = 0x40+1; {EIU error interrupt }.CONST ETU_INT_ADDR = 0x44+1; {ETU interrupt }.CONST PIO0_INT_ADDR = 0x48+1; {PIO0 interrupt }.CONST PIO1_INT_ADDR = 0x4C+1; {PIO1 interrupt }.CONST PIO2_INT_ADDR = 0x50+1; {PIO2 interrupt }.CONST PIO3_INT_ADDR = 0x54+1; {PIO3 interrupt }.CONST PWMTRIP_INT_ADDR = 0x58+1; {PWMTRIP interrupt}.consttx0_int_addr = 0x10; {SPORT0 transmit interrupt}.const RX0_INT_ADDR = 0x14; {SPORT0 receive interrupt}.const SW1_INT_ADDR = 0x18; {software interrupt 1}.CONST SW0_INT_ADDR = 0x1C; {software interrupt 0}.CONST TX1_INT_ADDR = 0x20; {SPORT1 transmit interrupt}.const RX1_INT_ADDR = 0x24; {SPORT1 receive interrupt}.const TIMER_INT_ADDR = 0x28; {Timer interrupt} 2.10 TIMER Le Timer est un périphérique car il n est pas indispensable au fonctionnement du DSP. Son rôle est de provoqué des interruptions selon une période T int qui est toujours un multiple de la période d horloge interne du DSP. Ce facteur de multiplication dépend des registres de contrôle du Timer. L interruption provoquée par le Timer peut être masquée par le bit IMASK[0], forcée par le bit IFC[8] ou annulée par le bit IFC[0]. L activation du timer est obtenue en forçant à 1 le bit MSTAT[5]. 2.10.1.1 Architecture du Timer La Figure 2-38 illustre l architecture du Timer.
DESCRIPTION DU CŒUR DE L ADSP2171 Page 59 DMD BUS 8bits TSCALE TPERIOD Count Register Load Logic CLKOUT Timer Enable &PrescaleLogic CLK TCOUNT Zero Timer Interrupt Timer Enable Figure 2-38 : Architecture du Timer 2.10.1.2 Registres de contrôle pour les timers Le Timer comprend deux registres de TCOUNT et TPERIOD et un registre de 8 bits TSCALE. Label Registres en lecture et écriture Allocation 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 TPERIOD : DM(0x3FFD) TCOUNT : Figure 2-39 : Registres des valeurs converties DM(0x3FFC) TSCALE : 0 0 0 0 0 0 0 0 DM(0x3FFB) 2.10.1.3 Opérations du Timer Le registre TCOUNT est un compteur. Quand le Timer est en service, ce compteur est décrémenté à chaque cycle de fonctionnement. Lorsque le compteur atteint 0, une interruption est provoquée, tandis que TCOUNT est rechargé à la valeur inscrite dans le registre TPERIOD. Le registre TSCALE indique le facteur d échelle temporel vis à vis de l horloge interne du DSP (CLKOUT). Comme ce registre est de 8 bits, le facteur d échelle T s (ou «saut de temps» entre deux décrémentations de TCOUNT) peut varier entre 1 T CLK (pour TSCALE=0) et 256 T CLK (pour TSCALE=255). On a donc la relation suivante pour le temps entre deux interruptions T = ( TPEDIOD+ 1)( TSCALE 1) int + Il est possible de changer les valeurs de TSCALE et TCOUNT en cours de fonctionnement, ce qui prend effet immédiatement. Par contre la modification du contenu de TPERIOD n est prise en compte qu à la suite du chargement de TCOUNT. T CLK
DESCRIPTION DU CŒUR DE L ADSP2171 Page 60 2.11 SYNTHÈSE DES REGISTRES D ÉTAT, DE CONTRÔLE ET DE DONNÉES DU CŒUR DU DSP La Figure 2-40 illustre l ensemble des registres de données d état et de contrôle dédicacé au coeur de l ADMC401. Les registres de données font partie du cœur du DSP, ils n ont donc pas d adresses spécifiques et ne font pas partie de la mémoire RAM interne Les registres d état font partie du cœur du DSP, ils n ont donc pas d adresses spécifiques et ne font pas partie de la mémoire RAM interne Les registres de contrôle sont en réalités situés dans une zone mémoire réservée de la mémoire de donnée (DM) interne. Cette zone mémoire est comprise entre 0x3C00 et 0x3FFF. DSP CORE DATA MEMORY DATA ADDRESS GENERATORS DAG1 I0[14...0] I1[14...0] I2[14...0] I3[14...0] L0[14...0] L1[14...0] L2[14...0] L3[14...0] M0[14...0] M1[14...0] M2[14...0] M3[14...0] ARITHMETIC / LOGIC UNIT (ALU) DAG2 I4[14...0] I5[14...0] I6[14...0] I7[14...0] L4[14...0] M4[14...0] L5[14...0] M5[14...0] L6[14...0] M6[14...0] L7[14...0] M7[14...0] SPORT 0 MEMORY INTERFACE DM_0X3FFF SYSCNTL[15...0] DM_ 0X3FFE MEMWAIT[15...0] TIMER DM_ 0X3FFD TPERIOD[15...0] DM_ 0X3FFC TCOUNT[15...0] DM_ 0X3FFB TSCALE[15...0] AX0[15..0] AX1[15..0] AR[15..0] AY0[15..0] AF[15..0] AY1[15..0] RX0 TX0 DATA BUFFER DM_ 0X3FFA RX_WORDS1[31...16] DM_ 0X3FF9 RX_WORDS0[15...0] MULTIPLIER / ACCUMULATOR (MAC) MX0[15..0] MX1[15..0] MY0[15..0] MY1[15..0] DM_ 0X3FF8 TX_WORDS1[31...16] DM_ 0X3FF7 TX_WORDS0[31...16] CONTROL REGISTERS MR2[15..0] MR1[15..0] MR0[15..0] BAREL SHIFTER SI[15..0] SE[7..0] SB[4..0] MF[15..0] SPORT 1 DM_ 0X3FF6 DM_ 0X3FF5 DM_ 0X3FF4 DM_ 0X3FF3 CTRL_REG[15...0] SCLKDIV[15...0] RFSDIV[15...0] AUTOBUF_CTRL[15...0] SR1[15..0] PROGRAM SEQUENCER LOOP STACK 4x[17...0] SR0[15..0] ICNTL[4...0] IFC[15...0] PC STACK 16x[13...0] RX1 TX1 CONTROL REGISTERS DM_ 0X3FF2 CTRL_REG[15...0] DM_ 0X3FF1 SCLKDIV[15...0] DM_ 0X3FF0 RFSDIV[15...0] DM_ 0X3FEF AUTOBUF_CTRL[15...0] SSTAT[7...0] OWRCNTR[13...0] CNTR[13...0] IMASK[15...0] MSTAT[6...0] ASTAT[7...0] COUNT STACK 4x[13...0] STATUS STACK Figure 2-40 : Registres de données d état et de contrôle
DESCRIPTION CŒUR DE L ADMC401 Page 61 Adresses Nom Type Bits Fonction 0x3FFF SYSCNTL R/W [15 0] Registre de contrôle système 0x3FFE MEMWAIT R/W [15 0] Contrôle des temps d accès de la mémoire 0x3FFD TPERIOD R/W [15 0] Période du timer 0x3FFC TCOUNT R/W [15 0] Registre de comptage du timer 0x3FFB TSCALE R/W [7 0] Facteur d échelle pour la base de temps du timer 0x3FFA SPORT0_RX_WORDS1 R/W [15 0] Registre pour la réception de données sérielles multicanaux 0x3FF9 SPORT0_RX_WORDS0 R/W [15 0] Registre pour la réception de données sérielles multicanaux 0x3FF8 SPORT0_TX_WORDS1 R/W [15 0] Registre pour la transmission de données sérielles multicanaux 0x3FF7 SPORT0_TX_WORDS0 R/W [15 0] Registre pour la transmission de données sérielles multicanaux 0x3FF6 SPORT0_CTRL_REG R/W [15 0] Registre de contrôle 0x3FF5 SPORT0_SCLKDIV R/W [15 0] Registre de division pour l horloge de synchronisation de la transmission sérielle 0x3FF4 SPORT0_RFSDIV R/W [15 0] Registre de trame de synchronisation 0x3FF3 SPORT0_AUTOBUF_CTRL R/W [15 0] Registre de contrôle de mémorisation automatique 0x3FF2 SPORT1_CTRL_REG R/W [15 0] Registre de contrôle 0x3FF1 SPORT1_SCLKDIV R/W [15 0] Registre de division pour l horloge de synchronisation de la transmission sérielle 0x3FF0 SPORT1_RFSDIV R/W [15 0] Registre de trame de synchronisation 0x3FEF SPORT1_AUTOBUF_CTRL R/W [15 0] Registre de contrôle de mémorisation automatique Tableau 2-6 : Plan d adressage des registres du cœur de l ADMC401
DESCRIPTION CŒUR DE L ADMC401 Page 62 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)