Académique Documents
Professionnel Documents
Culture Documents
ES102/PC4 : énoncé
et corrigé
1b) Concevoir la porte CMOS fournissant la commande sdh du segment situé côté droit, en haut.
Ce cas est traité sur la partie droite de la figure précédente. Sur la table de Veitch, les 1 de la
fonction sont regroupés visuellement en 3 « gélules » qui correspondent chacune à un sous-
cube maximal. Pour synthétiser le bloc p, on recourt à FDM(sdh)/ = q+d’u’+du et, pour le bloc n,
On considère maintenant un afficheur décimal. Un chiffre n est fourni en code DCB (décimal
codé binaire) sur 4 bits : h (huit), q, d et u tel que n=8h+4q+2d+u. Les possibilités 10 à 15 ne
sont pas exploitées. A chacun des 7 segments de l’afficheur correspond donc une fonction
booléenne incomplètement spécifiée.
1f) Traitant d’abord les cas indifférents comme des 1, déterminer, sans écrire la moindre formule
booléenne, le nombre de transistors nécessaires pour réaliser la porte CMOS fournissant la
commande sgh du segment situé sur le côté gauche, en haut.
Il faut dessiner la table de Veitch, ce qui est fait sur la figure ci-dessous à gauche. Le
recouvrement des 1 se fait au moyen de sous-cubes de dimension respectives : 3, 2, 2 et 2. Le
nombre de pMOS nécessaires est la somme de leurs codimensions : 1+2+2+2=7. Le
recouvrement des 0 se fait par 3 sous-cubes de dimension 1, d’où 3x3=9 nMOS nécessaires.
1g) Les cas indifférents peuvent-ils être mieux exploités pour minimiser le coût en transistors ?
Oui, en mettant plutôt des 0 là où hd(q’+u)=1, on augmente de 1 le nombre de pMOS mais on
diminue de 2 celui des nMOS. D’où une économie d’un transistor.
1h) Au vu des deux questions précédentes, il serait tentant d’exploiter différemment les cas
indifférents selon que l’on synthétise le bloc p ou n. Mais a-t-on le droit ?
Si l’on combinait le bloc n de la réponse précédente avec le bloc p de la réponse d’avant (que
des 1), on gagnerait effectivement un transistor de plus. D’un point de vue général, la tentation
est de mettre plus de 1 dans les cas indifférents pour le bloc p, et plus de 0 pour le bloc n, de
façon à bénéficier de regroupements plus avantageux. Cette tentation est dangereuse. En effet,
un cas indifférent peut se produire, de façon soit accidentelle, soit transitoire. Si, pour un tel cas,
le bloc n fournit un 0 tandis que le p fournit un 1, il y a court-circuit entre alimentation et masse !
1i) Finalement, on traitera tous les cas indifférents comme des 1 car cela va permettre une
factorisation, source d’économie. Achever de concevoir la porte CMOS fournissant sgh.
L’exploitation de la table de Veitch ci-dessous fournit FDM(sgh) = h+d’u’+qu’+qd’. La structure
du bloc p est donc donnée par FDM(sgh)/ = h’+du+q’u+q’d. Le bloc n découle de FDM(/sgh) =
h’du+h’q’u+h’q’d, que l’on factorise par h’, d’où l’implantation ci-dessous au centre.
1j) Revenons au cas octal, où h=0. Quel genre de fonction est alors sgh ? Dans l’implantation
correspondante, vérifier que les formules structurelles des blocs n et p ne sont pas duales. Que se
passe-t-il si l’on rend γn duale de γp ?
Avec h=0, sgh est une fonction majorité, comme celle qui sert à générer la retenue dans un
additionneur binaire complet. Plus précisément, pour h=0, sgh=Maj(q,d’,u’). Les formules γn et γp
ne sont pas duales : on ne passe pas de l’une à l’autre en permutant + et ·. Cette propriété, qui
caractérise les portes les plus simples, trouve donc vite des contre-exemples. En revanche, les
fonctions booléennes correspondantes sont duales par construction, selon le cours.
La formule duale de du+q’u+q’d est (d+u)(q’+u)(q’+d), d’où le nouveau montage présenté à
droite sur la figure ci-dessus : à chaque mise en parallèle dans le bloc p correspond une mise
en série dans le bloc n, et vice-versa. Ce montage est correct puisqu’il respecte par
construction les équations f=γp/ et f=/γn. Mais le bloc n présente des séries de 3 transistors au
lieu de 2 dans l’implantation précédente. La porte est donc moins rapide pour imposer un 0 en
sortie (c’est-à-dire pour décharger une capacité placée en sortie).
La nouvelle formule γn=(d+u)(q’+u)(q’+d) n’est autre que la forme conjonctive minimale (FCM)
de /sgh. Une FCM, qui est une forme ∏∑, peut présenter un grand nombre de facteurs, d’où un
grand nombre de transistors en série (en revanche, chaque facteur est une somme de au plus n
variables). Au contraire, la FDM, qui est une forme ∑∏, voit la taille de ses produits bornée par
le nombre de variables : son utilisation garantit donc qu’il y a au plus n transistors en série, où n
est le nombre de variables de la fonction implantée.
Sachant que les pMOS ne sont pas représentés, la partie gauche est similaire à la structure
de décodeur découverte au 2e exercice, à la différence que l’on n’observe aucune régularité
dans la répartition des nMOS, et qu’il n’y a pas d’inverseurs en haut. Il s’agit de portes NAND à
nombre d’entrées variable (de 2 à 5) prises parmi les 9 sorties de la partie gauche (incluant la
tranche à compléter en bas). Chacune pilote directement un des 7 segments.
La partie gauche est, elle aussi, constituée de portes NAND, implantées horizontalement,
ayant leur entrées parmi les variables h, q, d, u et leurs compléments (sauf h’). Chacune de ces
NAND fournit le complément d’un produit déjà indiqué sur la figure.
Pour comprendre cette PLA dans sa globalité, considérons, dans la partie droite, la 3e porte
NAND, celle qui pilote le segment droit haut (sdh). Il s’agit d’une NAND4 ayant pour entrées
[q’u]’, [q’u’]’, [du]’ et [d’u’]’. Par De Morgan, la sortie s’avère égale à q’u+q’u’+du+d’u’. En effet,
comme déjà vu à plusieurs reprises, un enchaînement NAND o NAND est équivalent à un
enchaînement OR o AND.
L’objet de la partie gauche de la PLA est donc de fabriquer des produits, sous forme
complémentée, tandis que la partie droite fabrique des sommes de ces produits. Les parties
gauche et droite de la PLA sont respectivement appelées plan ET et plan OU. Ceci est
schématisé sur la figure ci-dessous, où M, N, P et Q sont des produits des variables d’entrée
(appelées données), tandis que f, g et h en sont des fonctions. Les traits épais représentent
symboliquement le chemin d’accès d’une porte NAND à ses entrées possibles, la présence d’un
point noir indiquant l’utilisation effective d’une entrée (laquelle se traduit par la présence de
transistors recevant l’entrée sur leur grille dans la structure réellement implantée). Ainsi les 3
fonctions réalisées sur la figure ci-dessous sont : f=M+N+P+Q, g=N+P+Q et h= M+Q. C’est
cette possibilité d’utiliser ou pas une entrée lors de la conception de la PLA, qui justifie la
présence du P (pour programmable) dans cet acronyme.
Dans le premier exercice, il est apparu que sdh=q’+du+d’u’. Ici sgh est implanté par la formule
q’u+q’u’+du+d’u’. Celle-ci est correcte, mais pas minimale. Le remplacement de q’ par q’u+q’u’
correspond à la scission d’un 3-sous-cube en 2 2-sous-cubes, ce qui coûte 6 transistors de plus
(incluant les pMOS) pour sdh. L’intérêt de cette coupure est la réutilisation par d’autres
fonctions : par exemple de q’u par sgb, ou de q’u’ par sh. Cette réutilisation doit permettre
d’économiser des transistors. La détermination de l’ensemble commun minimal des sous-cubes
les plus gros telle que, pour chaque fonction, une sélection d’entre eux en recouvre les ‘1’ n’est
pas au programme d’ES102. Le présent exercice constitue simplement une prise de conscience
du problème.
Afin de compléter la PLA, un étude détaillée est maintenant nécessaire. Chaque ligne génère
le complément d’un produit des variables, auquel correspond un sous-ensemble des chiffres de
0 à 9. Ces sous-ensembles, que l’on détermine trivialement dans une table de Veitch, sont
indiqués ci-dessous à droite de la figure, pour chaque ligne. Ils sont bien compatibles avec les
jeux de segments dont ils déclenchent l’allumage (cf. motifs à traits et points dessinés à côté).
Pour l’instant, on ignore que la dernière ligne correspond au singleton {6}. Voici comment on
peut le montrer. Au sein du plan OU (partie droite), la première colonne génère la fonction
booléenne sm commandant le segment du milieu. Les 3 transistors du haut font que sm=1 si le
chiffre est dans {2, 3, 4, 5, 8, 9}. On constate qu’il manque le 6. La dernière ligne doit donc
correspondre à un sous-ensemble contenant 6. Cependant, vu l’exploitation qui est faite de la
dernière ligne (cf. motif à traits et points), celle-ci ne peut correspondre à d’autres chiffres que 6,
8 et 9. Or, comme on le vérifie sur une table de Veitch, 6 ne peut pas être regroupé dans un
même sous-cube avec 8 ou 9 sans inclure d’autres chiffres. La dernière ligne correspond donc
nécessairement au singleton {6}. On peut toutefois regrouper 6 avec son voisin indéterminé de
droite, d’où un produit qdu’. Les transistors nécessaires sur la dernière ligne s’en déduisent
immédiatement. Pour compléter la dernière colonne, il reste à trouver, parmi tous les sous-
ensembles de chiffres, une union qui couvre les chiffres comportant le segment gauche haut,
par exemple : {8, 9} U {0, 4, 8} U {5} U {6}. Les transistors de la dernière colonne en découlent.
Ce n’est pas la seule couverture possible. La paire {4, 5}, qui correspond à la deuxième ligne,
aurait aussi pu être utilisée, en remplacement (ou non) du singleton {5}. On peut finalement
vérifier que tous les segments sont correctement générés.
3b) Finalement, la structure PLA est-elle avantageuse par rapport à la réalisation individuelle
d’une porte CMOS pour chaque segment ?
La PLA de la question précédente consomme 46 transistors nMOS et autant de pMOS. Cela
représente quelque 13 transistors par segment. Dans l’exercice précédent, ce « budget » n’a
été dépassé que par le segment gauche haut, avec 14 transistors, tandis que 3 autres
segments se contentaient de 6 à 10 transistors. Sans approfondir plus la question, il semble
que la structure PLA apporte non pas une réduction mais plutôt une augmentation du nombre
de transistors.
Mais alors, quel intérêt ? La régularité de leur structure ! L’avantage majeur des PLA n’est
effectivement pas l’économie en transistors qu’elles permettent mais bien plus une économie en
routage et en facilité de réalisation. Les algorithmes de synthèse existent depuis les années 70-
80. D’autre part, le placement des transistors et des connexions métalliques ne fait appel qu’à 3
motifs distincts. Il est donc simple d’écrire un compilateur physique de PLA. Les PLA ont été
hégémoniques jusque dans les années 90. Mais les progrès réalisés dans les algorithmes de
placement et routage de montages complexes en transistors ont relativisé leur intérêt depuis.
3c) Question subsidiaire. Il y a dans la PLA dessinée précédemment avec ses transistors nMOS
seulement, comme une invitation à s’affranchir des transistors pMOS cachés, qui sont aussi
nombreux que les nMOS. L’enjeu est un gain d’un facteur 2 en surface. Bien sûr, il est
impossible de se passer totalement de pMOS. Mais n’y aurait-il pas quelque stratagème
permettant de rétablir la fonctionnalité avec quelques uns seulement ? Cette question rompt
totalement avec ce qui a été vu en cours ou en petite classe jusqu’ici. En fait, elle annonce la
suite du cours, qui va porter sur de la logique séquentielle. Il faut donc être inventif.
Dans une porte CMOS en logique complémentaire, le bloc n a pour rôle d’établir un chemin
passant vers la masse lorsque les valeurs prises par les entrées correspondent à un 0 de la
fonction. Considérons un changement des entrées, qui provoque une transition descendante en
sortie, c’est-à-dire de 1 à 0. Au cours d’un tel événement, le bloc p cesse d’être passant, puis le
bloc n le devient et décharge la capacité de sortie de 1 à 0. Les transitions descendantes en
sortie sont donc assurées par le seul bloc n. En fait, on peut dire que la sortie d’une porte en
logique complémentaire vaut 1 sauf si son bloc n est passant. Dire cela conduit à l’idée de faire
de 1 une valeur par défaut, et à voir le bloc n comme seul véritable acteur du calcul. Mais
comment installer un 1 par défaut ?
On peut songer à une petite résistance qui connecterait la sortie à l’alimentation. Cette idée a
été longtemps exploitée, jusque dans les années 80, mais elle a comme inconvénient d’établir
un court-circuit permanent entre alimentation et masse lorsque le bloc n est passant, avec
gaspillage d’énergie et dissipation thermique aux effets désastreux.
Une autre solution consiste à charger la capacité de sortie, et à la faire décharger par le bloc n
si celui-ci est passant. Cela introduit nécessairement un aspect séquentiel. En effet, si le bloc n
est passant et connecté à la capacité de sortie, essayer de la charger va déclencher un court-
circuit, ce que l’on veut éviter. Il faut donc procéder en deux phases. Durant une première
phase, la capacité de sortie est pré-chargée à 1, tandis que le bloc n est désactivé par une
solution adéquate. Durant une deuxième phase, le bloc n est activé et décharge, le cas
Certaines précautions sont nécessaires pour utiliser des portes NAND dynamiques au sein
d’une PLA. Notamment, il n’est pas possible d’utiliser la même horloge ϕ pour le plan ET et pour
le plan OU. On utilise ϕ1 pour le plan ET et ϕ2 pour le plan OU et les calculs sont effectués
suivant le séquencement suivant :
En effet, dans le plan ET, il faut laisser le temps aux blocs n de décharger la capacité de
sortie quand ils sont passants, donc les valeurs de produits ne sont disponibles que quelques
instants après la transition montante de ϕ1. Le calcul des valeurs des fonctions ∑∏ ne saurait
donc commencer avant. C’est pourquoi les portes NAND du plan OU doivent être commandées
par une deuxième horloge ϕ2 suffisamment en retard par rapport à ϕ1. Une autre contrainte de
fonctionnement est que les entrées h, d, q, u ne doivent plus bouger à partir du moment où ϕ1
remonte, sinon une capacité de sortie portant un produit pourrait se retrouver déchargée par
erreur.
Avec la logique dynamique, nous avons quitté le domaine de la logique combinatoire pour
entrer dans celui de la logique séquentielle. Cette dernière met en œuvre des comportements
temporels, souvent régis par des horloges et qui reposent sur l’aptitude de certains dispositifs à
mémoriser des informations pour les restituer ultérieurement. Dans une porte en logique
dynamique, la mémorisation de l’information se fait par stockage d’une charge sur une capacité.
Il y a inévitablement des fuites de nature résistive, de sorte qu’il faut agir de manière
« dynamique » si l’on veut que l’information mémorisée soit encore valide quand on va
l’exploiter.