Maintenant que nous savons comment les processeurs fonctionnent à un niveau élevé, il est temps d'approfondir le processus de conception de leurs composants internes. Il s'agit du deuxième article d'une série sur le développement de processeurs. Je vous recommande d'étudier d'abord la première partie, afin de comprendre les concepts décrits ci-dessous.
Partie 1: Bases de l'architecture informatique (architectures de jeux d'instructions, mise en cache, pipelines, hyperthreading)
Partie 2: Processus de conception CPU (circuits électriques, transistors, éléments logiques, synchronisation)
Partie 3: Disposition et fabrication physique de la puce (VLSI et fabrication de silicium)
Partie 4: Tendances actuelles et orientations futures importantes en architecture informatique (mer d'accélérateurs, intégration tridimensionnelle, FPGA, Near Memory Computing)
Comme vous le savez peut-être, les processeurs et la plupart des autres appareils numériques sont constitués de transistors. La façon la plus simple de percevoir le transistor comme un interrupteur commandé à trois contacts. Lorsque l'obturateur est activé, le courant électrique peut traverser le transistor. Lorsque l'obturateur est désactivé, le courant ne peut pas circuler. L'obturateur est comme un interrupteur d'éclairage dans une pièce, mais il est beaucoup plus petit, plus rapide et peut être commandé électriquement.
Il existe deux principaux types de transistors utilisés dans les processeurs modernes: pMOS (PMOS) et nMOS (NMOS). Le transistor nMOS passe du courant lorsque la grille est chargée ou a une tension élevée, et le transistor pMOS passe du courant lorsque la grille est déchargée ou a une basse tension. En combinant ces types de transistors de manière complémentaire, nous pouvons créer des éléments logiques CMOS. Dans cet article, nous n'analyserons pas en détail les caractéristiques du fonctionnement des transistors, mais nous y reviendrons dans la troisième partie de la série.
Un élément logique est un appareil simple qui reçoit des signaux d'entrée, effectue une opération et génère un résultat. Par exemple, l'élément AND (AND) active son signal de sortie si et seulement si toutes les entrées de porte sont activées. L'onduleur, ou l'élément NOT (NOT), active sa sortie si l'entrée est désactivée. Vous pouvez combiner ces deux volets et obtenir un élément NAND qui active la sortie, si et seulement si aucune des entrées n'est activée. Il existe d'autres éléments avec leur fonctionnalité logique, par exemple, OR (OR), OR-NOT (NOR), OU exclusif (XOR) et OU exclusif avec inversion (XNOR).
Ce qui suit montre comment deux éléments simples sont assemblés à partir de transistors: un onduleur et NAND. Dans l'onduleur, le transistor pMOS (en haut) est connecté à l'alimentation et le transistor nMOS (en bas) est connecté à la masse. Sur la désignation des transistors pMOS, il y a un petit cercle connecté à la grille. Nous avons dit que les périphériques pMOS transmettent du courant lorsque l'entrée est désactivée et que les périphériques nMOS transmettent du courant lorsque l'entrée est activée, il est donc facile de remarquer que le signal de sortie (Out) sera toujours l'opposé du signal d'entrée (In). En regardant l'élément NAND, nous voyons qu'il nécessite quatre transistors et que la sortie sera toujours désactivée si au moins une des entrées est désactivée. La connexion de transistors de cette manière pour former des réseaux simples est le même processus qui est utilisé pour concevoir des éléments logiques plus complexes et d'autres circuits à l'intérieur des processeurs.

Les blocs de construction sous forme d'éléments logiques sont si simples qu'il est difficile de comprendre comment ils se transforment en un ordinateur fonctionnel. Le processus de conception consiste à combiner plusieurs éléments pour créer un petit appareil pouvant exécuter une fonction simple. Vous pouvez ensuite combiner plusieurs de ces appareils pour créer quelque chose qui remplit une fonction plus complexe. Le processus de combinaison de composants individuels pour créer une structure de travail est exactement le processus utilisé aujourd'hui pour créer des puces modernes. La seule différence est qu'une puce moderne se compose de
milliards de transistors.
À titre d'exemple, prenons un additionneur simple - un additionneur complet 1 bit. Il reçoit trois signaux d'entrée - A, B et Carry-In (signal d'entrée de transfert) et crée deux signaux de sortie - Sum (somme) et Carry-Out (signal de sortie de transfert). Le circuit le plus simple utilise cinq éléments logiques et ils peuvent être connectés ensemble pour créer un additionneur de n'importe quelle taille. Dans les schémas modernes, ce processus est amélioré en optimisant une partie de la logique et des signaux de transfert, mais les principes fondamentaux restent les mêmes.
La sortie de Sum est soit A soit B, mais jamais aux deux, ou il y a un signal de retenue d'entrée, puis A et B sont soit activés, soit désactivés. La sortie de transfert est un peu plus compliquée. Il est actif lorsque A et B sont activés en même temps, ou s'il y a un report et que l'un de A ou B est activé. Pour connecter plusieurs additionneurs 1 bit pour créer un additionneur plus large, il suffit de connecter le Carry-out du bit précédent au Carry-in du bit actuel. Plus les circuits deviennent compliqués, plus la logique est confuse, mais c'est la façon la plus simple d'ajouter deux nombres. Les processeurs modernes utilisent des additionneurs plus sophistiqués, mais leurs circuits sont trop compliqués pour un tel examen. En plus des additionneurs, les processeurs contiennent également des périphériques pour diviser, multiplier et versions de toutes ces opérations en virgule flottante.

Une telle combinaison de séquences d'éléments pour exécuter une fonction sur les signaux d'entrée est appelée
logique combinatoire . Cependant, ce n'est pas le seul type de logique utilisé dans les ordinateurs. Cela ne sera pas d'une grande utilité si nous ne pouvons pas stocker de données ou suivre l'état. Pour pouvoir sauvegarder des données, nous avons besoin d'une logique séquentielle.
La logique séquentielle est construite en connectant soigneusement les onduleurs et autres éléments logiques de sorte que leurs sorties transmettent des signaux de rétroaction à l'entrée des éléments. De telles boucles de rétroaction sont utilisées pour stocker un bit de données et sont appelées
RAM statique ou SRAM. Cette mémoire est appelée RAM statique par opposition à RAM dynamique (DRAM) car les données stockées sont toujours directement connectées à une tension positive ou à la masse.
La manière standard de mettre en œuvre un bit SRAM est avec le circuit à 6 transistors illustré ci-dessous. Le signal le plus élevé marqué comme WL (
Word Line ) est l'adresse, et lorsqu'il est activé, les données stockées dans cette cellule de 1 bit sont transférées vers la
ligne de bit marquée comme BL. La sortie BLB est appelée
Bit Line Bar ; c'est juste la valeur inversée de la ligne de bit. Vous devez reconnaître les deux types de transistors et comprendre que M3 avec M1, comme M4 avec M2, forment un inverseur.
SRAM est utilisé pour créer des caches et des registres ultrarapides à l'intérieur des processeurs. Cette mémoire est très stable, mais nécessite six à huit transistors pour stocker chaque bit de données. Par conséquent, par rapport à la DRAM, elle est extrêmement coûteuse en termes de coût, de complexité et de surface sur la puce. La RAM dynamique, d'autre part, stocke les données dans un minuscule condensateur, plutôt que d'utiliser des portes logiques. Il est appelé dynamique, car la tension sur le condensateur peut varier considérablement, car il n'est pas connecté à l'alimentation ou à la terre. Il n'y a qu'un seul transistor utilisé pour accéder aux données stockées dans le condensateur.
Étant donné que la DRAM ne nécessite qu'un seul transistor par bit et est hautement évolutive, elle peut être compactée de manière dense et bon marché. L'inconvénient de la DRAM est que la charge sur le condensateur est si faible qu'elle doit être constamment mise à jour. C'est pourquoi, après avoir éteint l'ordinateur, tous les condensateurs sont déchargés et les données dans la RAM sont perdues.
Des sociétés comme Intel, AMD et Nvidia ne publient pas de schémas de circuits de leurs processeurs, il est donc impossible de montrer des circuits électriques aussi complets pour les processeurs modernes. Cependant, ce simple additionneur vous permet d'avoir l'idée que même les parties les plus complexes du processeur peuvent être divisées en éléments logiques et de stockage, puis en transistors.
Maintenant que nous savons comment certains composants du processeur sont fabriqués, nous devons trouver comment tout assembler et synchroniser. Tous les composants clés du processeur sont connectés à un
signal d'horloge . Il a alternativement une tension haute et basse, la changeant avec un intervalle donné, appelé
fréquence . La logique à l'intérieur du processeur commute généralement les valeurs et effectue les calculs lorsque le signal d'horloge fait passer la tension de faible à élevée. En synchronisant toutes les pièces, nous pouvons garantir que les données arrivent toujours au bon moment afin qu'il n'y ait aucun problème dans le processeur.
Vous avez peut-être entendu dire que vous pouvez augmenter la vitesse d'horloge pour augmenter les performances du processeur. Cette augmentation des performances est due au fait que la commutation des transistors et de la logique à l'intérieur du processeur commence à se produire plus souvent que prévu. Puisqu'il y a plus de cycles par seconde, plus de travail peut être fait et le processeur aura de meilleures performances. Cependant, cela est vrai dans une certaine mesure. Les processeurs modernes fonctionnent généralement à des fréquences comprises entre 3,0 GHz et 4,5 GHz, et cette valeur n'a pas beaucoup changé au cours des dix dernières années. Tout comme une chaîne métallique n'est pas plus forte que son maillon le plus faible, un processeur ne peut pas fonctionner plus vite que sa partie la plus lente. À la fin de chaque cycle d'horloge, chaque élément processeur devrait terminer son travail. Si certaines parties ne l'ont pas encore terminé, le signal d'horloge est trop rapide et le processeur ne fonctionnera pas. Les concepteurs appellent cette partie la plus lente le
chemin critique, et c'est lui qui détermine la fréquence maximale avec laquelle le processeur peut travailler. Au-dessus d'une certaine fréquence, les transistors n'ont tout simplement pas le temps de commuter assez rapidement et commencent à tomber en panne ou à produire des valeurs de sortie incorrectes.
En augmentant la tension du processeur, nous pouvons accélérer la commutation des transistors, mais cela fonctionne également jusqu'à une certaine limite. Si trop de tension est appliquée, nous risquons de brûler le processeur. Lorsque nous augmentons la fréquence ou la tension du processeur, il commence toujours à émettre plus de chaleur et à consommer plus d'énergie. En effet, la puissance du processeur est directement proportionnelle à la fréquence et proportionnelle au carré de la tension. Pour déterminer la consommation d'énergie du processeur, nous considérons chaque transistor comme un petit condensateur qui doit être chargé ou déchargé lorsque sa valeur change.
L'alimentation est une partie si importante du processeur que dans certains cas, jusqu'à la moitié des contacts physiques sur la puce ne peuvent être utilisés que pour l'alimentation ou la mise à la terre. Certaines puces à pleine charge peuvent consommer plus de 150 ampères, et avec tout ce courant, vous devez être contrôlé très soigneusement. A titre de comparaison: le processeur central génère plus de chaleur par unité de surface qu'un réacteur nucléaire.
Le signal d'horloge dans les processeurs modernes prend environ 30 à 40% de sa puissance totale, car il est très complexe et doit gérer de nombreux appareils différents. Pour économiser l'énergie, la plupart des processeurs basse consommation désactivent certaines parties de la puce lorsqu'ils ne sont pas utilisés. Cela peut être fait en éteignant l'horloge (cette méthode s'appelle Clock Gating) ou en coupant l'alimentation (Power Gating).
Les signaux d'horloge créent une autre difficulté dans la conception du processeur: puisque leurs fréquences sont en constante augmentation, les lois de la physique commencent à influencer le travail. Malgré la vitesse extrêmement élevée de la lumière, elle n'est pas assez grande pour les processeurs hautes performances. Si vous connectez un signal d'horloge à une extrémité de la puce, au moment où le signal atteint l'autre extrémité, il sera désynchronisé d'une manière significative. Pour synchroniser toutes les parties de la puce, le signal d'horloge est distribué en utilisant ce que l'on appelle le H-Tree. Il s'agit d'une structure qui garantit que tous les points d'extrémité sont exactement à la même distance du centre.

Il peut sembler que la conception de chaque transistor, signal d'horloge et contact de puissance dans la puce est une tâche extrêmement monotone et difficile, et c'est effectivement le cas. Même si des milliers d'ingénieurs travaillent pour des sociétés comme Intel, Qualcomm et AMD, ils ne seraient pas en mesure de concevoir manuellement tous les aspects de la puce. Pour concevoir des puces de cette échelle, ils utilisent de nombreux outils sophistiqués qui génèrent automatiquement des conceptions et des circuits électriques. Ces outils obtiennent généralement une description de haut niveau de ce que le composant doit faire et déterminent la meilleure configuration matérielle qui répond à ces exigences. Récemment, une direction de développement appelée
High Level Synthesis est apparue, qui permet aux développeurs de spécifier les fonctionnalités nécessaires dans le code, après quoi les ordinateurs déterminent la meilleure façon de les réaliser dans l'équipement.
De la même manière que vous pouvez décrire des programmes informatiques à l'aide de code, les concepteurs peuvent décrire les périphériques matériels avec du code. Des langages tels que Verilog et VHDL permettent aux concepteurs d'équipements d'exprimer les fonctionnalités de tous les circuits qu'ils créent. Après avoir effectué des simulations et vérifié ces projets, ils peuvent être synthétisés dans des transistors spécifiques, dont le circuit électrique sera constitué. Bien que la phase de vérification puisse ne pas sembler aussi excitante que la conception d'un nouveau cache ou noyau, elle est beaucoup plus importante qu'eux. Pour chaque ingénieur de conception embauché par une entreprise, il peut y avoir cinq ingénieurs de vérification ou plus.
La vérification d'un nouveau projet prend souvent plus de temps et d'argent que la création de la puce elle-même. Les entreprises consacrent beaucoup de temps et d'argent à la vérification, car après avoir envoyé la puce en production, elle ne peut pas être corrigée. En cas d'erreur dans le logiciel, vous pouvez libérer le patch, mais l'équipement fonctionne différemment. Par exemple, Intel a découvert un
bogue dans le module de division en virgule flottante de certaines puces Pentium, et en conséquence, il a entraîné des pertes équivalentes aux 2 milliards de dollars actuels.
Il est difficile de comprendre qu'il peut y avoir plusieurs milliards de transistors dans une puce et de comprendre ce qu'ils font tous. Si vous cassez la puce en ses composants internes individuels, cela devient un peu plus facile. Les éléments logiques sont composés de transistors, les éléments logiques sont combinés en modules fonctionnels qui effectuent une tâche spécifique, et ces modules fonctionnels sont connectés ensemble pour former l'architecture informatique dont nous avons discuté dans la première partie de la série.
La plupart du travail de conception est automatisé, mais ce qui précède nous permet de réaliser à quel point le nouveau CPU que nous venons d'acheter est complexe.
Dans la deuxième partie de la série, j'ai parlé du processus de conception du CPU. Nous avons discuté des transistors, des portes logiques, des signaux de puissance et d'horloge, de la synthèse de conception et de la vérification. Dans la troisième partie, nous découvrirons ce qui est requis pour la production physique de la puce. Toutes les entreprises aiment se vanter de la modernité de leur processus de fabrication (Intel - 10 nm, Apple et AMD - 7 nm, etc.), mais que signifient réellement ces chiffres? Nous en parlerons dans la prochaine partie.
Lecture recommandée