Table of Contents
Présentation
Les puces modernes, des microprocesseurs à haute performance aux processeurs de signaux numériques spécialisés (PDD) et aux systèmes sur puces (SoCs), contiennent des centaines, voire des milliers de registres organisés selon une hiérarchie soigneusement conçue. Ces registres ne sont pas simplement dispersés dans le silicium; ils forment des banques de registres structurées qui permettent un mouvement, un contrôle et une configuration efficaces des données.
Au niveau supérieur, les registres globaux coordonnent les principales fonctions du système; au niveau intermédiaire, les registres sous-systèmes gèrent des modules dédiés; au niveau le plus bas, les registres locaux offrent un accès rapide aux différentes unités fonctionnelles. Cet article explore chaque niveau en profondeur, explique pourquoi la hiérarchie est nécessaire, examine les compromis de conception et fournit des exemples pratiques d'architectures de puces du monde réel.
Qu'est-ce que les banques de registres?
Les banques de registres sont des collections d'éléments de stockage (registres) dans une puce qui détiennent temporairement des données, des adresses, des bits de contrôle ou des informations sur l'état. Contrairement à la mémoire principale (crampes DRAM ou SRAM), les registres sont physiquement situés près de la logique de traitement, ce qui entraîne une latence d'accès très faible – généralement un ou deux cycles d'horloge.
Les registres se divisent généralement en deux grandes catégories :
- Registres architecturaux définis par l'architecture de l'ensemble d'instructions (ISA) et visibles sur les logiciels (p. ex. registres à usage général, drapeaux d'état).
- Les registres spécifiques à la mise en œuvre utilisés en interne pour le contrôle de pipeline, la gestion de mémoire, la configuration des E/S et le débogage.
Les puces modernes combinent les deux types de banques hiérarchiques de registres. L'organisation affecte directement les performances, la puissance, la zone (les trois piliers de la conception des puces), et la facilité de vérification.
La nécessité d'une hiérarchie dans l'organisation du registre
Dans un fichier de registre plat à un seul niveau, tous les registres partageraient un bus commun et un mécanisme d'intervention.
- Temps d'accès plus longs en raison de retards de fil accrus et de multiplexeurs plus grands.
- Les frais généraux de la conduite de longues connexions globales chaque fois qu'un registre est lu ou écrit.
- Adresser les conflits spatiaux[ lorsque différents sous-systèmes exigent des noms ou des numéros de registre qui se chevauchent.
- Complicité de conception[ des signaux de contrôle de routage vers chaque registre à partir d'un point de décodage central.
Pour surmonter ces problèmes, les architectes de puces distribuent des registres sur plusieurs banques disposées dans une hiérarchie. Cela localise le trafic, réduit la longueur des fils et permet une horlogerie indépendante et une gestion de l'énergie par banque.
Niveaux de hiérarchie dans les puces modernes
La hiérarchie typique se compose de trois niveaux primaires, bien que certains copeaux ajoutent des couches intermédiaires pour une granularité encore plus fine.
Banques de registres mondiaux
Les banques de registres mondiales sont accessibles à partir de tout module ou sous-système de la puce. Elles stockent des données qui doivent être partagées dans l'ensemble du système, comme:
- Registres de configuration globale (p. ex. ID de puce, paramètres du mode d'alimentation, diviseurs d'horloges).
- Registres de contrôleurs interrompus (masques prioritaires, état en attente).
- Les chronomètres centraux et les compteurs de chien de garde.
- Le contrôleur DMA enregistre les transferts mémoire-périphérique.
Comme ces registres sont accessibles depuis de nombreux points, ils sont généralement placés près du bus système ou du tissu d'interconnexion. Le décodage des adresses est centralisé et les autorisations d'accès (lecture/écriture, accès privilégié) sont appliquées dans le monde entier. Le nombre de registres mondiaux est maintenu relativement petit pour éviter de devenir un goulot d'étranglement de routage.
Banques de registres de sous-systèmes
Les banques de sous-systèmes servent des blocs fonctionnels spécifiques tels que les contrôleurs de mémoire, les contrôleurs USB, les cœurs graphiques ou les moteurs de chiffrement. Ces registres sont visibles uniquement dans leur propre sous-système et partagent souvent un bus local ou un pont vers le tissu mondial.
Les registres sous-systèmes sont, par exemple, les suivants:
- Registres de contrôleur mémoire DDR (paramètres de timing, contrôle de rafraîchissement, modes de réduction de puissance).
- Registres MAC Ethernet (contrôle de flux, compteurs statistiques, configuration PHY).
- Registres de file d'attente de commandes GPU.
Les banques de sous-systèmes permettent de concevoir et de vérifier chaque bloc IP de manière indépendante. Elles permettent également de gérer la puissance : lorsqu'un sous-système est inactif, toute sa banque de registres peut être désactivée sans affecter le reste de la puce.
Banques de registres locaux
Les registres locaux sont les plus petits, les plus rapides et les plus étroitement couplés à des unités fonctionnelles individuelles, par exemple, les registres de pipelines dans une unité d'exécution du processeur, les coefficients de filtre dans un DSP ou les registres de contexte dans un processeur multifiltres. Ces registres font souvent partie d'un fichier de registre dédié avec plusieurs ports de lecture/écriture pour supporter des opérations parallèles.
Principales caractéristiques des banques de registres locales:
- Latence d'accès extrêmement courte (généralement de 1 à 2 cycles).
- Nombre très limité d'entrées (p. ex., 16 à 64 registres par banque) pour garder le fichier petit et rapide.
- Le compte de port adapté aux besoins de l'unité (p. ex., les fichiers de registre dans les processeurs super-calaires ont de nombreux ports de lecture/écriture).
- Souvent physiquement adjacent à l'unité fonctionnelle correspondante pour minimiser le retard du fil.
CPU Enregistrer la hiérarchie des fichiers – Un exemple concret
Dans un processeur moderne x86 ou ARM, la hiérarchie des registres est particulièrement prononcée. Le fichier des registres architecturaux (par exemple, 16 ou 32 registres à usage général) n'est que la pointe de l'iceberg :
- Fichier de registre physique: Contient beaucoup plus de registres que le jeu architectural pour supporter le renommage de registre. Il s'agit d'un grand tableau SRAM multiports assis au cœur du CPU.
- Fichier de registre de retrait[: Stores engagés état architectural pour des exceptions précises.
- Recommander les entrées tampons[: Agir comme stockage temporaire pour obtenir des résultats spéculatifs.
- Registres à usage spécial : tels que les registres de contrôle (CR0–CR4), les registres de segments, les registres spécifiques aux modèles (RMS) et les registres de débogage.
Chacun de ces fichiers ou banques occupe un niveau différent dans la hiérarchie, avec des schémas d'accès distincts, des budgets d'alimentation et des contraintes de conception. Le fichier de registre physique, par exemple, peut avoir des centaines d'entrées accessibles par plusieurs ports d'exécution – son optimisation de conception est essentielle pour la performance globale du processeur.
Considérations de conception pour les banques de registres hiérarchiques
La création d'une hiérarchie des banques de registres efficace exige une réflexion attentive dans plusieurs domaines.
Adresse et cartographie de la mémoire
Dans la plupart des SoC, les registres sont maquillés en mémoire, ils apparaissent comme des adresses spécifiques dans l'espace d'adresse du système. La hiérarchie simplifie le décodage de l'adresse : chaque sous-système obtient une plage d'adresse contiguë, et dans cette plage, les banques locales sont décodées localement.
Par exemple, dans les interconnects AXI ou AHB (Avancé Microcontroller Bus Architecture) largement utilisés, chaque interface esclave correspond à une banque de registre. La carte d'adresse est définie au moment de l'intégration des puces, et la hiérarchie garantit que seule la banque concernée répond à une transaction.
Échanges de forces et de zones
Différents niveaux hiérarchiques présentent des caractéristiques de puissance et de zone très différentes :
- Les banques locales: Petites, rapides, mais potentiellement de nombreuses instances à travers la puce. Chaque instance consomme de la surface et de la puissance de fuite.
- Les banques mondiales: Plus grandes, plus lentes, mais seulement quelques cas. Elles doivent être placées dans des endroits à faible latence avec une horloge robuste et une distribution de puissance. La puissance dynamique est dominée par les longs fils se connectant à divers demandeurs.
- Les banques de sous-systèmes: intermédiaires en taille et en nombre. Ils permettent le gingage sélectif de puissance – le sous-système du domaine de puissance peut être complètement arrêté lorsqu'il n'est pas utilisé.
Les concepteurs simulent souvent les schémas d'activité pour décider à quel niveau appartiennent les registres. Les registres auxquels on accède fréquemment (par exemple, les registres d'états d'interruption) peuvent être placés dans une banque locale rapide, tandis que ceux auxquels on accède rarement (par exemple, les compteurs d'erreurs) peuvent être placés dans une banque mondiale plus lente pour économiser de l'énergie.
Clock Domain Crossing et Synchronisation
Lorsque les registres dans différents domaines d'horloge doivent communiquer, la structure hiérarchique doit inclure des mécanismes de synchronisation. Une approche commune consiste à regrouper tous les registres dans un domaine d'horloge donné sous le même pont de bus. Le pont gère le franchissement du domaine d'horloge (CDC) en utilisant des FIFO à double port ou des chaînes de synchronisation.
Mises en œuvre pratiques dans les puces commerciales
Comprendre la hiérarchie abstraite est plus facile avec des exemples concrets de familles de puces réelles.
Série ARM Cortex-A (Processeurs de demande)
Les processeurs ARM utilisent largement les registres système macisés en mémoire. Le Block de contrôle système (SCB) contient des registres de configuration globaux pour les caches, l'endianité et le timing système. Chaque noyau a sa propre unité de débogage et de surveillance des performances avec des registres locaux. Le contrôleur d'interruption générique (GIC) est un sous-système avec sa propre banque de registres pour interrompre l'acheminement et la priorisation.
Référence: Manuel de référence de l'architecture de l'ARM (Armv8-A)
Plateformes RISC-V
La conception modulaire de RISC-V= encourage les banques de registres hiérarchiques. L'ISA de base définit 32 registres à usage général (x0–x31) comme une banque locale dans chaque secteur. Les niveaux de la machine, du superviseur et des privilèges d'utilisateur ont chacun leur propre registre de contrôle et de statut (RSE). Ces registres sont accessibles par des instructions de lecture/écriture RSE dédiées, et l'espace d'adresse RSE est partitionné par fonction.
Référence: Caractéristiques de l'ensemble d'instructions de RISC-V
x86 (Core Intel / AMD Zen)
Les registres spécifiques à la machine (RMS) forment un grand espace plat accessible par les instructions RDMSR/WRMSR, qui peuvent être considérés comme des registres globaux pour la configuration et la surveillance. Chaque noyau possède une banque de registres APC (Avancé Programmable Interrupt Controller) locale. Le contrôleur mémoire et l'hôte I/O (p. ex. complexe racine PCIe) utilisent des banques de sous-systèmes.
Référence: Intel® 64 et IA-32 Architectures Software Developer , Manuel
Avantages et limites des banques de registres hiérarchiques
L'approche hiérarchique offre des avantages clairs, mais elle présente aussi des inconvénients.
Avantages
- Speed: Les registres locaux fournissent la latence la plus faible possible, souvent en fonction de l'unité fonctionnelle de l'horloge du pipeline.
- Scalabilité: L'ajout de nouveaux sous-systèmes ne nécessite pas de remodeler l'espace de registre global — chaque nouveau bloc obtient sa propre fenêtre d'adresse et une banque locale.
- Efficacité de puissance: Les banques locales et les sous-systèmes peuvent être alimentés par des horloges ou par des moteurs indépendants, réduisant ainsi la puissance dynamique et statique.
- Modalité de conception[: Les blocs IP peuvent être développés avec leurs propres banques de registres, puis intégrés avec une coordination globale minimale, tant que la carte d'adresse est respectée.
- Contenu d'un errroir: Une défaillance dans une banque de registres locaux (p. ex., en raison d'un événement unique) n'affecte généralement que ce sous-système, ce qui facilite la mise en œuvre des conceptions tolérant les erreurs (p. ex., CCE sur les registres critiques).
Limitations
- Rexistance accrue: La logique de décodage et d'arbitrage d'adresses augmente avec le nombre de banques. La vérification ne doit pas assurer les chevauchements d'adresses et que tous les chemins à travers la fonction de hiérarchie correctement.
- La variation de la latence d'accès[: Le logiciel doit être conscient que l'accès à un registre global peut prendre de nombreux cycles par rapport à un registre local – critique pour les systèmes en temps réel.
- Déboguer la difficulté[: La traçabilité à travers les niveaux hiérarchiques peut être difficile lorsqu'on essaie d'isoler un bug. Les outils de débogue du matériel (p. ex., chaînes de balayage basées sur JTAG) doivent être conçus pour lire chaque banque dans la hiérarchie.
- L'épuisement des espaces de registre à mémoire: Dans les très grands SoCs avec des centaines de blocs, l'espace d'adresse requis pour toutes les banques de registres peut devenir un facteur limitant, surtout si la largeur du bus est limitée (p. ex., espace d'adresse 32 bits).
Conclusion
La structure hiérarchique des banques de registres est un modèle architectural fondamental dans les puces modernes complexes. Des registres de configuration globaux accessibles à l'ensemble du système jusqu'aux fichiers de registres locaux dans les pipelines d'exécution, cette hiérarchie permet la performance, l'efficacité énergétique et l'évolutivité que les conceptions actuelles exigent.Les ingénieurs qui comprennent cette organisation peuvent prendre de meilleures décisions lors de la conception des puces, du développement de logiciels et de l'intégration du système.