• Aucun résultat trouvé

5.4 Jeu d’instructions et spécifications

5.4.2 Spécifications

5.4.2.1 Gestions des interruptions

Le WUC contient un contrôleur d’interruptions dont le but est d’indiquer au proces- seur le numéro de l’interruption la plus prioritaire qui s’est levée. Les interruptions ne peuvent pas se préempter pour des raisons de simplifications du matériel et parce que la préemption ne se prête pas bien à ce genre d’applications. La préemption serait utile pour des applications temps réel s’utilisant avec un RTOS10 (FreeRTOS, ARM RTX...),

or ici ce n’est pas le cas pour le WUC. Les interruptions sont triées par numéro d’inter- ruption et n’ont pas de registre de configuration pour fixer leur priorité. Plus le numéro d’interruption est petit, plus elle est prioritaire. Il existe des registres de configuration pour permettre les interruptions et pour déclencher les interruptions de manière logicielle. Une routine d’interruption s’exécutera jusqu’à complétion. Le vecteur d’interruption qui sauve les adresses des routines d’interruptions est stocké dans le haut de la mémoire avec

6. Program Counter 7. Link Register 8. Stack Pointer 9. Program Counter

l’adresse de la routine IT0 stockée à l’adresse 0xFFFE par défaut, puis l’adresse de la routine IT1 à l’adresse 0xFFFC et ainsi de suite. Si, pour des besoins applicatifs, plusieurs routines d’interruptions sont associées à une même interruption alors il existe un registre de configuration de l’offset du vecteur d’interruption pour que le processeur saute à un autre endroit dans la mémoire pour exécuter la routine.

5.4.2.2 Types de données gérées

Étant donné que ce processeur doit s’interfacer avec n’importe quel type de capteurs ou radio qui peuvent générer des données de tailles très différentes, alors il a été choisi de mettre un chemin de données sur 32 bits. Ainsi le WUC est capable de gérer des données sur 8, 16 et 32 bits en signé et non signé. Les opérations logiques et arithmétiques s’effectue sur 32 bits et ce sont ensuite les load/store qui vont permettre de charger ou sauver des données sur 8,16 ou 32 bit en signé ou non signé.

5.4.2.3 Modes de consommation

Le WUC est implémenté en logique asynchrone ce qui engendre un clock-gating naturel dès qu’il n’y a plus de données à traiter. le processeur est ainsi automatiquement en mode de veille dès qu’il a fini d’exécuter ses tâches. Deux modes de consommation existent donc pour le WUC, le mode actif dont la vitesse d’exécution des instructions dépendront de la tension d’alimentation du cœur et le mode veille dont la tension d’alimentation détermine la consommation statique du processeur.

5.4.2.4 Reset et boot du système

Le signal de reset est actif bas et permet d’initialiser les protocoles de communication. La logique asynchrone QDI11(section 6.1) utilise une porte spéciale appelé porte de Muller

présenté section 6.1.2.1, qui est une porte séquentielle et qui nécessite d’être correctement initialisée pour que tout le système soit au repos après le reset. Dans le cadre de la logique WCHB12 utilisée dans ce circuit, chaque porte de Muller implémentant un rendez-vous

entre un signal de donnée et un signal d’acquittement devra être initialisé à 0 pour un signal de donnée et 1 pour le signal d’acquittement. Lorsque le signal de reset est relâché, le processeur ne va pas exécuter tout de suite le code de boot. Il faut déjà venir écrire dans la mémoire tout le programme, et c’est ensuite que le code de boot peut être exécuté en déclenchant de façon logicielle l’interruption 0. Ce code de boot a été mis sur l’IT0, l’interruption la plus prioritaire, et est en permanence permis.

5.4.2.5 Périphériques de la plateforme de réveil

L’implémentation des périphériques étant hors du travail de cette thèse, un module de déclenchement d’interruptions a été mis en place pour pouvoir déclencher les interruptions de manière logicielle. Elles sont connectées directement sur les lignes d’interruption et sont déclenchées en écrivant dans les registres d’interface pour simuler le déclenchement des interruptions par des périphériques. La plateforme de réveil a pour but d’accueillir tous les périphériques basses consommation nécessaires pour communiquer avec n’importe quel capteurs ou radios pour les tâches courantes d’un nœud de capteurs.

11. Quasi Delay Insensitive 12. Weak Condition Half Buffer

Jeu d’instructions et spécifications 73 5.4.2.6 Débogage sur puce

Le débogage sur puce d’un processeur est aujourd’hui indispensable. Comme expliqué section 3.1, deux modes de debug existent, le mode intrusif appelé Foreground Debug

Mode (FGDM) et le mode arrière plan appelé Background Debug Mode (BGDM). Le WUC

intègre une solution de débogage intrusif pour stopper l’exécution du cœur à tout moment, poser des points d’arrêt (Breakpoint) et pour lire et écrire dans tout l’espace d’adressage du WUC et de ses registres internes. L’architecture et le principe de fonctionnement de la partie debug du WUC est présenté section 5.5.5.

5.4.2.7 Système d’alimentation

Les simulations de la consommation du microcontrôleur ont montré qu’il était intéres- sant de mettre en place une multitude de domaine d’alimentation pour agir à grain très fin sur la consommation. Ainsi il a été choisi dans le circuit de séparer les domaines d’alimen- tation de la mémoire (Vdd_mem) et la partie asynchrone (Vdd_wuc) pour pouvoir faire varier indépendamment leur tension et évaluer leur impact sur la consommation moyenne et les performances du circuit. La partie asynchrone possède aussi des tensions d’alimenta- tion Vdds et Gnds pour la polarisation arrière du caisson (FBB car la technologie utilisée ici est du FDSOI en LVT). Des cellules de conversion de niveau de tension sont présentes entre chaque domaine d’alimentation. La tension du cœur pourra être plus basse que celle de la mémoire qui est caractérisée pour 0,6V.

L’objectif est de pouvoir faire fonctionner le processeur sur une très large gamme de tension de 0,3V à 1,2V et avoir une caractérisation du circuit en terme de consommation/- performance/réveil pour un grand nombre de points de fonctionnement.