L'avènement des chiplets

Moore a une loi de plus dans la manche !

Suite à une discussion en JZDS et sur le Discord, je me suis dit qu’écrire un article sur les chiplets serait bénéfique au plus grand nombre. Et permettrait de garder une trace écrite contrairement à ce qui peut se passer aux JZDS :-°
Plutôt que d’écrire un très long billet, j’ai préféré le format de l’article pour rentrer un peu plus dans les détails. J’espère ainsi pouvoir vous apprendre ce que sont les chiplets, pourquoi cette technologie a été créée et pourquoi elle va se développer dans les années à venir.

Préambule

Cet article parle de notions informatiques, électroniques et d’architecture des ordinateurs qui peuvent être assez avancées pour certains lecteurs. Je vous propose dans ce préambule un peu de vulgarisation permettant de comprendre un peu mieux ce dont on parle.

Pour les puristes, des raccourcis seront faits, il se peut que cette vulgarisation puisse contenir des informations volontairement imprécises pour faciliter la compréhension.

Chiplet, quésaco ?

Commençons par le plus difficile, définir ce qu’est un chiplet ! :-°
En effet le terme chiplet est apparu dans les années 70 mais son utilisation a surtout décollé ces dernières années, pour ceux qui s’intéressent aux processeurs ou aux puces électroniques complexes comme les FPGA (des puces dont on peut reprogrammer les portes logiques internes). Pour les autres, au fond de la salle, vous n’avez peut-être jamais entendu parler de ce terme, nous allons y remédier ! :D

Revenons d’abord aux bases de ce qu’est une puce électronique : un morceau de silicium gravé (les fameux transistors) qui est encapsulé dans un boîtier. Avec les composants traversants, de minuscules fils d’or ou d’argent relient les pattes du composant au morceau de silicium. Au début les puces sont composées de transistors gravés à des résolutions assez grossières (comparées à aujourd’hui) et les fonctions étaient assez basiques : des portes logiques, des amplificateurs opérationnels, etc. Néanmoins c’était déjà un progrès énorme en terme de miniaturisation !

À cette époque les composants ont des pattes traversantes et il faut relier la puce en silicium à ces pattes. C’est réalisé avec de minces fils d’argent ou d’or qui sont soudés entre la puce et les pattes à l’intérieur du boîtier.

Processeur Intel 8742 - Fils de bonding visibles
Processeur Intel 8742 - Fils de bonding visibles (Ioan Sameli)

Quelques années plus tard, sont apparus les premiers processeurs avec notamment l’Intel 4004, relativement simples aujourd’hui. Puis les processeurs se sont complexifiés.

À partir des années 70, IBM développe des composants MCM (Multi-chip Module) comprenant plusieurs puces de silicium dans un seul boîtier. Mais cette technologie va surtout se développer à la fin des années 90. On peut noter le Pentium Pro d’Intel sorti en 1995. Ce processeur comprenait deux puces en silicium : une pour le processeur à proprement parler et une autre pour la mémoire cache L2 (une mémoire tampon entre le processeur et la RAM, beaucoup plus rapide mais bien plus chère car gravée avec le processeur).

Intel Pentium Pro 256KB
Intel Pentium Pro 256KB (Moshen)

Comme on peut le voir sur la photo les deux puces ont à peu près la même taille et Intel proposait plusieurs tailles de mémoire cache L2. L’avantage de séparer le processeur de la mémoire cache était de pouvoir faire des économies d’échelle sur la puce processeur tout en proposant différentes tailles de mémoire cache en mettant une puce de taille différente dans le boîtier.

Ce type de composants reste relativement peu développé, même si IBM a continué à développer des composants MCM. Notons le POWER5 d’IBM sorti en 2004 qui voit carrément quatre processeurs avec chacun une puce de mémoire cache L3. L’interconnexion des puces se fait à l’intérieur du boîtier.

IBM POWER5
IBM POWER5 (Carsten Schulz)

Aujourd’hui la technologie à évoluée et les puces MCM sont présentes dans les produits grand public avec les processeurs AMD. Ici nous pouvons voir un processeur EPYC 7702 (sorti en août 2019) composé de 9 puces en silicium interconnectées : 8 puces contenant des cœurs et de la mémoire cache et une puce centrale reliant les 8 autres et qui gère la DDR ainsi que les signaux d’entrée/sortie (SATA, PCI express, USB, etc.).

AMD EPYC 7702
AMD EPYC 7702 (Fritzchens Fritz)

Mais dis-moi Jamy, c’est quoi un chiplet ?

Ah oui, j’ai un peu dérivé :D
En fait un chiplet c’est une des puces en silicium présente dans un MCM. Un chiplet est fait pour être interconnecté à d’autres chiplets. Oui c’est relativement simple mais il fallait bien montrer quelques photos sympathiques pour comprendre ^^

Néanmoins pour être un peu plus précis sur le sens des chiplets, l’idée n’est pas forcément de mettre plusieurs puces différentes reliées entre elles. Il y a aussi une notion de puce générique qui puisse être réutilisée et non pas dédiée à une référence de processeur en particulier.

Aspects économiques des chiplets

Après cette introduction tout en image, cherchons maintenant à comprendre pourquoi les chiplets vont se développer à l’avenir. Pour cela il faut revenir sur le processus de fabrication des puces électroniques.

Installez-vous confortablement dans un fauteuil car le voyage depuis la plage de sable fin sera long :euh:

Non, attendez ! :D
On va passer toute une partie de la fabrication du silicium. Ce qui va nous intéresser c’est la répartition des puces (die) sur la galette de silicium (wafer) et notamment l’évolution du rendement avec l’augmentation de la finesse de gravure.

Mais avant cet aspect du rendement, il faut parler de la taille physique maximum d’un die. En effet, sur une galette de silicium le même design d’une puce est répété plusieurs fois (dizaine voire centaine de fois). L’impression de ce design se fait de manière optique via de la lumière ultraviolette. Or il y a tout un jeu de lentilles et mécanismes optiques qui empêche de graver un unique die sur l’entièreté de la galette de silicium.
Plus on complexifie les puces et plus on souhaite mettre de transistors, il faut donc soit augmenter la taille de la puce, soit augmenter la finesse de gravure pour caser plus de transistors dans une même surface. Mais là aussi d’autres contraintes et limites se font sentir.

C’est pour cela que le principe de chiplet est intéressant pour contourner ces limites : utiliser plusieurs petites puces en silicum connectées entre elles pour réaliser une puce plus complexe mais impossible à graver de manière monolithique.

Revenons maintenant sur le rendement (yield en anglais). Premièrement, les wafers sont de forme ronde et on souhaite graver dessus des puces de forme rectangulaire. L’entièreté du silicium n’est pas donc pas utilisée. Mais plus les dies sont petits au niveau des bords et plus on pourra avoir de dies entiers. C’est le même principe que l’aliasing dans un jeu vidéo : plus les pixels utilisés pour former une forme ronde sont petits et moins on se rend compte du crénelage.

À gauche : die de 5×5 mm - À droite : die de 1×1 mm
À gauche : die de 5×5 mm - À droite : die de 1×1 mm

Dans l’exemple ci-dessus, si l’on fait le rapport de dies partiaux sur le nombre total de dies (bon et partiaux) on obtient un ratio de 13.8 % dans le cas de dies de 5×5 mm et de 3.6 % dans le cas de dies de 1×1 mm. Plus le die est petit et plus on peut avoir de dies valides au niveau des bords, ce qui augmente le rendement.
On peut aussi faire un mélange de die de grande taille au centre du wafer et utiliser des dies de plus petite taille au niveau des bords pour optimiser le rendement dû à l’aliasing.

Dis Jamy, pourquoi utilise-t-on des wafers ronds pour faire des puces rectangulaires ? :-°
Eh bien c’est à cause de la méthode de fabrication du silicium appelé procédé de Czochralski qui donne du silicium sous forme de cylindres, découpés en tranches très fines pour donner des wafers.

Deuxièmement, le rendement est affecté par les défauts qui peuvent apparaître sur le wafer. Vous pouvez penser à des grains de poussière qui tombent sur le wafer.

À gauche : die de 5×5 mm - À droite : die de 1×1 mm
À gauche : die de 5×5 mm - À droite : die de 1×1 mm

J’ai repris l’exemple précédent en ajoutant une densité de défaut de 0.5 par cm². Comparons maintenant le fabrication yield qui correspond au ratio entre le nombre de dies fonctionnels et le nombre total de dies produits. Dans le cas d’un die de 5×5 mm, le yield est de 88.4 % tandis qu’avec des dies de 1×1 mm, le yield est de 99.5 %.

Il est donc doublement intéressant d’avoir des dies de petite taille pour optimiser la production de puces électroniques. Néanmoins le fait de découper une puce complexe en plusieurs puces de taille plus petite nécessite de faire communiquer ces différentes puces entre elles, il faut donc rajouter des éléments de communication qui viennent prendre de la place supplémentaire et utiliser de l’énergie supplémentaire.

De plus, l’utilisation de chiplets peut permettre d’utiliser des dies de différentes finesses de gravure selon les fonctions permettant de moduler les coûts de la puce finale avec les performances.

Enfin, un autre aspect économique à voir est la complexité de développement de nouvelles fonctionnalités. Cela tend à avoir des sociétés spécialisées (ou en tout cas des start-ups au début) proposant des blocs de propriété intellectuelle (des fonctions) prêts à l’emploi. Par exemple un fabricant de processeur pourra se focaliser sur le développement du processeur en lui-même tout en achetant des dies pour des fonctions comme le PCI express, l’USB ou les contrôleurs DDR.

Pour faciliter l’interopérabilité de chiplets venant de fabricants différents, des acteurs majeurs comme Intel, AMD, ARM, Qualcomm, Samsung ou TSMC ont créé une norme de communication entre chiplets, l’UCIe (Universal Chiplet Interconnect express).

Deux exemples : AMD et Intel (Altera)

AMD EPYC

Aujourd’hui de plus en plus de processeurs utilisent cette technique des chiplets. AMD utilise les chiplets depuis la première génération des processeurs EPYC, où les différents cœurs sont reliés entre eux par l'Infinity Fabric.

La première génération de processeurs EPYC voyait un ensemble de dies que l’on pourrait assimiler à des processeurs complets étant reliés entre eux par l'Infinity Fabric pour former le processeur final. Les chiplets étaient donc une sorte de petit processeur autonome : chaque die gérait ses entrées/sorties et avait son contrôleur DDR.
Ces dies, ou plutôt chiplets, comportent deux Core Compute Complex (CCX, un ensemble de quatre cœurs avec de la mémoire cache) ainsi qu’un contrôleur DDR, gère des entrées/sorties (PCI Express par exemple) et dispose de modules de communication pour l'Infinity Fabric.

Petite subtilité, il y a toujours quatre chiplets sur un EPYC de première génération. Pour faire varier le nombre de cœurs, AMD désactive des cœurs à l’intérieur des CCX. Par exemple pour avoir 24 cœurs, les CCX n’ont que 3 cœurs actifs

Cette première génération utilisait donc le principe des chiplets comme une sorte de copié/collé de dies au lieu de développer un die monolithique de grande taille.

Pour la seconde génération, AMD pousse le concept un peu plus loin. En effet, les CCX sont maintenant indépendants, regroupés par paires au sein d’un Core Compute Die (CCD) relié par Infinity Fabric à un die gérant la DDR et les entrées/sorties appelé I/O Die (IOD).
AMD exploite pleinement cette séparation accrue des fonctions. En effet le CCD est gravé en 7 nm tandis que l’IOD est gravé en 14 nm.

Ci-dessous une présentation d’AMD résumant le passage en chiplets des processeurs EPYC.

Evolution de l'architecture des processeurs AMD (Source: AMD)
Evolution de l’architecture des processeurs AMD (Source: AMD)

Intel FPGA (Altera)

Les processeurs Intel sont toujours des puces monolithiques sauf quelques exceptions comme nous avons pu le voir au début de cet article. Néanmoins dans le secteur des FPGA (des puces reconfigurables) Intel utilise les chiplets pour la dernière génération, les Agilex.
Ces chiplets concernent essentiellement le type de transceivers utilisés (les liens rapides) et sont appelées Tiles. Si Intel propose des gammes prédéfinies à partir de ces tiles, il doit être possible d’avoir des puces customisées pour ses propres besoins.
Les tiles sont divisées par vitesse maximum des transceivers et les protocoles supportés (Ethernet, PCI Express, etc.) : 16G pour les P, 28G pour les H, 32G pour les R, etc.
Intel évoque aussi pour le futur la possibilité de connecter des chiplets customisés qui apporteraient des fonctions supplémentaires. Actuellement des sociétés ont sorti un chiplet ADC/DAC (Jariett Technologies) ainsi qu’un autre de connexion optique (Ayar Labs).

Intel Agilex architecture (Source : Intel)
Intel Agilex architecture (Source : Intel)

Enfin il ne faut pas croire non plus que les puces monolithiques sont mortes. Elles ont toujours des avantages, notamment en terme de consommation et de latence de communication interne, ce qui peut s’avérer critique pour certaines applications nécessitant des puces de grande taille.
C’est le cas de Broadcom et de ses puces de switch 400G dont le choix est expliqué par le concepteur dans cette vidéo : https://www.youtube.com/watch?v=B-COGMbaUg4

J’espère que cet article vous a plus et vous a permis d’en savoir un peu plus sur la fabrication des puces actuelles. J’ai tenté de vulgariser un sujet complexe, j’espère là aussi avoir pu réussir à vous garder après le premier paragraphe :D
N’hésitez pas à laisser un commentaire si certains points restent cryptiques pour vous, je tenterai d’apporter des précisions.

6 commentaires

Je me demandais à quel point l’avènement des chiplets laissait envisager une certaine évolution dans le hardware (aussi bien consumer-grade que server-grade) dans le futur, voire un changement de paradigme sur la façon dont on conçoit des machines performantes et optimales globalement.

Certains systèmes bien intégrés (notamment chez Apple) ne se reposent pas uniquement sur un CPU « classique » très performant, mais aussi sur plusieurs puces auxiliaires spécialisées qui déchargent les CPU généralistes. Dans un système restreint comme un smartphone, on peut ainsi retrouver des puces de transcodage H265, des unités de calcul pour l’IA (Apple Neural Engine) et bien entendu l’unité graphique classique.

Je reprends donc le schéma d’AMD EPYC de 2nde génération et je me demande si les chiplets seraient un moyen simple de produire de façon commercialement et industriellement viable des unités complètes qui embarquent plusieurs puces spécialisés pour atteindre des performances optimales sur certaines tâches. Par exemple, une unité pourrait prévoir des CCD classiques, mais aussi un DSP, un GPU, des puces de transco H265/AV1/VP9/…, une puce pour faire de l’AES, etc. et relier le tout par l’IOD/Infinity Fabric. Chaque constructeur de machines/serveurs pourrait donc composer son unité finale prêt à l’emploi en ayant composé elle-même et sans coûts R&D/industrialisation faramineux.

Ça me fait penser au concept d'APU, mais je ne sais pas s’il y a un rapport.

Je me demandais à quel point l’avènement des chiplets laissait envisager une certaine évolution dans le hardware (aussi bien consumer-grade que server-grade) dans le futur, voire un changement de paradigme sur la façon dont on conçoit des machines performantes et optimales globalement.

Certains systèmes bien intégrés (notamment chez Apple) ne se reposent pas uniquement sur un CPU « classique » très performant, mais aussi sur plusieurs puces auxiliaires spécialisées qui déchargent les CPU généralistes. Dans un système restreint comme un smartphone, on peut ainsi retrouver des puces de transcodage H265, des unités de calcul pour l’IA (Apple Neural Engine) et bien entendu l’unité graphique classique.

Je reprends donc le schéma d’AMD EPYC de 2nde génération et je me demande si les chiplets seraient un moyen simple de produire de façon commercialement et industriellement viable des unités complètes qui embarquent plusieurs puces spécialisés pour atteindre des performances optimales sur certaines tâches. Par exemple, une unité pourrait prévoir des CCD classiques, mais aussi un DSP, un GPU, des puces de transco H265/AV1/VP9/…, une puce pour faire de l’AES, etc. et relier le tout par l’IOD/Infinity Fabric. Chaque constructeur de machines/serveurs pourrait donc composer son unité finale prêt à l’emploi en ayant composé elle-même et sans coûts R&D/industrialisation faramineux.

Ça me fait penser au concept d'APU, mais je ne sais pas s’il y a un rapport.

sgble

Alors il faut savoir qu’une puce est souvent fait avec des IP (Intellectual Property) : une fonction vendue toute prête au niveau "transistors" mais qu’il faut intégrer à son design.
Un exemple classique est un contrôleur DDR3 sur des microcontrôleurs embarqués. Le fabriquant du microcontrôleur ne maitrise pas forcément la DDR3 et n’a pas les compétence, ni le temps (ni l’envie) de créer un contrôleur DDR3. Il achète donc une IP d’un contrôleur et l’intègre à son design.

Il faut réussir à voir la différence entre la possibilité d’une IP et d’un chiplet. Pour moi le chiplet est là pour venir apporter une ou plusieurs fonctionnalités avancées et qui ont déjà passer les tests de la gravure, donc une étape supplémentaire dans la conception. Mais il reste le problème de tester le SoC complet avec tous les chiplets. Donc on ne peut pas créer des centaines de déclinaisons comme un lego. Il faut un minimum de réalité économique.
Mais oui, moyennant un certain volume on peut créer des SoC à la carte. :)

Le gros avantage est du côté production de la puce : si une IP peut être déclinée pour différente finesse de gravure, un chiplet à l’avantage de pouvoir être gravé toujours à sa finesse initiale (si c’est suffisant) quand d’autres parties de la puce peuvent être améliorées avec des finesse de gravure plus petites.

D’ailleurs je croyais que les chiplets pouvaient servir dans un design modulaire. Tu prends un design avec 4 puces, les puces avec des défauts sont répartis dans l’ensemble de la production, et ceux avec 3 puces qui fonctionnent sur 4 seront une gamme en dessous et un peu moins cher que ceux avec les 4 qui fonctionnent.

Ce qui simplifie la conception et l’industrialisation par rapport à un fonctionnement classique.

+0 -0

D’ailleurs je croyais que les chiplets pouvaient servir dans un design modulaire. Tu prends un design avec 4 puces, les puces avec des défauts sont répartis dans l’ensemble de la production, et ceux avec 3 puces qui fonctionnent sur 4 seront une gamme en dessous et un peu moins cher que ceux avec les 4 qui fonctionnent.

Ce qui simplifie la conception et l’industrialisation par rapport à un fonctionnement classique.

Renault

J’ai oublié de répondre lorsque tu as posté le commentaire.

Les dies sont testés avant l’assemblage final. Si un die est non fonctionnel alors cela ne vaut pas le coût de le mettre sur la puce finale. S’il a des défauts, oui il peut servir à faire des puces avec des performances moindres mais il n’y a pas de relation avec les chiplets.
Le principe d’optimiser les puces produites c’est valables pour tout type de puces.

Le fabricant va tester les wafers et chaque puce sur le wafer, il peut aussi réaliser un certain nombre de tests de performance pour classer chaque puce, c’est le principe du binning. ( Plus d’infos ici : https://semiengineering.com/early-and-fine-virtual-binning/ ) Mais pour revenir aux chiplets, ça peut rajouter de la complexité car il faut mixer différents dies avec des performances différentes.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte