Skip to content

Niveau 8 · Chapitre 8.2

Construire des portes en CMOS

Comment chaque porte d’une puce moderne est câblée à partir de transistors : l’inverseur CMOS, NAND et NOR comme réseaux de tirage vers le haut et vers le bas, pourquoi AND coûte plus cher que NAND, où passe l’énergie (P = αCV²f et les fuites), la sortance, et le temps de propagation mesuré avec un oscillateur en anneau.

Le chapitre précédent a décrit le transistor comme un interrupteur : un transistor nMOS se ferme quand sa grille vaut 1, un transistor pMOS se ferme quand sa grille vaut 0. Ce chapitre câble ces interrupteurs pour en faire les portes du niveau de la logique numérique en utilisant le CMOS, la technique employée depuis des décennies par tous les processeurs, toutes les mémoires et toutes les puces flash. La méthode tient sur une page, et elle explique plusieurs choses que le niveau logique admettait sans les justifier : pourquoi NAND et NOR sont les portes « naturelles », pourquoi une porte a un délai, et où passe l’énergie d’une puce.

La règle : un réseau de tirage vers le haut et un vers le bas

Une porte CMOS statique a une sortie et deux réseaux d’interrupteurs :

  • un réseau de tirage vers le bas (pull-down), fait de transistors nMOS placés entre la sortie et la masse, qui conduit exactement quand la sortie doit valoir 0 ;
  • un réseau de tirage vers le haut (pull-up), fait de transistors pMOS placés entre l’alimentation et la sortie, qui conduit exactement quand la sortie doit valoir 1.

Les deux réseaux sont complémentaires : pour chaque combinaison d’entrées, exactement l’un des deux conduit. La sortie est donc toujours fermement reliée soit à l’alimentation, soit à la masse, jamais aux deux, et jamais à aucune.

Le réseau de tirage vers le haut est le dual du réseau de tirage vers le bas : là où le second a des transistors en série, le premier les a en parallèle, et inversement. C’est la loi de De Morgan faite de transistors. Et comme un interrupteur nMOS se ferme sur un 1, le réseau du bas conduit quand une certaine fonction f des entrées vaut 1, ce qui tire la sortie à 0. Une porte CMOS élémentaire calcule donc toujours une fonction inversée, ¬f. Elle peut calculer NOT, NAND et NOR, mais pas AND ni OR.

L’inverseur

La plus petite porte a un transistor dans chaque réseau :

ApMOS (alimentation → sortie)nMOS (sortie → masse)OUT
0ferméouvert1
1ouvertfermé0

Deux transistors. Quand l’entrée vaut 0, l’interrupteur pMOS relie la sortie à l’alimentation ; quand elle vaut 1, l’interrupteur nMOS la relie à la masse.

NAND : série en bas, parallèle en haut

Pour un NAND à 2 entrées, la sortie ne doit valoir 0 que si A et B valent tous deux 1. Deux transistors nMOS en série entre la sortie et la masse font exactement cela : le chemin ne conduit que si les deux interrupteurs sont fermés. Le réseau du haut est le dual : deux transistors pMOS en parallèle entre l’alimentation et la sortie, de sorte que si l’une des entrées vaut 0, son interrupteur pMOS tire la sortie à 1.

ABnMOS AnMOS Bréseau du bas (série)pMOS ApMOS Bréseau du haut (parallèle)OUT
00ouvertouvertouvertferméferméfermé1
01ouvertferméouvertferméouvertfermé1
10ferméouvertouvertouvertferméfermé1
11ferméferméferméouvertouvertouvert0

Quatre transistors. Sur chaque ligne, exactement un des deux réseaux est fermé.

NOR : parallèle en bas, série en haut

NOR en est l’image dans un miroir. La sortie doit valoir 0 si l’une des entrées vaut 1, donc le réseau du bas est formé de deux transistors nMOS en parallèle. Le réseau du haut est son dual, deux transistors pMOS en série : la sortie n’est reliée à l’alimentation que lorsque les deux entrées valent 0.

ABréseau du bas (parallèle)réseau du haut (série)OUT
00ouvertfermé1
01ferméouvert0
10ferméouvert0
11ferméouvert0

Quatre transistors encore. Le principe s’étend à davantage d’entrées : un NAND à 3 entrées a trois nMOS en série et trois pMOS en parallèle, soit 6 transistors en tout. Les longues chaînes en série deviennent lentes, car chaque interrupteur de la chaîne ajoute de la résistance : les vraies bibliothèques de portes dépassent donc rarement quatre entrées, et les fonctions plus larges sont construites comme des arbres de portes plus petites.

Pourquoi on préfère NAND à NOR

NAND et NOR coûtent le même nombre de transistors, mais les concepteurs de puces préfèrent NAND. La raison tient aux transistors eux-mêmes : à taille égale, un transistor pMOS conduit moins de courant qu’un transistor nMOS, en général environ deux fois moins, parce que les porteurs de charge de son canal sont moins mobiles (Semi-conducteurs et dopage, au niveau de la physique, explique pourquoi). Pour rendre un interrupteur pMOS aussi fort qu’un nMOS, on le dessine plus large.

Un NOR place les transistors pMOS, déjà faibles, en série, ce qui ralentit encore le réseau du haut : il faut donc les élargir davantage. Un NAND les place en parallèle et met en série les transistors nMOS, plus forts. À vitesse égale, un NAND est plus petit.

AND et OR coûtent plus cher

Puisqu’un étage CMOS inverse toujours, AND doit être un NAND suivi d’un inverseur, et OR un NOR suivi d’un inverseur :

PorteConstruite commeTransistors
NOT1 pMOS + 1 nMOS2
NAND (2 entrées)nMOS en série, pMOS en parallèle4
NOR (2 entrées)nMOS en parallèle, pMOS en série4
AND (2 entrées)NAND + NOT6
OR (2 entrées)NOR + NOT6
bit de SRAMdeux inverseurs rebouclés + 2 transistors d’accès6
additionneur completle classique « additionneur miroir »28

Le livre compte 2 transistors pour NAND et NOR et 3 pour AND et OR, parce que ses portes bipolaires utilisent une résistance pour le tirage vers le haut. En CMOS, la résistance devient un réseau pMOS, ce qui double le nombre de transistors mais supprime le courant que la résistance consommerait chaque fois que la sortie est basse.

L’universalité de NAND, montrée au niveau logique, reste vraie : on peut tout construire avec des NAND. Mais ce n’est pas ainsi que les puces minimisent le nombre de transistors. Voici NOT, AND et OR construits uniquement avec des portes NAND :

Logic · NOT, AND et OR uniquement avec des portes NAND

À essayer : Cliquez sur un interrupteur d’entrée du circuit (ou sur son bouton au-dessus) pour le basculer — les portes et la table de vérité suivent.

auto
0
gate delays
stable after 0
stable
state
2
critical path
gate delays, worst case
6
gates
ABNAND gate: output 11NOT ANAND gate: output 1NAND gate: output 00A AND BNAND gate: output 1NAND gate: output 1NAND gate: output 00A OR B
1 0 inputs changed, output switches next delayclick a switch to toggle it
ABNOT AA AND BA OR B
00100
01101
10001
11011

NAND is universal: tie both inputs together and it's NOT; follow it with a NOT and it's AND; feed it two inverted inputs and it's OR (De Morgan). So any circuit can be built from NAND gates alone — and NOR works the same way.

Unit-delay model: every gate takes one step to react. With auto off, toggle switches and press step to watch the change travel gate by gate.

Ce circuit utilise six portes NAND, soit 24 transistors en CMOS. Construites directement — un inverseur (2), un AND (6) et un OR (6) —, les mêmes trois sorties en demandent 14. Les vraies puces sont construites à partir de bibliothèques de cellules standard qui contiennent des centaines de portes — NAND, NOR, inverseurs, mais aussi des portes composées comme AND-OR-INVERT, qui calcule ¬(AB + C) en un seul étage de 6 transistors —, et les outils de synthèse choisissent les cellules qui rendent le circuit le plus petit et le plus rapide.

Où passe l’énergie

Une porte CMOS qui ne commute pas n’a aucun chemin de l’alimentation vers la masse : dans le cas idéal, elle ne consomme donc aucun courant. L’énergie est dépensée de deux façons.

La puissance dynamique est dépensée chaque fois qu’une sortie change. La sortie de chaque porte attaque une petite capacité : les grilles des transistors qu’elle alimente, plus le fil. Faire monter la sortie à 1 charge cette capacité depuis l’alimentation ; la faire descendre à 0 vide la charge vers la masse. Chaque cycle complet de charge et de décharge prélève une énergie C·V² sur l’alimentation, dont une moitié est perdue en chaleur dans le réseau du haut et l’autre dans le réseau du bas. Sur une puce entière :

puissance dynamique = α · C · V² · f

où C est la capacité totale commutée, V la tension d’alimentation, f la fréquence d’horloge, et α le facteur d’activité, la fraction de la capacité qui commute effectivement à chaque cycle — souvent bien en dessous de 0,5, puisque la plupart des signaux ne changent pas à chaque cycle.

C’est le terme en V² qui compte. Diviser la fréquence par deux divise la puissance par deux, mais double le temps que prend une tâche, si bien que l’énergie de la tâche reste la même. Baisser la tension de 30 % ramène l’énergie par opération à 0,7² = 49 % — mais les transistors commutent plus lentement à basse tension, donc la fréquence doit baisser aussi. C’est pourquoi les processeurs pratiquent l’ajustement dynamique de la tension et de la fréquence (DVFS, dynamic voltage and frequency scaling) : sous faible charge, ils baissent ensemble l’horloge et la tension, et l’énergie par instruction diminue bien plus vite que la vitesse. C’est aussi pourquoi les téléphones et les ordinateurs portables utilisent de nombreux cœurs à vitesse modérée plutôt qu’un seul cœur très rapide.

Une petite puissance supplémentaire, dite de court-circuit, est dépensée à chaque transition : pendant que l’entrée traverse la tension intermédiaire, les deux réseaux conduisent brièvement.

La puissance statique est dépensée même quand rien ne commute, parce qu’un transistor « bloqué » ne l’est pas parfaitement. Un petit courant de fuite (leakage) traverse le canal et l’isolant de grille ultrafin. Pour un transistor, il est minuscule ; pour des milliards, c’est une part importante du total. Les fuites augmentent à mesure que les transistors rétrécissent et que l’on abaisse la tension de seuil pour qu’ils restent rapides. C’est ce qui a mis fin à la loi d’échelle de Dennard, comme l’a décrit le chapitre précédent. Les puces la combattent par la coupure d’alimentation (power gating) : on coupe l’alimentation de blocs entiers — un cœur inactif, un groupe de GPU inutilisé — pour qu’ils ne fuient plus du tout. Le chapitre Les limites du niveau de la physique traite de la physique des fuites et de la chaleur.

Sortance et temps de propagation

La sortie d’une porte ne change pas instantanément. Elle doit charger ou décharger la capacité qu’elle attaque à travers la résistance de ses transistors, et cela prend du temps : c’est le temps de propagation, le délai entre un changement d’entrée et le changement de sortie correspondant. Plus une porte attaque de capacité, plus il est long.

Le nombre d’entrées de portes qu’attaque une sortie est sa sortance (fan-out). Chaque entrée ajoute de la capacité, donc une porte à forte sortance est lente. Les concepteurs y répondent de plusieurs façons : ils élargissent (renforcent) les transistors de la porte qui attaque, ou insèrent des tampons (buffers) — des paires d’inverseurs — pour répartir la charge en arbre. Une référence courante pour un procédé est le délai FO4 : le délai d’un inverseur qui attaque quatre copies de lui-même. La vitesse des circuits est souvent exprimée en FO4, ce qui permet de comparer des conceptions d’un procédé à l’autre.

Le niveau logique utilise un modèle simple dans lequel toutes les portes ont le même délai. L’additionneur à propagation de retenue du chapitre sur les additionneurs, par exemple, a un plus long chemin de 9 portes de l’entrée à la sortie ; dans le simulateur, ajouter 1 à 1111 met 8 délais de porte à se stabiliser. Au niveau des composants, le délai dépend de la taille des transistors, de la sortance et de la longueur des fils, et des outils d’analyse temporelle le calculent pour chaque chemin de la puce. Le chemin le plus lent à travers un étage de pipeline — le chemin critique — fixe la fréquence d’horloge maximale.

Mesurer un délai avec un oscillateur en anneau

Comment mesurer un délai de quelques picosecondes ? On laisse la porte se mesurer elle-même. Reliez en boucle un nombre impair de portes inverseuses : il n’y a aucun état stable, si bien que le signal se poursuit lui-même autour de la boucle indéfiniment :

Logic · Un oscillateur en anneau : trois portes inverseuses en boucle

À essayer : Cliquez sur un interrupteur d’entrée du circuit (ou sur son bouton au-dessus) pour le basculer — les portes et la table de vérité suivent.

auto
0
gate delays
stable after 0
stable
state
loop
critical path
feedback: sequential
3
gates
ENNAND gate: output 1NOT gate: output 0NOT gate: output 11OUT
1 0 inputs changed, output switches next delayclick a switch to toggle it
ENOUT
0stable
1oscillates, period 6 delays

An odd number of inverting gates in a loop has no stable state. With EN = 1 the signal chases its own tail and the output toggles every 3 gate delays: the simulator detects the repeating state instead of settling. Real chips use this to measure gate speed.

Unit-delay model: every gate takes one step to react. With auto off, toggle switches and press step to watch the change travel gate by gate.

Mettez EN à 1 et la sortie bascule tous les 3 délais de porte, pour une période de 6 : dans le simulateur, la sortie vaut 1, 1, 1, 0, 0, 0 et recommence. En général, un anneau de N étages oscille avec une période de 2·N·d, où d est le temps de propagation d’un étage : le signal doit faire deux fois le tour de la boucle, une fois comme front montant et une fois comme front descendant, pour revenir à son état de départ. Mesurer la fréquence d’un oscillateur en anneau donne donc directement le délai de porte : d = 1 / (2·N·f).

Un anneau de plusieurs centaines d’étages oscille à une fréquence facile à compter avec des instruments ordinaires, et, une fois divisée, elle donne un délai par porte bien trop court pour être mesuré directement. Les usines de puces placent des oscillateurs en anneau sur chaque plaquette, souvent dans les espaces entre les puces, et les mesurent pour vérifier que chaque lot de transistors est aussi rapide qu’il devrait l’être. Le chapitre sur les bascules a rencontré le même circuit comme source d’horloge.

À retenir

  • Une porte CMOS statique a un réseau de tirage vers le bas en nMOS et un réseau de tirage vers le haut dual en pMOS ; pour chaque entrée, exactement un des deux conduit. La série dans un réseau correspond au parallèle dans l’autre.
  • Un étage CMOS inverse toujours : NOT (2 transistors), NAND et NOR (4) sont naturels ; AND et OR demandent un inverseur de plus (6). Les chiffres de 2 et 3 du livre valent pour des portes bipolaires à résistance.
  • On préfère NAND à NOR parce que NAND place en parallèle les transistors pMOS, plus faibles.
  • Tout construire avec des NAND est universel mais pas économique : NOT + AND + OR demandent 24 transistors avec des NAND, 14 directement.
  • La puissance dynamique vaut α·C·V²·f ; la tension compte au carré, d’où le DVFS. La puissance statique, ce sont les fuites, combattues par la coupure d’alimentation.
  • Le temps de propagation croît avec la capacité qu’attaque une porte, c’est-à-dire avec sa sortance. Un oscillateur en anneau de N étages a une période de 2·N·d, et c’est ainsi qu’on mesure les délais de porte.

Dans ce niveau

  1. 8.1Le transistor comme interrupteur
  2. 8.2Construire des portes en CMOS
  3. 8.3Du sable à la puce
  4. 8.4Disques durs, SSD et RAID
  5. 8.5Disques optiques et bandes
  6. 8.6Claviers, écrans, imprimantes et caméras
  7. 8.7Des modems à Ethernet : envoyer des bits sur un fil